mirror of
https://github.com/dotnet/MQTTnet.git
synced 2026-10-26 08:02:59 +08:00
Added package properties.
This commit is contained in:
@@ -196,7 +196,7 @@ namespace MQTTnet.Client
|
|||||||
|
|
||||||
private async Task<MqttV3ConnAckPacket> AuthenticateAsync(MqttApplicationMessage willApplicationMessage, CancellationToken cancellationToken)
|
private async Task<MqttV3ConnAckPacket> AuthenticateAsync(MqttApplicationMessage willApplicationMessage, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
var connectPacket = new MqttV3ConnectPacket
|
var connectPacket = new MqttConnectPacket
|
||||||
{
|
{
|
||||||
ClientId = _options.ClientId,
|
ClientId = _options.ClientId,
|
||||||
Username = _options.Credentials?.Username,
|
Username = _options.Credentials?.Username,
|
||||||
|
|||||||
@@ -64,7 +64,9 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Folder Include="Packets\V5\" />
|
<Compile Remove="NewFolder\**" />
|
||||||
|
<EmbeddedResource Remove="NewFolder\**" />
|
||||||
|
<None Remove="NewFolder\**" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
@@ -1,6 +1,34 @@
|
|||||||
namespace MQTTnet.Packets
|
using System.Collections.Generic;
|
||||||
|
using MQTTnet.Packets.Properties;
|
||||||
|
|
||||||
|
namespace MQTTnet.Packets
|
||||||
{
|
{
|
||||||
public abstract class MqttConnectPacket : MqttBasePacket
|
public class MqttConnectPacket : MqttBasePacket
|
||||||
{
|
{
|
||||||
|
public string ProtocolName { get; set; }
|
||||||
|
|
||||||
|
public byte ProtocolLevel { get; set; }
|
||||||
|
|
||||||
|
public string ClientId { get; set; }
|
||||||
|
|
||||||
|
public string Username { get; set; }
|
||||||
|
|
||||||
|
public string Password { get; set; }
|
||||||
|
|
||||||
|
public ushort KeepAlivePeriod { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// MQTTv5: Also called "Clean Start".
|
||||||
|
/// </summary>
|
||||||
|
public bool CleanSession { get; set; }
|
||||||
|
|
||||||
|
public MqttApplicationMessage WillMessage { get; set; }
|
||||||
|
|
||||||
|
public List<Property> Properties { get; set; }
|
||||||
|
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
return "Connect: [ProtocolLevel=" + ProtocolLevel + "] [ClientId=" + ClientId + "] [Username=" + Username + "] [Password=" + Password + "] [KeepAlivePeriod=" + KeepAlivePeriod + "] [CleanSession=" + CleanSession + "]";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
using System;
|
||||||
|
using MQTTnet.Serializer;
|
||||||
|
|
||||||
|
namespace MQTTnet.Packets.Properties
|
||||||
|
{
|
||||||
|
public class ByteValue : IPropertyValue
|
||||||
|
{
|
||||||
|
public ByteValue(byte value)
|
||||||
|
{
|
||||||
|
Value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte Value { get; }
|
||||||
|
|
||||||
|
public void WriteTo(MqttPacketWriter writer)
|
||||||
|
{
|
||||||
|
if (writer == null) throw new ArgumentNullException(nameof(writer));
|
||||||
|
|
||||||
|
writer.Write(Value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
using MQTTnet.Serializer;
|
||||||
|
|
||||||
|
namespace MQTTnet.Packets.Properties
|
||||||
|
{
|
||||||
|
public interface IPropertyValue
|
||||||
|
{
|
||||||
|
void WriteTo(MqttPacketWriter writer);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
namespace MQTTnet.Packets.Properties
|
||||||
|
{
|
||||||
|
public class Property
|
||||||
|
{
|
||||||
|
public PropertyType Type { get; set; }
|
||||||
|
|
||||||
|
public IPropertyValue Value { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
namespace MQTTnet.Packets.Properties
|
||||||
|
{
|
||||||
|
public enum PropertyType
|
||||||
|
{
|
||||||
|
PayloadFormatIndicator = 1,
|
||||||
|
MessageExpiryInterval = 2,
|
||||||
|
ContentType = 3,
|
||||||
|
ResponseTopic = 8,
|
||||||
|
CorrelationData = 9,
|
||||||
|
SubscriptionIdentifier = 11,
|
||||||
|
SessionExpiryInterval = 17,
|
||||||
|
AssignedClientIdentifer = 18,
|
||||||
|
ServerKeepAlive = 19,
|
||||||
|
AuthenticationMethod = 21,
|
||||||
|
AuthenticationData = 22,
|
||||||
|
RequestProblemInformation = 23,
|
||||||
|
WillDelayInterval = 24,
|
||||||
|
RequestResponseInformation = 25,
|
||||||
|
ResponseInformation = 26,
|
||||||
|
ServerReference = 28,
|
||||||
|
ReasonString = 31,
|
||||||
|
ReceiveMaximum = 33,
|
||||||
|
TopicAliasMaximum = 34,
|
||||||
|
TopicAlias = 35,
|
||||||
|
MaximumQoS = 36,
|
||||||
|
RetainAvailable = 37,
|
||||||
|
UserProperty = 38,
|
||||||
|
MaximumPacketSize = 39,
|
||||||
|
WildcardSubscriptionAvailable = 40,
|
||||||
|
SubscriptionIdentifierAvailable = 41,
|
||||||
|
SharedSubscriptionAvailable = 42
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
using System;
|
||||||
|
using MQTTnet.Serializer;
|
||||||
|
|
||||||
|
namespace MQTTnet.Packets.Properties
|
||||||
|
{
|
||||||
|
public class StringValue : IPropertyValue
|
||||||
|
{
|
||||||
|
public StringValue(string value)
|
||||||
|
{
|
||||||
|
Value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Value { get; }
|
||||||
|
|
||||||
|
public void WriteTo(MqttPacketWriter writer)
|
||||||
|
{
|
||||||
|
if (writer == null) throw new ArgumentNullException(nameof(writer));
|
||||||
|
|
||||||
|
writer.WriteWithLengthPrefix(Value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
using System;
|
||||||
|
using MQTTnet.Serializer;
|
||||||
|
|
||||||
|
namespace MQTTnet.Packets.Properties
|
||||||
|
{
|
||||||
|
public class TwoByteIntegerValue : IPropertyValue
|
||||||
|
{
|
||||||
|
public TwoByteIntegerValue(ushort value)
|
||||||
|
{
|
||||||
|
Value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ushort Value { get; }
|
||||||
|
|
||||||
|
public void WriteTo(MqttPacketWriter writer)
|
||||||
|
{
|
||||||
|
if (writer == null) throw new ArgumentNullException(nameof(writer));
|
||||||
|
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
namespace MQTTnet.Packets.V3
|
|
||||||
{
|
|
||||||
public class MqttV3ConnectPacket : MqttConnectPacket
|
|
||||||
{
|
|
||||||
public string ProtocolName { get; set; }
|
|
||||||
|
|
||||||
public byte ProtocolLevel { get; set; }
|
|
||||||
|
|
||||||
public string ClientId { get; set; }
|
|
||||||
|
|
||||||
public string Username { get; set; }
|
|
||||||
|
|
||||||
public string Password { get; set; }
|
|
||||||
|
|
||||||
public ushort KeepAlivePeriod { get; set; }
|
|
||||||
|
|
||||||
public bool CleanSession { get; set; }
|
|
||||||
|
|
||||||
public MqttApplicationMessage WillMessage { get; set; }
|
|
||||||
|
|
||||||
public override string ToString()
|
|
||||||
{
|
|
||||||
return "Connect: [ProtocolLevel=" + ProtocolLevel + "] [ClientId=" + ClientId + "] [Username=" + Username + "] [Password=" + Password + "] [KeepAlivePeriod=" + KeepAlivePeriod + "] [CleanSession=" + CleanSession + "]";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -34,7 +34,7 @@ namespace MQTTnet.Serializer
|
|||||||
{
|
{
|
||||||
if (Serializer == null)
|
if (Serializer == null)
|
||||||
{
|
{
|
||||||
throw new InvalidOperationException("Protocol version nor set or detected.");
|
throw new InvalidOperationException("Protocol version not set or detected.");
|
||||||
}
|
}
|
||||||
|
|
||||||
return Serializer.Deserialize(receivedMqttPacket);
|
return Serializer.Deserialize(receivedMqttPacket);
|
||||||
@@ -48,6 +48,10 @@ namespace MQTTnet.Serializer
|
|||||||
public void DetectProtocolVersion(ReceivedMqttPacket receivedMqttPacket)
|
public void DetectProtocolVersion(ReceivedMqttPacket receivedMqttPacket)
|
||||||
{
|
{
|
||||||
var protocolVersion = ParseProtocolVersion(receivedMqttPacket);
|
var protocolVersion = ParseProtocolVersion(receivedMqttPacket);
|
||||||
|
|
||||||
|
// Reset the position of the stream beacuse the protocol version is part of
|
||||||
|
// the regular CONNECT packet. So it will not properly deserialized if this
|
||||||
|
// data is missing.
|
||||||
receivedMqttPacket.Body.Seek(0);
|
receivedMqttPacket.Body.Seek(0);
|
||||||
|
|
||||||
UseProtocolVersion(protocolVersion);
|
UseProtocolVersion(protocolVersion);
|
||||||
|
|||||||
@@ -27,9 +27,9 @@ namespace MQTTnet.Serializer
|
|||||||
return (byte)fixedHeader;
|
return (byte)fixedHeader;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ArraySegment<byte> EncodeRemainingLength(int length)
|
public static ArraySegment<byte> EncodeVariableByteInteger(int value)
|
||||||
{
|
{
|
||||||
if (length <= 0)
|
if (value <= 0)
|
||||||
{
|
{
|
||||||
return new ArraySegment<byte>(new byte[1], 0, 1);
|
return new ArraySegment<byte>(new byte[1], 0, 1);
|
||||||
}
|
}
|
||||||
@@ -37,7 +37,7 @@ namespace MQTTnet.Serializer
|
|||||||
var buffer = new byte[4];
|
var buffer = new byte[4];
|
||||||
var bufferOffset = 0;
|
var bufferOffset = 0;
|
||||||
|
|
||||||
var x = length;
|
var x = value;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
var encodedByte = x % 128;
|
var encodedByte = x % 128;
|
||||||
@@ -54,6 +54,11 @@ namespace MQTTnet.Serializer
|
|||||||
return new ArraySegment<byte>(buffer, 0, bufferOffset);
|
return new ArraySegment<byte>(buffer, 0, bufferOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void WriteVariableLengthInteger(int value)
|
||||||
|
{
|
||||||
|
Write(EncodeVariableByteInteger(value));
|
||||||
|
}
|
||||||
|
|
||||||
public void WriteWithLengthPrefix(string value)
|
public void WriteWithLengthPrefix(string value)
|
||||||
{
|
{
|
||||||
WriteWithLengthPrefix(Encoding.UTF8.GetBytes(value ?? string.Empty));
|
WriteWithLengthPrefix(Encoding.UTF8.GetBytes(value ?? string.Empty));
|
||||||
@@ -85,16 +90,30 @@ namespace MQTTnet.Serializer
|
|||||||
IncreasePostition(1);
|
IncreasePostition(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Write(byte[] array, int offset, int count)
|
public void Write(byte[] buffer, int offset, int count)
|
||||||
{
|
{
|
||||||
if (array == null) throw new ArgumentNullException(nameof(array));
|
if (buffer == null) throw new ArgumentNullException(nameof(buffer));
|
||||||
|
|
||||||
EnsureAdditionalCapacity(count);
|
EnsureAdditionalCapacity(count);
|
||||||
|
|
||||||
Array.Copy(array, offset, _buffer, _position, count);
|
Array.Copy(buffer, offset, _buffer, _position, count);
|
||||||
IncreasePostition(count);
|
IncreasePostition(count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Write(ArraySegment<byte> buffer)
|
||||||
|
{
|
||||||
|
if (buffer == null) throw new ArgumentNullException(nameof(buffer));
|
||||||
|
|
||||||
|
Write(buffer.Array, buffer.Offset, buffer.Count);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Write(MqttPacketWriter propertyWriter)
|
||||||
|
{
|
||||||
|
if (propertyWriter == null) throw new ArgumentNullException(nameof(propertyWriter));
|
||||||
|
|
||||||
|
Write(propertyWriter._buffer, 0, propertyWriter.Length);
|
||||||
|
}
|
||||||
|
|
||||||
public void Reset()
|
public void Reset()
|
||||||
{
|
{
|
||||||
Length = 5;
|
Length = 5;
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ namespace MQTTnet.Serializer
|
|||||||
var fixedHeader = SerializePacket(packet, _packetWriter);
|
var fixedHeader = SerializePacket(packet, _packetWriter);
|
||||||
var remainingLength = _packetWriter.Length - 5;
|
var remainingLength = _packetWriter.Length - 5;
|
||||||
|
|
||||||
var remainingLengthBuffer = MqttPacketWriter.EncodeRemainingLength(remainingLength);
|
var remainingLengthBuffer = MqttPacketWriter.EncodeVariableByteInteger(remainingLength);
|
||||||
|
|
||||||
var headerSize = FixedHeaderSize + remainingLengthBuffer.Count;
|
var headerSize = FixedHeaderSize + remainingLengthBuffer.Count;
|
||||||
var headerOffset = 5 - headerSize;
|
var headerOffset = 5 - headerSize;
|
||||||
@@ -79,7 +79,7 @@ namespace MQTTnet.Serializer
|
|||||||
{
|
{
|
||||||
switch (packet)
|
switch (packet)
|
||||||
{
|
{
|
||||||
case MqttV3ConnectPacket connectPacket: return SerializeConnectPacket(connectPacket, packetWriter);
|
case MqttConnectPacket connectPacket: return SerializeConnectPacket(connectPacket, packetWriter);
|
||||||
case MqttV3ConnAckPacket connAckPacket: return SerializeConnAckPacket(connAckPacket, packetWriter);
|
case MqttV3ConnAckPacket connAckPacket: return SerializeConnAckPacket(connAckPacket, packetWriter);
|
||||||
case MqttDisconnectPacket _: return SerializeEmptyPacket(MqttControlPacketType.Disconnect);
|
case MqttDisconnectPacket _: return SerializeEmptyPacket(MqttControlPacketType.Disconnect);
|
||||||
case MqttPingReqPacket _: return SerializeEmptyPacket(MqttControlPacketType.PingReq);
|
case MqttPingReqPacket _: return SerializeEmptyPacket(MqttControlPacketType.PingReq);
|
||||||
@@ -216,7 +216,7 @@ namespace MQTTnet.Serializer
|
|||||||
{
|
{
|
||||||
ThrowIfBodyIsEmpty(body);
|
ThrowIfBodyIsEmpty(body);
|
||||||
|
|
||||||
var packet = new MqttV3ConnectPacket
|
var packet = new MqttConnectPacket
|
||||||
{
|
{
|
||||||
ProtocolName = body.ReadStringWithLengthPrefix(),
|
ProtocolName = body.ReadStringWithLengthPrefix(),
|
||||||
ProtocolLevel = body.ReadByte()
|
ProtocolLevel = body.ReadByte()
|
||||||
@@ -293,7 +293,7 @@ namespace MQTTnet.Serializer
|
|||||||
return packet;
|
return packet;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void ValidateConnectPacket(MqttV3ConnectPacket packet)
|
protected void ValidateConnectPacket(MqttConnectPacket packet)
|
||||||
{
|
{
|
||||||
if (packet == null) throw new ArgumentNullException(nameof(packet));
|
if (packet == null) throw new ArgumentNullException(nameof(packet));
|
||||||
|
|
||||||
@@ -301,6 +301,11 @@ namespace MQTTnet.Serializer
|
|||||||
{
|
{
|
||||||
throw new MqttProtocolViolationException("CleanSession must be set if ClientId is empty [MQTT-3.1.3-7].");
|
throw new MqttProtocolViolationException("CleanSession must be set if ClientId is empty [MQTT-3.1.3-7].");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (packet.Properties != null)
|
||||||
|
{
|
||||||
|
throw new MqttProtocolViolationException("Properties are only supported in MQTT Version 5.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReSharper disable once ParameterOnlyUsedForPreconditionCheck.Local
|
// ReSharper disable once ParameterOnlyUsedForPreconditionCheck.Local
|
||||||
@@ -312,7 +317,7 @@ namespace MQTTnet.Serializer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual byte SerializeConnectPacket(MqttV3ConnectPacket packet, MqttPacketWriter packetWriter)
|
protected virtual byte SerializeConnectPacket(MqttConnectPacket packet, MqttPacketWriter packetWriter)
|
||||||
{
|
{
|
||||||
ValidateConnectPacket(packet);
|
ValidateConnectPacket(packet);
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ namespace MQTTnet.Serializer
|
|||||||
{
|
{
|
||||||
public class MqttV311PacketSerializer : MqttV310PacketSerializer
|
public class MqttV311PacketSerializer : MqttV310PacketSerializer
|
||||||
{
|
{
|
||||||
protected override byte SerializeConnectPacket(MqttV3ConnectPacket packet, MqttPacketWriter packetWriter)
|
protected override byte SerializeConnectPacket(MqttConnectPacket packet, MqttPacketWriter packetWriter)
|
||||||
{
|
{
|
||||||
ValidateConnectPacket(packet);
|
ValidateConnectPacket(packet);
|
||||||
|
|
||||||
|
|||||||
@@ -1,24 +1,96 @@
|
|||||||
using System;
|
using System;
|
||||||
using MQTTnet.Adapter;
|
using MQTTnet.Adapter;
|
||||||
|
using MQTTnet.Exceptions;
|
||||||
using MQTTnet.Packets;
|
using MQTTnet.Packets;
|
||||||
|
using MQTTnet.Protocol;
|
||||||
|
|
||||||
namespace MQTTnet.Serializer
|
namespace MQTTnet.Serializer
|
||||||
{
|
{
|
||||||
public class MqttV500PacketSerializer : IMqttPacketSerializer
|
public class MqttV500PacketSerializer : MqttV311PacketSerializer
|
||||||
{
|
{
|
||||||
public ArraySegment<byte> Serialize(MqttBasePacket mqttPacket)
|
//public ArraySegment<byte> Serialize(MqttBasePacket mqttPacket)
|
||||||
{
|
//{
|
||||||
throw new NotImplementedException();
|
// throw new NotImplementedException();
|
||||||
}
|
//}
|
||||||
|
|
||||||
public MqttBasePacket Deserialize(ReceivedMqttPacket receivedMqttPacket)
|
//public MqttBasePacket Deserialize(ReceivedMqttPacket receivedMqttPacket)
|
||||||
{
|
//{
|
||||||
throw new NotImplementedException();
|
// throw new NotImplementedException();
|
||||||
}
|
//}
|
||||||
|
|
||||||
public void FreeBuffer()
|
protected override byte SerializeConnectPacket(MqttConnectPacket packet, MqttPacketWriter packetWriter)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
ValidateConnectPacket(packet);
|
||||||
|
|
||||||
|
packetWriter.WriteWithLengthPrefix("MQTT");
|
||||||
|
packetWriter.Write(5); // [3.1.2.2 Protocol Version]
|
||||||
|
|
||||||
|
byte connectFlags = 0x0;
|
||||||
|
if (packet.CleanSession)
|
||||||
|
{
|
||||||
|
connectFlags |= 0x2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (packet.WillMessage != null)
|
||||||
|
{
|
||||||
|
connectFlags |= 0x4;
|
||||||
|
connectFlags |= (byte)((byte)packet.WillMessage.QualityOfServiceLevel << 3);
|
||||||
|
|
||||||
|
if (packet.WillMessage.Retain)
|
||||||
|
{
|
||||||
|
connectFlags |= 0x20;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (packet.Password != null && packet.Username == null)
|
||||||
|
{
|
||||||
|
throw new MqttProtocolViolationException("If the User Name Flag is set to 0, the Password Flag MUST be set to 0 [MQTT-3.1.2-22].");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (packet.Password != null)
|
||||||
|
{
|
||||||
|
connectFlags |= 0x40;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (packet.Username != null)
|
||||||
|
{
|
||||||
|
connectFlags |= 0x80;
|
||||||
|
}
|
||||||
|
|
||||||
|
packetWriter.Write(connectFlags);
|
||||||
|
packetWriter.Write(packet.KeepAlivePeriod);
|
||||||
|
packetWriter.WriteWithLengthPrefix(packet.ClientId);
|
||||||
|
|
||||||
|
if (packet.WillMessage != null)
|
||||||
|
{
|
||||||
|
packetWriter.WriteWithLengthPrefix(packet.WillMessage.Topic);
|
||||||
|
packetWriter.WriteWithLengthPrefix(packet.WillMessage.Payload);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (packet.Username != null)
|
||||||
|
{
|
||||||
|
packetWriter.WriteWithLengthPrefix(packet.Username);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (packet.Password != null)
|
||||||
|
{
|
||||||
|
packetWriter.WriteWithLengthPrefix(packet.Password);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (packet.Properties != null)
|
||||||
|
{
|
||||||
|
var propertyWriter = new MqttPacketWriter();
|
||||||
|
foreach (var property in packet.Properties)
|
||||||
|
{
|
||||||
|
propertyWriter.Write((byte)property.Key);
|
||||||
|
property.Value.WriteTo(propertyWriter);
|
||||||
|
}
|
||||||
|
|
||||||
|
packetWriter.WriteVariableLengthInteger(propertyWriter.Length);
|
||||||
|
packetWriter.Write(propertyWriter);
|
||||||
|
}
|
||||||
|
|
||||||
|
return MqttPacketWriter.BuildFixedHeader(MqttControlPacketType.Connect);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -218,7 +218,7 @@ namespace MQTTnet.Server
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(firstPacket is MqttV3ConnectPacket connectPacket))
|
if (!(firstPacket is MqttConnectPacket connectPacket))
|
||||||
{
|
{
|
||||||
throw new MqttProtocolViolationException("The first packet from a client must be a 'CONNECT' packet [MQTT-3.1.0-1].");
|
throw new MqttProtocolViolationException("The first packet from a client must be a 'CONNECT' packet [MQTT-3.1.0-1].");
|
||||||
}
|
}
|
||||||
@@ -269,7 +269,7 @@ namespace MQTTnet.Server
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private MqttConnectReturnCode ValidateConnection(MqttV3ConnectPacket connectPacket, IMqttChannelAdapter clientAdapter)
|
private MqttConnectReturnCode ValidateConnection(MqttConnectPacket connectPacket, IMqttChannelAdapter clientAdapter)
|
||||||
{
|
{
|
||||||
if (_options.ConnectionValidator == null)
|
if (_options.ConnectionValidator == null)
|
||||||
{
|
{
|
||||||
@@ -287,7 +287,7 @@ namespace MQTTnet.Server
|
|||||||
return context.ReturnCode;
|
return context.ReturnCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
private PrepareClientSessionResult PrepareClientSession(MqttV3ConnectPacket connectPacket)
|
private PrepareClientSessionResult PrepareClientSession(MqttConnectPacket connectPacket)
|
||||||
{
|
{
|
||||||
lock (_sessions)
|
lock (_sessions)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ namespace MQTTnet.Core.Tests
|
|||||||
[TestMethod]
|
[TestMethod]
|
||||||
public void SerializeV310_MqttConnectPacket()
|
public void SerializeV310_MqttConnectPacket()
|
||||||
{
|
{
|
||||||
var p = new MqttV3ConnectPacket
|
var p = new MqttConnectPacket
|
||||||
{
|
{
|
||||||
ClientId = "XYZ",
|
ClientId = "XYZ",
|
||||||
Password = "PASS",
|
Password = "PASS",
|
||||||
@@ -34,7 +34,7 @@ namespace MQTTnet.Core.Tests
|
|||||||
[TestMethod]
|
[TestMethod]
|
||||||
public void SerializeV311_MqttConnectPacket()
|
public void SerializeV311_MqttConnectPacket()
|
||||||
{
|
{
|
||||||
var p = new MqttV3ConnectPacket
|
var p = new MqttConnectPacket
|
||||||
{
|
{
|
||||||
ClientId = "XYZ",
|
ClientId = "XYZ",
|
||||||
Password = "PASS",
|
Password = "PASS",
|
||||||
@@ -49,7 +49,7 @@ namespace MQTTnet.Core.Tests
|
|||||||
[TestMethod]
|
[TestMethod]
|
||||||
public void SerializeV311_MqttConnectPacketWithWillMessage()
|
public void SerializeV311_MqttConnectPacketWithWillMessage()
|
||||||
{
|
{
|
||||||
var p = new MqttV3ConnectPacket
|
var p = new MqttConnectPacket
|
||||||
{
|
{
|
||||||
ClientId = "XYZ",
|
ClientId = "XYZ",
|
||||||
Password = "PASS",
|
Password = "PASS",
|
||||||
@@ -71,7 +71,7 @@ namespace MQTTnet.Core.Tests
|
|||||||
[TestMethod]
|
[TestMethod]
|
||||||
public void DeserializeV311_MqttConnectPacket()
|
public void DeserializeV311_MqttConnectPacket()
|
||||||
{
|
{
|
||||||
var p = new MqttV3ConnectPacket
|
var p = new MqttConnectPacket
|
||||||
{
|
{
|
||||||
ClientId = "XYZ",
|
ClientId = "XYZ",
|
||||||
Password = "PASS",
|
Password = "PASS",
|
||||||
@@ -86,7 +86,7 @@ namespace MQTTnet.Core.Tests
|
|||||||
[TestMethod]
|
[TestMethod]
|
||||||
public void DeserializeV311_MqttConnectPacketWithWillMessage()
|
public void DeserializeV311_MqttConnectPacketWithWillMessage()
|
||||||
{
|
{
|
||||||
var p = new MqttV3ConnectPacket
|
var p = new MqttConnectPacket
|
||||||
{
|
{
|
||||||
ClientId = "XYZ",
|
ClientId = "XYZ",
|
||||||
Password = "PASS",
|
Password = "PASS",
|
||||||
|
|||||||
@@ -36,6 +36,8 @@ namespace MQTTnet.Core.Tests
|
|||||||
var times = new List<TimeSpan>();
|
var times = new List<TimeSpan>();
|
||||||
var stopwatch = Stopwatch.StartNew();
|
var stopwatch = Stopwatch.StartNew();
|
||||||
|
|
||||||
|
await Task.Delay(1000);
|
||||||
|
|
||||||
for (var i = 0; i < 100; i++)
|
for (var i = 0; i < 100; i++)
|
||||||
{
|
{
|
||||||
response = new TaskCompletionSource<string>();
|
response = new TaskCompletionSource<string>();
|
||||||
|
|||||||
Reference in New Issue
Block a user