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:
Victornor
2024-12-10 19:37:29 +01:00
committed by GitHub
co-authored by christian
parent 8566fd5395
commit 981ea02149
4 changed files with 26 additions and 23 deletions
@@ -18,9 +18,9 @@ namespace MQTTnet.Formatter.V3
{
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 MqttProtocolVersion _mqttProtocolVersion;
@@ -68,10 +68,8 @@ namespace MQTTnet.Formatter.V3
{
return DecodeConnAckPacketV311(receivedMqttPacket.Body);
}
else
{
return DecodeConnAckPacket(receivedMqttPacket.Body);
}
return DecodeConnAckPacket(receivedMqttPacket.Body);
case MqttControlPacketType.Disconnect:
return DisconnectPacket;
@@ -106,10 +104,6 @@ namespace MQTTnet.Formatter.V3
payload = publishPacket.Payload;
remainingLength += (uint)payload.Length;
}
else
{
publishPacket = null;
}
var remainingLengthSize = MqttBufferWriter.GetVariableByteIntegerSize(remainingLength);
@@ -481,7 +475,16 @@ namespace MQTTnet.Formatter.V3
ValidateConnectPacket(packet);
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;
if (packet.CleanSession)
@@ -552,19 +555,15 @@ namespace MQTTnet.Formatter.V3
{
return EncodeConnectPacketV311(connectPacket, bufferWriter);
}
else
{
return EncodeConnectPacket(connectPacket, bufferWriter);
}
return EncodeConnectPacket(connectPacket, bufferWriter);
case MqttConnAckPacket connAckPacket:
if (_mqttProtocolVersion == MqttProtocolVersion.V311)
{
return EncodeConnAckPacketV311(connAckPacket, bufferWriter);
}
else
{
return EncodeConnAckPacket(connAckPacket, bufferWriter);
}
return EncodeConnAckPacket(connAckPacket, bufferWriter);
case MqttDisconnectPacket _:
return EncodeEmptyPacket(MqttControlPacketType.Disconnect);
case MqttPingReqPacket _:
+1 -1
View File
@@ -127,7 +127,7 @@ public sealed class MqttClientOptions
/// connect properly.
/// </remarks>
/// </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>
/// 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
/// properly.
/// </summary>
public MqttClientOptionsBuilder WithTryPrivate(bool tryPrivate = true)
public MqttClientOptionsBuilder WithTryPrivate(bool value = true)
{
_options.TryPrivate = true;
_options.TryPrivate = value;
return this;
}
@@ -17,7 +17,11 @@ public static class MqttClientOptionsValidator
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;
}