Task ProcessReceivedAuthPacket(MqttAuthPacket authPacket) { var extendedAuthenticationExchangeHandler = Options.ExtendedAuthenticationExchangeHandler; if (extendedAuthenticationExchangeHandler != null) { return(extendedAuthenticationExchangeHandler.HandleRequestAsync(new MqttExtendedAuthenticationExchangeContext(authPacket, this))); } return(PlatformAbstractionLayer.CompletedTask); }
private static MqttBasePacket DecodeAuthPacket(IMqttPacketBodyReader body) { ThrowIfBodyIsEmpty(body); var packet = new MqttAuthPacket(); if (body.EndOfStream) { packet.ReasonCode = MqttAuthenticateReasonCode.Success; return(packet); } packet.ReasonCode = (MqttAuthenticateReasonCode)body.ReadByte(); var propertiesReader = new MqttV500PropertiesReader(body); while (propertiesReader.MoveNext()) { if (packet.Properties == null) { packet.Properties = new MqttAuthPacketProperties(); } if (propertiesReader.CurrentPropertyId == MqttPropertyId.AuthenticationMethod) { packet.Properties.AuthenticationMethod = propertiesReader.ReadAuthenticationMethod(); } else if (propertiesReader.CurrentPropertyId == MqttPropertyId.AuthenticationData) { packet.Properties.AuthenticationData = propertiesReader.ReadAuthenticationData(); } else if (propertiesReader.CurrentPropertyId == MqttPropertyId.ReasonString) { packet.Properties.ReasonString = propertiesReader.ReadReasonString(); } else if (propertiesReader.CurrentPropertyId == MqttPropertyId.UserProperty) { if (packet.Properties.UserProperties == null) { packet.Properties.UserProperties = new List <MqttUserProperty>(); } propertiesReader.AddUserPropertyTo(packet.Properties.UserProperties); } else { propertiesReader.ThrowInvalidPropertyIdException(typeof(MqttAuthPacket)); } } return(packet); }
byte EncodeAuthPacket(MqttAuthPacket packet) { _bufferWriter.WriteByte((byte)packet.ReasonCode); _propertiesWriter.WriteAuthenticationMethod(packet.AuthenticationMethod); _propertiesWriter.WriteAuthenticationData(packet.AuthenticationData); _propertiesWriter.WriteReasonString(packet.ReasonString); _propertiesWriter.WriteUserProperties(packet.UserProperties); _propertiesWriter.WriteTo(_bufferWriter); _propertiesWriter.Reset(); return(MqttBufferWriter.BuildFixedHeader(MqttControlPacketType.Auth)); }
public MqttExtendedAuthenticationExchangeContext(MqttAuthPacket authPacket, IMqttClient client) { if (authPacket == null) { throw new ArgumentNullException(nameof(authPacket)); } ReasonCode = authPacket.ReasonCode; ReasonString = authPacket.Properties?.ReasonString; AuthenticationMethod = authPacket.Properties?.AuthenticationMethod; AuthenticationData = authPacket.Properties?.AuthenticationData; UserProperties = authPacket.Properties?.UserProperties; Client = client ?? throw new ArgumentNullException(nameof(client)); }
private static byte EncodeAuthPacket(MqttAuthPacket packet, IMqttPacketWriter packetWriter) { packetWriter.Write((byte)packet.ReasonCode); var propertiesWriter = new MqttV500PropertiesWriter(); if (packet.Properties != null) { propertiesWriter.WriteAuthenticationMethod(packet.Properties.AuthenticationMethod); propertiesWriter.WriteAuthenticationData(packet.Properties.AuthenticationData); propertiesWriter.WriteReasonString(packet.Properties.ReasonString); propertiesWriter.WriteUserProperties(packet.Properties.UserProperties); } propertiesWriter.WriteTo(packetWriter); return(MqttPacketWriter.BuildFixedHeader(MqttControlPacketType.Auth)); }
MqttPacket DecodeAuthPacket(ArraySegment <byte> body) { ThrowIfBodyIsEmpty(body); _bufferReader.SetBuffer(body.Array, body.Offset, body.Count); var packet = new MqttAuthPacket(); if (_bufferReader.EndOfStream) { packet.ReasonCode = MqttAuthenticateReasonCode.Success; return(packet); } packet.ReasonCode = (MqttAuthenticateReasonCode)_bufferReader.ReadByte(); var propertiesReader = new MqttV5PropertiesReader(_bufferReader); while (propertiesReader.MoveNext()) { if (propertiesReader.CurrentPropertyId == MqttPropertyId.AuthenticationMethod) { packet.AuthenticationMethod = propertiesReader.ReadAuthenticationMethod(); } else if (propertiesReader.CurrentPropertyId == MqttPropertyId.AuthenticationData) { packet.AuthenticationData = propertiesReader.ReadAuthenticationData(); } else if (propertiesReader.CurrentPropertyId == MqttPropertyId.ReasonString) { packet.ReasonString = propertiesReader.ReadReasonString(); } else { propertiesReader.ThrowInvalidPropertyIdException(typeof(MqttAuthPacket)); } } packet.UserProperties = propertiesReader.CollectedUserProperties; return(packet); }
public void Serialize_Full_MqttAuthPacket_V500() { var authPacket = new MqttAuthPacket { AuthenticationData = Encoding.UTF8.GetBytes("AuthenticationData"), AuthenticationMethod = "AuthenticationMethod", ReasonCode = MqttAuthenticateReasonCode.ContinueAuthentication, ReasonString = "ReasonString", UserProperties = new List <MqttUserProperty> { new MqttUserProperty("Foo", "Bar") } }; var deserialized = MqttPacketSerializationHelper.EncodeAndDecodePacket(authPacket, MqttProtocolVersion.V500); CollectionAssert.AreEqual(authPacket.AuthenticationData, deserialized.AuthenticationData); Assert.AreEqual(authPacket.AuthenticationMethod, deserialized.AuthenticationMethod); Assert.AreEqual(authPacket.ReasonCode, deserialized.ReasonCode); Assert.AreEqual(authPacket.ReasonString, deserialized.ReasonString); CollectionAssert.AreEqual(authPacket.UserProperties, deserialized.UserProperties); }
public void Serialize_Full_MqttAuthPacket_V311() { var authPacket = new MqttAuthPacket(); Assert.ThrowsException <MqttProtocolViolationException>(() => MqttPacketSerializationHelper.EncodeAndDecodePacket(authPacket, MqttProtocolVersion.V311)); }