mirror of
https://github.com/dotnet/MQTTnet.git
synced 2026-10-15 00:15:15 +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;
|
||||
|
||||
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 _:
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user