mirror of
https://github.com/dotnet/MQTTnet.git
synced 2026-10-15 00:15:15 +08:00
DISCONNECT packet should allow zero-length body (#1994)
* DISCONNECT packet should allow zero-length body > [If the Remaining Length is less than 1 the value of 0x00 (Normal disconnection) is used.](https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901208) * Update release notes and add comment --------- Co-authored-by: Christian <6939810+chkr1011@users.noreply.github.com>
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
* [Core] Optimized packet serialization of PUBACK and PUBREC packets for protocol version 5.0.0 (#1939, thanks to @Y-Sindo).
|
* [Core] Optimized packet serialization of PUBACK and PUBREC packets for protocol version 5.0.0 (#1939, thanks to @Y-Sindo).
|
||||||
* [Core] The package inspector is now fully async (#1941).
|
* [Core] The package inspector is now fully async (#1941).
|
||||||
|
* [Core] Fixed decoding of DISCONNECT packet with empty body (#1994, thanks to @Y-Sindo).
|
||||||
* [Client] Added a dedicated exception when the client is not connected (#1954, thanks to @marcpiulachs).
|
* [Client] Added a dedicated exception when the client is not connected (#1954, thanks to @marcpiulachs).
|
||||||
* [Client] The client will now throw a _MqttClientUnexpectedDisconnectReceivedException_ when publishing a QoS 0 message which leads to a server disconnect (BREAKING CHANGE!, #1974, thanks to @fazho).
|
* [Client] The client will now throw a _MqttClientUnexpectedDisconnectReceivedException_ when publishing a QoS 0 message which leads to a server disconnect (BREAKING CHANGE!, #1974, thanks to @fazho).
|
||||||
* [Client] Exposed the certificate selection event handler in client options (#1984).
|
* [Client] Exposed the certificate selection event handler in client options (#1984).
|
||||||
|
|||||||
@@ -220,7 +220,7 @@ namespace MQTTnet.Formatter.V5
|
|||||||
var packet = new MqttConnectPacket
|
var packet = new MqttConnectPacket
|
||||||
{
|
{
|
||||||
// If the Request Problem Information is absent, the value of 1 is used.
|
// If the Request Problem Information is absent, the value of 1 is used.
|
||||||
RequestProblemInformation = true
|
RequestProblemInformation = true
|
||||||
};
|
};
|
||||||
|
|
||||||
var protocolName = _bufferReader.ReadString();
|
var protocolName = _bufferReader.ReadString();
|
||||||
@@ -352,7 +352,16 @@ namespace MQTTnet.Formatter.V5
|
|||||||
|
|
||||||
MqttPacket DecodeDisconnectPacket(ArraySegment<byte> body)
|
MqttPacket DecodeDisconnectPacket(ArraySegment<byte> body)
|
||||||
{
|
{
|
||||||
ThrowIfBodyIsEmpty(body);
|
// From RFC: 3.14.2.1 Disconnect Reason Code
|
||||||
|
// Byte 1 in the Variable Header is the Disconnect Reason Code.
|
||||||
|
// If the Remaining Length is less than 1 the value of 0x00 (Normal disconnection) is used.
|
||||||
|
if (body.Count == 0)
|
||||||
|
{
|
||||||
|
return new MqttDisconnectPacket
|
||||||
|
{
|
||||||
|
ReasonCode = MqttDisconnectReasonCode.NormalDisconnection
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
_bufferReader.SetBuffer(body.Array, body.Offset, body.Count);
|
_bufferReader.SetBuffer(body.Array, body.Offset, body.Count);
|
||||||
|
|
||||||
@@ -386,7 +395,7 @@ namespace MQTTnet.Formatter.V5
|
|||||||
|
|
||||||
return packet;
|
return packet;
|
||||||
}
|
}
|
||||||
|
|
||||||
MqttPacket DecodePubAckPacket(ArraySegment<byte> body)
|
MqttPacket DecodePubAckPacket(ArraySegment<byte> body)
|
||||||
{
|
{
|
||||||
ThrowIfBodyIsEmpty(body);
|
ThrowIfBodyIsEmpty(body);
|
||||||
@@ -724,7 +733,7 @@ namespace MQTTnet.Formatter.V5
|
|||||||
packet.UserProperties = propertiesReader.CollectedUserProperties;
|
packet.UserProperties = propertiesReader.CollectedUserProperties;
|
||||||
|
|
||||||
packet.ReasonCodes = new List<MqttUnsubscribeReasonCode>(_bufferReader.BytesLeft);
|
packet.ReasonCodes = new List<MqttUnsubscribeReasonCode>(_bufferReader.BytesLeft);
|
||||||
|
|
||||||
while (!_bufferReader.EndOfStream)
|
while (!_bufferReader.EndOfStream)
|
||||||
{
|
{
|
||||||
var reasonCode = (MqttUnsubscribeReasonCode)_bufferReader.ReadByte();
|
var reasonCode = (MqttUnsubscribeReasonCode)_bufferReader.ReadByte();
|
||||||
@@ -770,4 +779,4 @@ namespace MQTTnet.Formatter.V5
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user