diff options
author | Maurice Kalinowski <maurice.kalinowski@qt.io> | 2018-08-08 14:29:09 +0200 |
---|---|---|
committer | Maurice Kalinowski <maurice.kalinowski@qt.io> | 2018-08-09 10:30:36 +0000 |
commit | e8bdfe7b4c0406622c3b74e74bc33c373667ab58 (patch) | |
tree | d2b5e74e4dfa7717eccd872212220896c5b79e3b /src/mqtt | |
parent | b9ac8d04f2f5e3fe4b2d2dcc9fe5d6c12603898c (diff) |
Rename QMqttPublishProperties::subscriptionIdentifiers
The standard did not mention it explicitly to be a list. However,
quoting "Multiple Subscription Identifiers will be included if the
publication is the result of a match to more than one subscription, in
this case their order is not significant" clearly indicates that
multiple subscription ids can be part of a publish message.
Change-Id: I1a45564a719847020e24aec7d0385807f3be3aa4
Reviewed-by: hjk <hjk@qt.io>
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); |