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 }