mirror of
https://github.com/dotnet/MQTTnet.git
synced 2026-10-19 19:13:11 +08:00
Unused parameter in WithTryPrivate causing client to send incorrect version byte in header. (#2125)
* fix: unused tryPrivate parameter in WithTryPrivate * Fix wrong usage of try private --------- Co-authored-by: christian <6939810+chkr1011@users.noreply.github.com>
This commit is contained in:
@@ -18,9 +18,9 @@ namespace MQTTnet.Formatter.V3
|
|||||||
{
|
{
|
||||||
const int FixedHeaderSize = 1;
|
const int FixedHeaderSize = 1;
|
||||||
|
|
||||||
static readonly MqttDisconnectPacket DisconnectPacket = new MqttDisconnectPacket();
|
static readonly MqttDisconnectPacket DisconnectPacket = new();
|
||||||
|
|
||||||
readonly MqttBufferReader _bufferReader = new MqttBufferReader();
|
readonly MqttBufferReader _bufferReader = new();
|
||||||
readonly MqttBufferWriter _bufferWriter;
|
readonly MqttBufferWriter _bufferWriter;
|
||||||
readonly MqttProtocolVersion _mqttProtocolVersion;
|
readonly MqttProtocolVersion _mqttProtocolVersion;
|
||||||
|
|
||||||
@@ -68,10 +68,8 @@ namespace MQTTnet.Formatter.V3
|
|||||||
{
|
{
|
||||||
return DecodeConnAckPacketV311(receivedMqttPacket.Body);
|
return DecodeConnAckPacketV311(receivedMqttPacket.Body);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
return DecodeConnAckPacket(receivedMqttPacket.Body);
|
||||||
return DecodeConnAckPacket(receivedMqttPacket.Body);
|
|
||||||
}
|
|
||||||
case MqttControlPacketType.Disconnect:
|
case MqttControlPacketType.Disconnect:
|
||||||
return DisconnectPacket;
|
return DisconnectPacket;
|
||||||
|
|
||||||
@@ -106,10 +104,6 @@ namespace MQTTnet.Formatter.V3
|
|||||||
payload = publishPacket.Payload;
|
payload = publishPacket.Payload;
|
||||||
remainingLength += (uint)payload.Length;
|
remainingLength += (uint)payload.Length;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
publishPacket = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
var remainingLengthSize = MqttBufferWriter.GetVariableByteIntegerSize(remainingLength);
|
var remainingLengthSize = MqttBufferWriter.GetVariableByteIntegerSize(remainingLength);
|
||||||
|
|
||||||
@@ -481,7 +475,16 @@ namespace MQTTnet.Formatter.V3
|
|||||||
ValidateConnectPacket(packet);
|
ValidateConnectPacket(packet);
|
||||||
|
|
||||||
bufferWriter.WriteString("MQTT");
|
bufferWriter.WriteString("MQTT");
|
||||||
bufferWriter.WriteByte(4); // 3.1.2.2 Protocol Level 4
|
|
||||||
|
// 3.1.2.2 Protocol Level 4
|
||||||
|
var protocolVersion = 4;
|
||||||
|
|
||||||
|
if (packet.TryPrivate)
|
||||||
|
{
|
||||||
|
protocolVersion |= 0x80;
|
||||||
|
}
|
||||||
|
|
||||||
|
bufferWriter.WriteByte((byte)protocolVersion);
|
||||||
|
|
||||||
byte connectFlags = 0x0;
|
byte connectFlags = 0x0;
|
||||||
if (packet.CleanSession)
|
if (packet.CleanSession)
|
||||||
@@ -552,19 +555,15 @@ namespace MQTTnet.Formatter.V3
|
|||||||
{
|
{
|
||||||
return EncodeConnectPacketV311(connectPacket, bufferWriter);
|
return EncodeConnectPacketV311(connectPacket, bufferWriter);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
return EncodeConnectPacket(connectPacket, bufferWriter);
|
||||||
return EncodeConnectPacket(connectPacket, bufferWriter);
|
|
||||||
}
|
|
||||||
case MqttConnAckPacket connAckPacket:
|
case MqttConnAckPacket connAckPacket:
|
||||||
if (_mqttProtocolVersion == MqttProtocolVersion.V311)
|
if (_mqttProtocolVersion == MqttProtocolVersion.V311)
|
||||||
{
|
{
|
||||||
return EncodeConnAckPacketV311(connAckPacket, bufferWriter);
|
return EncodeConnAckPacketV311(connAckPacket, bufferWriter);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
return EncodeConnAckPacket(connAckPacket, bufferWriter);
|
||||||
return EncodeConnAckPacket(connAckPacket, bufferWriter);
|
|
||||||
}
|
|
||||||
case MqttDisconnectPacket _:
|
case MqttDisconnectPacket _:
|
||||||
return EncodeEmptyPacket(MqttControlPacketType.Disconnect);
|
return EncodeEmptyPacket(MqttControlPacketType.Disconnect);
|
||||||
case MqttPingReqPacket _:
|
case MqttPingReqPacket _:
|
||||||
|
|||||||
@@ -127,7 +127,7 @@ public sealed class MqttClientOptions
|
|||||||
/// connect properly.
|
/// connect properly.
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool TryPrivate { get; set; } = true;
|
public bool TryPrivate { get; set; } // Implementation in Mosquitto: https://github.com/eclipse-mosquitto/mosquitto/blob/3cbe805e71ac41a2a20cc9b2ea6b3b619f49554a/lib/send_connect.c#L153
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the user properties.
|
/// Gets or sets the user properties.
|
||||||
|
|||||||
@@ -361,9 +361,9 @@ public sealed class MqttClientOptionsBuilder
|
|||||||
/// Not all brokers support this feature so it may be necessary to set it to false if your bridge does not connect
|
/// Not all brokers support this feature so it may be necessary to set it to false if your bridge does not connect
|
||||||
/// properly.
|
/// properly.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public MqttClientOptionsBuilder WithTryPrivate(bool tryPrivate = true)
|
public MqttClientOptionsBuilder WithTryPrivate(bool value = true)
|
||||||
{
|
{
|
||||||
_options.TryPrivate = true;
|
_options.TryPrivate = value;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,11 @@ public static class MqttClientOptionsValidator
|
|||||||
|
|
||||||
if (options.ProtocolVersion == MqttProtocolVersion.V500)
|
if (options.ProtocolVersion == MqttProtocolVersion.V500)
|
||||||
{
|
{
|
||||||
// Everything is supported.
|
if (options.TryPrivate)
|
||||||
|
{
|
||||||
|
throw new NotSupportedException("Feature TryPrivate only works with MQTT version 3.1 and 3.1.1.");
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user