mirror of
https://github.com/dotnet/MQTTnet.git
synced 2026-10-18 18:43:10 +08:00
Fix MQTT v5 topic alias forwarding (#2250)
This commit is contained in:
@@ -218,6 +218,8 @@ public sealed class MqttConnectedClient : IDisposable
|
|||||||
HandleTopicAlias(publishPacket);
|
HandleTopicAlias(publishPacket);
|
||||||
|
|
||||||
var applicationMessage = MqttApplicationMessageFactory.Create(publishPacket);
|
var applicationMessage = MqttApplicationMessageFactory.Create(publishPacket);
|
||||||
|
// Topic aliases are scoped to this network connection and must not be forwarded to other clients.
|
||||||
|
applicationMessage.TopicAlias = 0;
|
||||||
|
|
||||||
var dispatchApplicationMessageResult =
|
var dispatchApplicationMessageResult =
|
||||||
await _sessionsManager.DispatchApplicationMessage(Id, UserName, Session.Items, applicationMessage, cancellationToken).ConfigureAwait(false);
|
await _sessionsManager.DispatchApplicationMessage(Id, UserName, Session.Items, applicationMessage, cancellationToken).ConfigureAwait(false);
|
||||||
@@ -579,4 +581,4 @@ public sealed class MqttConnectedClient : IDisposable
|
|||||||
_logger.Warning(exception, "Client '{0}': Error while sending DISCONNECT packet (ReasonCode = {1})", Id, options.ReasonCode);
|
_logger.Warning(exception, "Client '{0}': Error while sending DISCONNECT packet (ReasonCode = {1})", Id, options.ReasonCode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -114,7 +114,7 @@ public sealed class Client_Tests : BaseTestClass
|
|||||||
|
|
||||||
Assert.IsNotNull(receivedMessage);
|
Assert.IsNotNull(receivedMessage);
|
||||||
Assert.AreEqual(applicationMessage.Topic, receivedMessage.Topic);
|
Assert.AreEqual(applicationMessage.Topic, receivedMessage.Topic);
|
||||||
Assert.AreEqual(applicationMessage.TopicAlias, receivedMessage.TopicAlias);
|
Assert.AreEqual(0, receivedMessage.TopicAlias);
|
||||||
Assert.AreEqual(applicationMessage.ContentType, receivedMessage.ContentType);
|
Assert.AreEqual(applicationMessage.ContentType, receivedMessage.ContentType);
|
||||||
Assert.AreEqual(applicationMessage.ResponseTopic, receivedMessage.ResponseTopic);
|
Assert.AreEqual(applicationMessage.ResponseTopic, receivedMessage.ResponseTopic);
|
||||||
Assert.AreEqual(applicationMessage.MessageExpiryInterval, receivedMessage.MessageExpiryInterval);
|
Assert.AreEqual(applicationMessage.MessageExpiryInterval, receivedMessage.MessageExpiryInterval);
|
||||||
@@ -344,4 +344,4 @@ public sealed class Client_Tests : BaseTestClass
|
|||||||
memoryStream.Position = 0;
|
memoryStream.Position = 0;
|
||||||
return memoryStream;
|
return memoryStream;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ public sealed class Topic_Alias_Tests : BaseTestClass
|
|||||||
await testEnvironment.StartServer();
|
await testEnvironment.StartServer();
|
||||||
|
|
||||||
var receivedTopics = new List<string>();
|
var receivedTopics = new List<string>();
|
||||||
|
var receivedTopicAliases = new List<ushort>();
|
||||||
|
|
||||||
var c1 = await testEnvironment.ConnectClient(options => options.WithProtocolVersion(MqttProtocolVersion.V500));
|
var c1 = await testEnvironment.ConnectClient(options => options.WithProtocolVersion(MqttProtocolVersion.V500));
|
||||||
c1.ApplicationMessageReceivedAsync += e =>
|
c1.ApplicationMessageReceivedAsync += e =>
|
||||||
@@ -41,6 +42,7 @@ public sealed class Topic_Alias_Tests : BaseTestClass
|
|||||||
lock (receivedTopics)
|
lock (receivedTopics)
|
||||||
{
|
{
|
||||||
receivedTopics.Add(e.ApplicationMessage.Topic);
|
receivedTopics.Add(e.ApplicationMessage.Topic);
|
||||||
|
receivedTopicAliases.Add(e.ApplicationMessage.TopicAlias);
|
||||||
}
|
}
|
||||||
|
|
||||||
return CompletedTask.Instance;
|
return CompletedTask.Instance;
|
||||||
@@ -68,5 +70,6 @@ public sealed class Topic_Alias_Tests : BaseTestClass
|
|||||||
Assert.HasCount(3, receivedTopics);
|
Assert.HasCount(3, receivedTopics);
|
||||||
CollectionAssert.AllItemsAreNotNull(receivedTopics);
|
CollectionAssert.AllItemsAreNotNull(receivedTopics);
|
||||||
Assert.IsTrue(receivedTopics.All(t => t.Equals("this_is_the_topic", System.StringComparison.Ordinal)));
|
Assert.IsTrue(receivedTopics.All(t => t.Equals("this_is_the_topic", System.StringComparison.Ordinal)));
|
||||||
|
Assert.IsTrue(receivedTopicAliases.All(a => a == 0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user