File indexing completed on 2024-04-28 04:44:22

0001 /*
0002    SPDX-FileCopyrightText: 2015 (c) Matthieu Gallien <matthieu_gallien@yahoo.fr>
0003 
0004    SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005  */
0006 
0007 #include "upnpservicedescription.h"
0008 #include "upnpactiondescription.h"
0009 #include "upnpdevicedescription.h"
0010 #include "upnpstatevariabledescription.h"
0011 
0012 #include <QBuffer>
0013 #include <QIODevice>
0014 #include <QMetaObject>
0015 #include <QMetaProperty>
0016 #include <QPointer>
0017 #include <QTimer>
0018 #include <QXmlStreamWriter>
0019 
0020 #include <QDebug>
0021 
0022 class UpnpServiceDescriptionPrivate
0023 {
0024 public:
0025     QString mBaseURL;
0026 
0027     QString mServiceType;
0028 
0029     QString mServiceId;
0030 
0031     QUrl mSCPDURL;
0032 
0033     QUrl mControlURL;
0034 
0035     QUrl mEventURL;
0036 
0037     QPointer<QIODevice> mXmlDescription;
0038 
0039     QMap<QString, UpnpActionDescription> mActions;
0040 
0041     QMap<QString, UpnpStateVariableDescription> mStateVariables;
0042 
0043     QVector<QPointer<UpnpEventSubscriber>> mSubscribers;
0044 
0045     int mMaximumSubscriptionDuration = 3600;
0046 };
0047 
0048 UpnpServiceDescription::UpnpServiceDescription()
0049     : d(std::make_unique<UpnpServiceDescriptionPrivate>())
0050 {
0051 }
0052 
0053 UpnpServiceDescription::UpnpServiceDescription(const UpnpServiceDescription &other)
0054     : d(std::make_unique<UpnpServiceDescriptionPrivate>(*other.d))
0055 {
0056 }
0057 
0058 UpnpServiceDescription::UpnpServiceDescription(UpnpServiceDescription &&other) noexcept
0059     : d()
0060 {
0061     d.swap(other.d);
0062 }
0063 
0064 UpnpServiceDescription::~UpnpServiceDescription() = default;
0065 
0066 UpnpServiceDescription &UpnpServiceDescription::operator=(const UpnpServiceDescription &other)
0067 {
0068     if (this != &other) {
0069         *d = *other.d;
0070     }
0071 
0072     return *this;
0073 }
0074 
0075 UpnpServiceDescription &UpnpServiceDescription::operator=(UpnpServiceDescription &&other) noexcept
0076 {
0077     if (this != &other) {
0078         d.reset();
0079         d.swap(other.d);
0080     }
0081 
0082     return *this;
0083 }
0084 
0085 void UpnpServiceDescription::setBaseURL(const QString &newBaseURL)
0086 {
0087     d->mBaseURL = newBaseURL;
0088 }
0089 
0090 const QString &UpnpServiceDescription::baseURL() const
0091 {
0092     return d->mBaseURL;
0093 }
0094 
0095 void UpnpServiceDescription::setServiceType(const QString &newServiceType)
0096 {
0097     d->mServiceType = newServiceType;
0098 }
0099 
0100 const QString &UpnpServiceDescription::serviceType() const
0101 {
0102     return d->mServiceType;
0103 }
0104 
0105 void UpnpServiceDescription::setServiceId(const QString &newServiceId)
0106 {
0107     d->mServiceId = newServiceId;
0108 }
0109 
0110 const QString &UpnpServiceDescription::serviceId() const
0111 {
0112     return d->mServiceId;
0113 }
0114 
0115 void UpnpServiceDescription::setSCPDURL(const QUrl &newSCPDURL)
0116 {
0117     d->mSCPDURL = newSCPDURL;
0118 }
0119 
0120 const QUrl &UpnpServiceDescription::SCPDURL() const
0121 {
0122     return d->mSCPDURL;
0123 }
0124 
0125 void UpnpServiceDescription::setControlURL(const QUrl &newControlURL)
0126 {
0127     d->mControlURL = newControlURL;
0128 }
0129 
0130 const QUrl &UpnpServiceDescription::controlURL() const
0131 {
0132     return d->mControlURL;
0133 }
0134 
0135 void UpnpServiceDescription::setEventURL(const QUrl &newEventURL)
0136 {
0137     d->mEventURL = newEventURL;
0138 }
0139 
0140 const QUrl &UpnpServiceDescription::eventURL() const
0141 {
0142     return d->mEventURL;
0143 }
0144 
0145 void UpnpServiceDescription::setMaximumSubscriptionDuration(int newValue)
0146 {
0147     d->mMaximumSubscriptionDuration = newValue;
0148 }
0149 
0150 int UpnpServiceDescription::maximumSubscriptionDuration() const
0151 {
0152     return d->mMaximumSubscriptionDuration;
0153 }
0154 
0155 void UpnpServiceDescription::addAction(const UpnpActionDescription &newAction)
0156 {
0157     d->mActions[newAction.mName] = newAction;
0158 }
0159 
0160 const UpnpActionDescription &UpnpServiceDescription::action(const QString &name) const
0161 {
0162     return d->mActions[name];
0163 }
0164 
0165 QMap<QString, UpnpActionDescription> &UpnpServiceDescription::actions()
0166 {
0167     return d->mActions;
0168 }
0169 
0170 const QMap<QString, UpnpActionDescription> &UpnpServiceDescription::actions() const
0171 {
0172     return d->mActions;
0173 }
0174 
0175 void UpnpServiceDescription::addStateVariable(const UpnpStateVariableDescription &newVariable)
0176 {
0177     d->mStateVariables[newVariable.mUpnpName] = newVariable;
0178 }
0179 
0180 const UpnpStateVariableDescription &UpnpServiceDescription::stateVariable(const QString &name) const
0181 {
0182     return d->mStateVariables[name];
0183 }
0184 
0185 QMap<QString, UpnpStateVariableDescription> &UpnpServiceDescription::stateVariables()
0186 {
0187     return d->mStateVariables;
0188 }
0189 
0190 const QMap<QString, UpnpStateVariableDescription> &UpnpServiceDescription::stateVariables() const
0191 {
0192     return d->mStateVariables;
0193 }