File indexing completed on 2024-04-28 04:44:21
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 "upnpdevicedescription.h" 0008 #include "upnpservicedescription.h" 0009 #include "upnpactiondescription.h" 0010 0011 #include <QBuffer> 0012 #include <QIODevice> 0013 #include <QPointer> 0014 #include <QXmlStreamWriter> 0015 0016 #include <QDebug> 0017 0018 class UpnpDeviceDescriptionPrivate 0019 { 0020 public: 0021 QList<UpnpServiceDescription> mServices; 0022 0023 QString mDeviceUUID; 0024 0025 QString mUDN; 0026 0027 /** 0028 * @brief mUPC: Universal Product Code 0029 * mUPC is optional. 12-digit, all-numeric code that identifies the consumer package. 0030 * Managed by the Uniform Code Council. Specified by UPnP vendor. Single UPC. 0031 */ 0032 QString mUPC; 0033 0034 QString mDeviceType; 0035 0036 QString mFriendlyName; 0037 0038 QString mManufacturer; 0039 0040 QUrl mManufacturerURL; 0041 0042 QString mModelDescription; 0043 0044 QString mModelName; 0045 0046 QString mModelNumber; 0047 0048 QUrl mModelURL; 0049 0050 QString mSerialNumber; 0051 0052 QString mURLBase; 0053 0054 int mCacheControl = 0; 0055 0056 QUrl mLocationUrl; 0057 }; 0058 0059 UpnpDeviceDescription::UpnpDeviceDescription() 0060 : d(std::make_unique<UpnpDeviceDescriptionPrivate>()) 0061 { 0062 } 0063 0064 UpnpDeviceDescription::UpnpDeviceDescription(const UpnpDeviceDescription &other) 0065 : d(std::make_unique<UpnpDeviceDescriptionPrivate>(*other.d)) 0066 { 0067 } 0068 0069 UpnpDeviceDescription::UpnpDeviceDescription(UpnpDeviceDescription &&other) noexcept 0070 : d() 0071 { 0072 other.d.swap(d); 0073 } 0074 0075 UpnpDeviceDescription::~UpnpDeviceDescription() = default; 0076 0077 UpnpDeviceDescription &UpnpDeviceDescription::operator=(const UpnpDeviceDescription &other) 0078 { 0079 if (this != &other) { 0080 *d = *other.d; 0081 } 0082 return *this; 0083 } 0084 0085 UpnpDeviceDescription &UpnpDeviceDescription::operator=(UpnpDeviceDescription &&other) noexcept 0086 { 0087 if (this != &other) { 0088 d.reset(); 0089 d.swap(other.d); 0090 } 0091 return *this; 0092 } 0093 0094 UpnpServiceDescription UpnpDeviceDescription::serviceById(const QString &serviceId) const 0095 { 0096 for (const auto &oneService : qAsConst(d->mServices)) { 0097 if (oneService.serviceId() == serviceId) { 0098 return oneService; 0099 } 0100 } 0101 0102 return UpnpServiceDescription {}; 0103 } 0104 0105 const UpnpServiceDescription &UpnpDeviceDescription::serviceByIndex(int serviceIndex) const 0106 { 0107 return d->mServices[serviceIndex]; 0108 } 0109 0110 UpnpServiceDescription &UpnpDeviceDescription::serviceByIndex(int serviceIndex) 0111 { 0112 return d->mServices[serviceIndex]; 0113 } 0114 0115 const QList<UpnpServiceDescription> &UpnpDeviceDescription::services() const 0116 { 0117 return d->mServices; 0118 } 0119 0120 QList<UpnpServiceDescription> &UpnpDeviceDescription::services() 0121 { 0122 return d->mServices; 0123 } 0124 0125 QList<QString> UpnpDeviceDescription::servicesName() const 0126 { 0127 QList<QString> result; 0128 0129 for (const auto &itService : qAsConst(d->mServices)) { 0130 result.push_back(itService.serviceType()); 0131 } 0132 0133 return result; 0134 } 0135 0136 void UpnpDeviceDescription::setUDN(const QString &value) 0137 { 0138 d->mDeviceUUID = value.mid(5); 0139 d->mUDN = value; 0140 } 0141 0142 const QString &UpnpDeviceDescription::UDN() const 0143 { 0144 return d->mUDN; 0145 } 0146 0147 void UpnpDeviceDescription::setUPC(const QString &value) 0148 { 0149 d->mUPC = value; 0150 } 0151 0152 const QString &UpnpDeviceDescription::UPC() const 0153 { 0154 return d->mUPC; 0155 } 0156 0157 void UpnpDeviceDescription::setDeviceType(const QString &value) 0158 { 0159 d->mDeviceType = value; 0160 } 0161 0162 const QString &UpnpDeviceDescription::deviceType() const 0163 { 0164 return d->mDeviceType; 0165 } 0166 0167 void UpnpDeviceDescription::setFriendlyName(const QString &value) 0168 { 0169 d->mFriendlyName = value; 0170 } 0171 0172 const QString &UpnpDeviceDescription::friendlyName() const 0173 { 0174 return d->mFriendlyName; 0175 } 0176 0177 void UpnpDeviceDescription::setManufacturer(const QString &value) 0178 { 0179 d->mManufacturer = value; 0180 } 0181 0182 const QString &UpnpDeviceDescription::manufacturer() const 0183 { 0184 return d->mManufacturer; 0185 } 0186 0187 void UpnpDeviceDescription::setManufacturerURL(const QUrl &value) 0188 { 0189 d->mManufacturerURL = value; 0190 } 0191 0192 const QUrl &UpnpDeviceDescription::manufacturerURL() const 0193 { 0194 return d->mManufacturerURL; 0195 } 0196 0197 void UpnpDeviceDescription::setModelDescription(const QString &value) 0198 { 0199 d->mModelDescription = value; 0200 } 0201 0202 const QString &UpnpDeviceDescription::modelDescription() const 0203 { 0204 return d->mModelDescription; 0205 } 0206 0207 void UpnpDeviceDescription::setModelName(const QString &value) 0208 { 0209 d->mModelName = value; 0210 } 0211 0212 const QString &UpnpDeviceDescription::modelName() const 0213 { 0214 return d->mModelName; 0215 } 0216 0217 void UpnpDeviceDescription::setModelNumber(const QString &value) 0218 { 0219 d->mModelNumber = value; 0220 } 0221 0222 const QString &UpnpDeviceDescription::modelNumber() const 0223 { 0224 return d->mModelNumber; 0225 } 0226 0227 void UpnpDeviceDescription::setModelURL(const QUrl &value) 0228 { 0229 d->mModelURL = value; 0230 } 0231 0232 const QUrl &UpnpDeviceDescription::modelURL() const 0233 { 0234 return d->mModelURL; 0235 } 0236 0237 void UpnpDeviceDescription::setSerialNumber(const QString &value) 0238 { 0239 d->mSerialNumber = value; 0240 } 0241 0242 const QString &UpnpDeviceDescription::serialNumber() const 0243 { 0244 return d->mSerialNumber; 0245 } 0246 0247 void UpnpDeviceDescription::setURLBase(const QString &value) 0248 { 0249 d->mURLBase = value; 0250 } 0251 0252 const QString &UpnpDeviceDescription::URLBase() const 0253 { 0254 return d->mURLBase; 0255 } 0256 0257 void UpnpDeviceDescription::setCacheControl(int value) 0258 { 0259 d->mCacheControl = value; 0260 } 0261 0262 int UpnpDeviceDescription::cacheControl() const 0263 { 0264 return d->mCacheControl; 0265 } 0266 0267 void UpnpDeviceDescription::setLocationUrl(const QUrl &value) 0268 { 0269 d->mLocationUrl = value; 0270 } 0271 0272 const QUrl &UpnpDeviceDescription::locationUrl() const 0273 { 0274 return d->mLocationUrl; 0275 } 0276 0277 int UpnpDeviceDescription::addService(UpnpServiceDescription newService) 0278 { 0279 d->mServices.push_back(std::move(newService)); 0280 return d->mServices.count() - 1; 0281 }