mirror of
https://github.com/qt/qtmqtt.git
synced 2026-10-25 16:16:26 +00:00
Better handling for topic alias of a received message
* for received PUBLISH, check for Client-to-Server Maximum Topic Alias preference, not Server-to-Client one * fire ProtocolViolation on topicAlias == 0 * return earlier on errors Change-Id: Ia371b7a4e05704d07caab6c0d67b9180f590f1fc Reviewed-by: Maurice Kalinowski <maurice.kalinowski@qt.io>
This commit is contained in:
parent
5788322b76
commit
f8ecf4d56a
@ -1531,18 +1531,21 @@ void QMqttConnection::finalize_publish()
|
||||
if (m_clientPrivate->m_protocolVersion == QMqttClient::MQTT_5_0)
|
||||
readPublishProperties(publishProperties);
|
||||
|
||||
const quint16 topicAlias = publishProperties.topicAlias();
|
||||
if (topicAlias > 0) {
|
||||
if (topicAlias > m_clientPrivate->m_serverConnectionProperties.maximumTopicAlias()) {
|
||||
if (publishProperties.availableProperties() & QMqttPublishProperties::TopicAlias) {
|
||||
const quint16 topicAlias = publishProperties.topicAlias();
|
||||
if (topicAlias == 0 || topicAlias > m_clientPrivate->m_connectionProperties.maximumTopicAlias()) {
|
||||
qCDebug(lcMqttConnection) << "TopicAlias receive: overflow.";
|
||||
closeConnection(QMqttClient::ProtocolViolation);
|
||||
} else if (topicLength == 0) { // New message on existing topic alias
|
||||
if (m_receiveAliases.at(topicAlias - 1).name().isEmpty()) {
|
||||
return;
|
||||
}
|
||||
if (topicLength == 0) { // New message on existing topic alias
|
||||
topic = m_receiveAliases.at(topicAlias - 1);
|
||||
if (topic.name().isEmpty()) {
|
||||
qCDebug(lcMqttConnection) << "TopicAlias receive: alias for unknown topic.";
|
||||
closeConnection(QMqttClient::ProtocolViolation);
|
||||
return;
|
||||
}
|
||||
qCDebug(lcMqttConnectionVerbose) << "TopicAlias receive: Using " << topicAlias;
|
||||
topic = m_receiveAliases.at(topicAlias - 1);
|
||||
} else { // Resetting a topic alias
|
||||
qCDebug(lcMqttConnection) << "TopicAlias receive: Resetting:" << topic.name() << " : " << topicAlias;
|
||||
m_receiveAliases[topicAlias - 1] = topic;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user