diff options
Diffstat (limited to 'src/mqtt')
-rw-r--r-- | src/mqtt/qmqttconnection.cpp | 18 | ||||
-rw-r--r-- | src/mqtt/qmqttpublishproperties.cpp | 8 | ||||
-rw-r--r-- | src/mqtt/qmqttpublishproperties.h | 4 |
3 files changed, 17 insertions, 13 deletions
diff --git a/src/mqtt/qmqttconnection.cpp b/src/mqtt/qmqttconnection.cpp index b9c821d..7092249 100644 --- a/src/mqtt/qmqttconnection.cpp +++ b/src/mqtt/qmqttconnection.cpp @@ -900,6 +900,7 @@ void QMqttConnection::readPublishProperties(QMqttPublishProperties &properties) m_missingData -= propertyLength; QMqttUserProperties userProperties; + QList<quint32> subscriptionIds; while (propertyLength > 0) { const quint8 propertyId = readBufferTyped<quint8>(&propertyLength); @@ -942,7 +943,7 @@ void QMqttConnection::readPublishProperties(QMqttPublishProperties &properties) if (id < 0) return; // readVariableByteInteger closes connection propertyLength -= idSize; - properties.setSubscriptionIdentifier(quint32(id)); + subscriptionIds.append(quint32(id)); break; } case 0x03: { // 3.3.2.3.9 Content Type @@ -957,6 +958,9 @@ void QMqttConnection::readPublishProperties(QMqttPublishProperties &properties) } if (!userProperties.isEmpty()) properties.setUserProperties(userProperties); + + if (!subscriptionIds.isEmpty()) + properties.setSubscriptionIdentifiers(subscriptionIds); } void QMqttConnection::readSubscriptionProperties(QMqttSubscription *sub) @@ -1211,12 +1215,12 @@ QByteArray QMqttConnection::writePublishProperties(const QMqttPublishProperties } // 3.3.2.3.8 Subscription Identifier - if (properties.availableProperties() & QMqttPublishProperties::SubscriptionIdentifier && - properties.subscriptionIdentifier() > 0) { - qCDebug(lcMqttConnectionVerbose) << "Publish Properties: Subscription ID:" - << properties.subscriptionIdentifier(); - packet.append(char(0x0b)); - packet.appendRawVariableInteger(properties.subscriptionIdentifier()); + if (properties.availableProperties() & QMqttPublishProperties::SubscriptionIdentifier) { + for (auto id : properties.subscriptionIdentifiers()) { + qCDebug(lcMqttConnectionVerbose) << "Publish Properties: Subscription ID:" << id; + packet.append(char(0x0b)); + packet.appendRawVariableInteger(id); + } } // 3.3.2.3.9 Content Type diff --git a/src/mqtt/qmqttpublishproperties.cpp b/src/mqtt/qmqttpublishproperties.cpp index d54fd35..66cc9e8 100644 --- a/src/mqtt/qmqttpublishproperties.cpp +++ b/src/mqtt/qmqttpublishproperties.cpp @@ -43,7 +43,7 @@ public: QString contentType; QByteArray correlationData; quint32 messageExpiry{0}; - quint32 subscriptionIdentifier{0}; // Variable Integer + QList<quint32> subscriptionIdentifier; QMqttPublishProperties::PublishPropertyDetails details{QMqttPublishProperties::None}; quint16 topicAlias{0}; QMqtt::PayloadFormatIndicator payloadIndicator{QMqtt::PayloadFormatIndicator::Unspecified}; @@ -141,14 +141,14 @@ void QMqttPublishProperties::setUserProperties(const QMqttUserProperties &proper data->userProperties = properties; } -quint32 QMqttPublishProperties::subscriptionIdentifier() const +QList<quint32> QMqttPublishProperties::subscriptionIdentifiers() const { return data->subscriptionIdentifier; } -void QMqttPublishProperties::setSubscriptionIdentifier(quint32 id) +void QMqttPublishProperties::setSubscriptionIdentifiers(const QList<quint32> &id) { - if (id == 0) { + if (id.indexOf(0) != -1) { qCDebug(lcMqttClient) << "A subscription identifier with value 0 is not allowed."; return; } diff --git a/src/mqtt/qmqttpublishproperties.h b/src/mqtt/qmqttpublishproperties.h index 665311b..93ec6f9 100644 --- a/src/mqtt/qmqttpublishproperties.h +++ b/src/mqtt/qmqttpublishproperties.h @@ -82,8 +82,8 @@ public: QMqttUserProperties userProperties() const; void setUserProperties(const QMqttUserProperties &properties); - quint32 subscriptionIdentifier() const; - void setSubscriptionIdentifier(quint32 id); + QList<quint32> subscriptionIdentifiers() const; + void setSubscriptionIdentifiers(const QList<quint32> &id); QString contentType() const; void setContentType(const QString &type); |