Fix wrong retain flag when distributing messages.

This commit is contained in:
Christian Kratky
2018-11-28 21:35:50 +01:00
parent 83eca982e9
commit ccc275902f
8 changed files with 77 additions and 15 deletions
+7 -2
View File
@@ -227,7 +227,7 @@ namespace MQTTnet.Server
Topic = publishPacket.Topic,
Payload = publishPacket.Payload,
QualityOfServiceLevel = checkSubscriptionsResult.QualityOfServiceLevel,
Retain = false,
Retain = publishPacket.Retain,
Dup = false
};
@@ -371,7 +371,12 @@ namespace MQTTnet.Server
var retainedMessages = _retainedMessagesManager.GetSubscribedMessages(topicFilters);
foreach (var applicationMessage in retainedMessages)
{
EnqueueApplicationMessage(null, applicationMessage.ToPublishPacket());
var publishPacket = applicationMessage.ToPublishPacket();
// Set the retain flag to true according to [MQTT-3.3.1-8].
publishPacket.Retain = true;
EnqueueApplicationMessage(null, publishPacket);
}
}
@@ -185,7 +185,12 @@ namespace MQTTnet.Server
foreach (var clientSession in GetSessions())
{
clientSession.EnqueueApplicationMessage(enqueuedApplicationMessage.Sender, applicationMessage.ToPublishPacket());
var publishPacket = applicationMessage.ToPublishPacket();
// Set the retain flag to true according to [MQTT-3.3.1-9].
publishPacket.Retain = false;
clientSession.EnqueueApplicationMessage(enqueuedApplicationMessage.Sender, publishPacket);
}
}
catch (OperationCanceledException)