mirror of
https://github.com/dotnet/MQTTnet.git
synced 2026-10-21 04:03:05 +08:00
Add support for Maximum QoS property on CONNACK
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using MQTTnet.Packets;
|
using MQTTnet.Packets;
|
||||||
|
using MQTTnet.Protocol;
|
||||||
|
|
||||||
namespace MQTTnet.Client.Connecting
|
namespace MQTTnet.Client.Connecting
|
||||||
{
|
{
|
||||||
@@ -25,6 +26,8 @@ namespace MQTTnet.Client.Connecting
|
|||||||
public string ReasonString { get; set; }
|
public string ReasonString { get; set; }
|
||||||
|
|
||||||
public ushort? ReceiveMaximum { get; set; }
|
public ushort? ReceiveMaximum { get; set; }
|
||||||
|
|
||||||
|
public MqttQualityOfServiceLevel? MaximumQoS { get; set; }
|
||||||
|
|
||||||
public string ResponseInformation { get; set; }
|
public string ResponseInformation { get; set; }
|
||||||
|
|
||||||
|
|||||||
@@ -93,6 +93,7 @@ namespace MQTTnet.Formatter.V5
|
|||||||
MaximumPacketSize = connAckPacket.Properties?.MaximumPacketSize,
|
MaximumPacketSize = connAckPacket.Properties?.MaximumPacketSize,
|
||||||
ReasonString = connAckPacket.Properties?.ReasonString,
|
ReasonString = connAckPacket.Properties?.ReasonString,
|
||||||
ReceiveMaximum = connAckPacket.Properties?.ReceiveMaximum,
|
ReceiveMaximum = connAckPacket.Properties?.ReceiveMaximum,
|
||||||
|
MaximumQoS = connAckPacket.Properties?.MaximumQoS,
|
||||||
ResponseInformation = connAckPacket.Properties?.ResponseInformation,
|
ResponseInformation = connAckPacket.Properties?.ResponseInformation,
|
||||||
TopicAliasMaximum = connAckPacket.Properties?.TopicAliasMaximum,
|
TopicAliasMaximum = connAckPacket.Properties?.TopicAliasMaximum,
|
||||||
ServerReference = connAckPacket.Properties?.ServerReference,
|
ServerReference = connAckPacket.Properties?.ServerReference,
|
||||||
|
|||||||
@@ -254,6 +254,10 @@ namespace MQTTnet.Formatter.V5
|
|||||||
{
|
{
|
||||||
packet.Properties.ReceiveMaximum = propertiesReader.ReadReceiveMaximum();
|
packet.Properties.ReceiveMaximum = propertiesReader.ReadReceiveMaximum();
|
||||||
}
|
}
|
||||||
|
else if (propertiesReader.CurrentPropertyId == MqttPropertyId.MaximumQoS)
|
||||||
|
{
|
||||||
|
packet.Properties.MaximumQoS = propertiesReader.ReadMaximumQoS();
|
||||||
|
}
|
||||||
else if (propertiesReader.CurrentPropertyId == MqttPropertyId.AssignedClientIdentifier)
|
else if (propertiesReader.CurrentPropertyId == MqttPropertyId.AssignedClientIdentifier)
|
||||||
{
|
{
|
||||||
packet.Properties.AssignedClientIdentifier = propertiesReader.ReadAssignedClientIdentifier();
|
packet.Properties.AssignedClientIdentifier = propertiesReader.ReadAssignedClientIdentifier();
|
||||||
|
|||||||
@@ -203,6 +203,7 @@ namespace MQTTnet.Formatter.V5
|
|||||||
propertiesWriter.WriteAuthenticationData(packet.Properties.AuthenticationData);
|
propertiesWriter.WriteAuthenticationData(packet.Properties.AuthenticationData);
|
||||||
propertiesWriter.WriteRetainAvailable(packet.Properties.RetainAvailable);
|
propertiesWriter.WriteRetainAvailable(packet.Properties.RetainAvailable);
|
||||||
propertiesWriter.WriteReceiveMaximum(packet.Properties.ReceiveMaximum);
|
propertiesWriter.WriteReceiveMaximum(packet.Properties.ReceiveMaximum);
|
||||||
|
propertiesWriter.WriteMaximumQoS(packet.Properties.MaximumQoS);
|
||||||
propertiesWriter.WriteAssignedClientIdentifier(packet.Properties.AssignedClientIdentifier);
|
propertiesWriter.WriteAssignedClientIdentifier(packet.Properties.AssignedClientIdentifier);
|
||||||
propertiesWriter.WriteTopicAliasMaximum(packet.Properties.TopicAliasMaximum);
|
propertiesWriter.WriteTopicAliasMaximum(packet.Properties.TopicAliasMaximum);
|
||||||
propertiesWriter.WriteReasonString(packet.Properties.ReasonString);
|
propertiesWriter.WriteReasonString(packet.Properties.ReasonString);
|
||||||
|
|||||||
@@ -82,6 +82,16 @@ namespace MQTTnet.Formatter.V5
|
|||||||
return _body.ReadTwoByteInteger();
|
return _body.ReadTwoByteInteger();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public MqttQualityOfServiceLevel ReadMaximumQoS()
|
||||||
|
{
|
||||||
|
byte value = _body.ReadByte();
|
||||||
|
if (value > 1)
|
||||||
|
{
|
||||||
|
throw new MqttProtocolViolationException($"Unexpected Maximum QoS value: {value}");
|
||||||
|
}
|
||||||
|
return (MqttQualityOfServiceLevel)value;
|
||||||
|
}
|
||||||
|
|
||||||
public string ReadAssignedClientIdentifier()
|
public string ReadAssignedClientIdentifier()
|
||||||
{
|
{
|
||||||
return _body.ReadStringWithLengthPrefix();
|
return _body.ReadStringWithLengthPrefix();
|
||||||
|
|||||||
@@ -133,6 +133,17 @@ namespace MQTTnet.Formatter.V5
|
|||||||
Write(MqttPropertyId.ReceiveMaximum, value);
|
Write(MqttPropertyId.ReceiveMaximum, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void WriteMaximumQoS(MqttQualityOfServiceLevel? value)
|
||||||
|
{
|
||||||
|
if (!value.HasValue || value.Value > MqttQualityOfServiceLevel.AtLeastOnce)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_packetWriter.Write((byte)MqttPropertyId.MaximumQoS);
|
||||||
|
_packetWriter.Write((byte)value.Value);
|
||||||
|
}
|
||||||
|
|
||||||
public void WriteMaximumPacketSize(uint? value)
|
public void WriteMaximumPacketSize(uint? value)
|
||||||
{
|
{
|
||||||
WriteAsFourByteInteger(MqttPropertyId.MaximumPacketSize, value);
|
WriteAsFourByteInteger(MqttPropertyId.MaximumPacketSize, value);
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using MQTTnet.Protocol;
|
||||||
|
|
||||||
namespace MQTTnet.Packets
|
namespace MQTTnet.Packets
|
||||||
{
|
{
|
||||||
@@ -8,6 +9,8 @@ namespace MQTTnet.Packets
|
|||||||
|
|
||||||
public ushort? ReceiveMaximum { get; set; }
|
public ushort? ReceiveMaximum { get; set; }
|
||||||
|
|
||||||
|
public MqttQualityOfServiceLevel? MaximumQoS { get; set; }
|
||||||
|
|
||||||
public bool? RetainAvailable { get; set; }
|
public bool? RetainAvailable { get; set; }
|
||||||
|
|
||||||
public uint? MaximumPacketSize { get; set; }
|
public uint? MaximumPacketSize { get; set; }
|
||||||
|
|||||||
Reference in New Issue
Block a user