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 }