private static byte EncodeUnsubAckPacket(MqttUnsubAckPacket packet, IMqttPacketWriter packetWriter) { if (packet.ReasonCodes?.Any() != true) { throw new MqttProtocolViolationException("At least one reason code must be set[MQTT - 3.8.3 - 3]."); } ThrowIfPacketIdentifierIsInvalid(packet); packetWriter.Write(packet.PacketIdentifier.Value); var propertiesWriter = new MqttV500PropertiesWriter(); if (packet.Properties != null) { propertiesWriter.WriteReasonString(packet.Properties.ReasonString); propertiesWriter.WriteUserProperties(packet.Properties.UserProperties); } propertiesWriter.WriteTo(packetWriter); foreach (var reasonCode in packet.ReasonCodes) { packetWriter.Write((byte)reasonCode); } return(MqttPacketWriter.BuildFixedHeader(MqttControlPacketType.UnsubAck)); }
private static byte EncodePubCompPacket(MqttPubCompPacket packet, IMqttPacketWriter packetWriter) { ThrowIfPacketIdentifierIsInvalid(packet); if (!packet.ReasonCode.HasValue) { ThrowReasonCodeNotSetException(); } packetWriter.Write(packet.PacketIdentifier.Value); var propertiesWriter = new MqttV500PropertiesWriter(); if (packet.Properties != null) { propertiesWriter.WriteReasonString(packet.Properties.ReasonString); propertiesWriter.WriteUserProperties(packet.Properties.UserProperties); } if (propertiesWriter.Length > 0 || packet.ReasonCode.Value != MqttPubCompReasonCode.Success) { packetWriter.Write((byte)packet.ReasonCode.Value); propertiesWriter.WriteTo(packetWriter); } return(MqttPacketWriter.BuildFixedHeader(MqttControlPacketType.PubComp)); }
public static byte[] AddMqttHeader(this IMqttPacketWriter writer, MqttControlPacketType header, byte[] body) { writer.Write(MqttPacketWriter.BuildFixedHeader(header)); writer.WriteVariableLengthInteger((uint)body.Length); writer.Write(body, 0, body.Length); return(writer.GetBuffer()); }
public ArraySegment <byte> Encode(MqttBasePacket packet) { if (packet == null) { throw new ArgumentNullException(nameof(packet)); } // Leave enough head space for max header size (fixed + 4 variable remaining length = 5 bytes) _packetWriter.Reset(5); _packetWriter.Seek(5); var fixedHeader = EncodePacket(packet, _packetWriter); var remainingLength = (uint)(_packetWriter.Length - 5); var remainingLengthSize = MqttPacketWriter.GetLengthOfVariableInteger(remainingLength); var headerSize = FixedHeaderSize + remainingLengthSize; var headerOffset = 5 - headerSize; // Position cursor on correct offset on beginning of array (has leading 0x0) _packetWriter.Seek(headerOffset); _packetWriter.Write(fixedHeader); _packetWriter.WriteVariableLengthInteger(remainingLength); var buffer = _packetWriter.GetBuffer(); return(new ArraySegment <byte>(buffer, headerOffset, _packetWriter.Length - headerOffset)); }
protected virtual byte EncodeConnAckPacket(MqttConnAckPacket packet, IMqttPacketWriter packetWriter) { packetWriter.Write(0); // Reserved. packetWriter.Write((byte)packet.ReturnCode.Value); return(MqttPacketWriter.BuildFixedHeader(MqttControlPacketType.ConnAck)); }
static byte EncodeSubscribePacket(MqttSubscribePacket packet, IMqttPacketWriter packetWriter) { if (!packet.TopicFilters.Any()) { throw new MqttProtocolViolationException("At least one topic filter must be set [MQTT-3.8.3-3]."); } if (!packet.PacketIdentifier.HasValue) { throw new MqttProtocolViolationException("Subscribe packet has no packet identifier."); } packetWriter.Write(packet.PacketIdentifier.Value); if (packet.TopicFilters?.Count > 0) { foreach (var topicFilter in packet.TopicFilters) { packetWriter.WriteWithLengthPrefix(topicFilter.Topic); packetWriter.Write((byte)topicFilter.QualityOfServiceLevel); } } return(MqttPacketWriter.BuildFixedHeader(MqttControlPacketType.Subscribe, 0x02)); }
private static byte EncodeUnsubscribePacket(MqttUnsubscribePacket packet, IMqttPacketWriter packetWriter) { if (packet.TopicFilters?.Any() != true) { throw new MqttProtocolViolationException("At least one topic filter must be set [MQTT-3.10.3-2]."); } ThrowIfPacketIdentifierIsInvalid(packet); packetWriter.Write(packet.PacketIdentifier.Value); var propertiesWriter = new MqttV500PropertiesWriter(); if (packet.Properties != null) { propertiesWriter.WriteUserProperties(packet.Properties.UserProperties); } propertiesWriter.WriteTo(packetWriter); foreach (var topicFilter in packet.TopicFilters) { packetWriter.WriteWithLengthPrefix(topicFilter); } return(MqttPacketWriter.BuildFixedHeader(MqttControlPacketType.Unsubscibe, 0x02)); }
static byte EncodeUnsubAckPacket(MqttUnsubAckPacket packet, IMqttPacketWriter packetWriter) { if (!packet.PacketIdentifier.HasValue) { throw new MqttProtocolViolationException("UnsubAck packet has no packet identifier."); } packetWriter.Write(packet.PacketIdentifier.Value); return(MqttPacketWriter.BuildFixedHeader(MqttControlPacketType.UnsubAck)); }
private static byte EncodePubCompPacket(MqttPubCompPacket packet, IMqttPacketWriter packetWriter) { if (!packet.PacketIdentifier.HasValue) { throw new MqttProtocolViolationException("PubComp packet has no packet identifier."); } packetWriter.Write(packet.PacketIdentifier.Value); return(MqttPacketWriter.BuildFixedHeader(MqttControlPacketType.PubComp)); }
static byte EncodePubRecPacket(MqttPubRecPacket packet, IMqttPacketWriter packetWriter) { if (packet.PacketIdentifier == 0) { throw new MqttProtocolViolationException("PubRec packet has no packet identifier."); } packetWriter.Write(packet.PacketIdentifier); return(MqttPacketWriter.BuildFixedHeader(MqttControlPacketType.PubRec)); }
static byte EncodeSubscribePacket(MqttSubscribePacket packet, IMqttPacketWriter packetWriter) { if (packet.TopicFilters?.Any() != true) { throw new MqttProtocolViolationException("At least one topic filter must be set [MQTT-3.8.3-3]."); } ThrowIfPacketIdentifierIsInvalid(packet.PacketIdentifier, packet); packetWriter.Write(packet.PacketIdentifier); var propertiesWriter = new MqttV500PropertiesWriter(); if (packet.Properties != null) { if (packet.Properties.SubscriptionIdentifier > 0) { propertiesWriter.WriteSubscriptionIdentifier(packet.Properties.SubscriptionIdentifier); } propertiesWriter.WriteUserProperties(packet.Properties.UserProperties); } propertiesWriter.WriteTo(packetWriter); if (packet.TopicFilters?.Count > 0) { foreach (var topicFilter in packet.TopicFilters) { packetWriter.WriteWithLengthPrefix(topicFilter.Topic); var options = (byte)topicFilter.QualityOfServiceLevel; if (topicFilter.NoLocal) { options |= 1 << 2; } if (topicFilter.RetainAsPublished) { options |= 1 << 3; } if (topicFilter.RetainHandling != MqttRetainHandling.SendAtSubscribe) { options |= (byte)((byte)topicFilter.RetainHandling << 4); } packetWriter.Write(options); } } return(MqttPacketWriter.BuildFixedHeader(MqttControlPacketType.Subscribe, 0x02)); }
private static byte EncodeConnAckPacket(MqttConnAckPacket packet, IMqttPacketWriter packetWriter) { if (packet == null) { throw new ArgumentNullException(nameof(packet)); } if (packetWriter == null) { throw new ArgumentNullException(nameof(packetWriter)); } if (!packet.ReasonCode.HasValue) { ThrowReasonCodeNotSetException(); } byte connectAcknowledgeFlags = 0x0; if (packet.IsSessionPresent) { connectAcknowledgeFlags |= 0x1; } packetWriter.Write(connectAcknowledgeFlags); packetWriter.Write((byte)packet.ReasonCode.Value); var propertiesWriter = new MqttV500PropertiesWriter(); if (packet.Properties != null) { propertiesWriter.WriteSessionExpiryInterval(packet.Properties.SessionExpiryInterval); propertiesWriter.WriteAuthenticationMethod(packet.Properties.AuthenticationMethod); propertiesWriter.WriteAuthenticationData(packet.Properties.AuthenticationData); propertiesWriter.WriteRetainAvailable(packet.Properties.RetainAvailable); propertiesWriter.WriteReceiveMaximum(packet.Properties.ReceiveMaximum); propertiesWriter.WriteMaximumQoS(packet.Properties.MaximumQoS); propertiesWriter.WriteAssignedClientIdentifier(packet.Properties.AssignedClientIdentifier); propertiesWriter.WriteTopicAliasMaximum(packet.Properties.TopicAliasMaximum); propertiesWriter.WriteReasonString(packet.Properties.ReasonString); propertiesWriter.WriteMaximumPacketSize(packet.Properties.MaximumPacketSize); propertiesWriter.WriteWildcardSubscriptionAvailable(packet.Properties.WildcardSubscriptionAvailable); propertiesWriter.WriteSubscriptionIdentifiersAvailable(packet.Properties.SubscriptionIdentifiersAvailable); propertiesWriter.WriteSharedSubscriptionAvailable(packet.Properties.SharedSubscriptionAvailable); propertiesWriter.WriteServerKeepAlive(packet.Properties.ServerKeepAlive); propertiesWriter.WriteResponseInformation(packet.Properties.ResponseInformation); propertiesWriter.WriteServerReference(packet.Properties.ServerReference); propertiesWriter.WriteUserProperties(packet.Properties.UserProperties); } propertiesWriter.WriteTo(packetWriter); return(MqttPacketWriter.BuildFixedHeader(MqttControlPacketType.ConnAck)); }
public void Encode_Four_Byte_Integer() { for (uint i = 0; i < 268435455; i++) { var buffer = MqttPacketWriter.EncodeVariableLengthInteger(i); var reader = new MqttPacketBodyReader(buffer.Array, buffer.Offset, buffer.Count); var checkValue = reader.ReadVariableLengthInteger(); Assert.AreEqual(i, checkValue); } }
protected override byte EncodeConnAckPacket(MqttConnAckPacket packet, IMqttPacketWriter packetWriter) { byte connectAcknowledgeFlags = 0x0; if (packet.IsSessionPresent) { connectAcknowledgeFlags |= 0x1; } packetWriter.Write(connectAcknowledgeFlags); packetWriter.Write((byte)packet.ReturnCode); return(MqttPacketWriter.BuildFixedHeader(MqttControlPacketType.ConnAck)); }
public void Encode_Four_Byte_Integer() { for (uint i = 0; i < 268435455; i++) { var writer = new MqttPacketWriter(); writer.WriteVariableLengthInteger(i); var buffer = writer.GetBuffer(); var reader = new MqttPacketBodyReader(buffer, 0, writer.Length); var checkValue = reader.ReadVariableLengthInteger(); Assert.AreEqual(i, checkValue); } }
public void WritePacket() { var writer = new MqttPacketWriter(); Assert.AreEqual(0, writer.Length); writer.WriteWithLengthPrefix("1234567890"); Assert.AreEqual(10 + 2, writer.Length); writer.WriteWithLengthPrefix(new byte[300]); Assert.AreEqual(300 + 2 + 12, writer.Length); writer.WriteWithLengthPrefix(new byte[5000]); Assert.AreEqual(5000 + 2 + 300 + 2 + 12, writer.Length); }
public async Task TestCorruptedConnectPacket() { var writer = new MqttPacketWriter(); var serializer = new MqttPacketFormatterAdapter(writer); var pipe = new DuplexPipeMockup(); var connection = new DefaultConnectionContext(); connection.Transport = pipe; var ctx = new MqttConnectionContext(serializer, connection); await pipe.Receive.Writer.WriteAsync(writer.AddMqttHeader(MqttControlPacketType.Connect, new byte[0])); await Assert.ThrowsExceptionAsync <MqttProtocolViolationException>(() => ctx.ReceivePacketAsync(CancellationToken.None)); // the first exception should complete the pipes so if someone tries to use the connection after that it should throw immidiatly await Assert.ThrowsExceptionAsync <InvalidOperationException>(() => ctx.ReceivePacketAsync(CancellationToken.None)); }
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)); }
static byte EncodePublishPacket(MqttPublishPacket packet, IMqttPacketWriter packetWriter) { ValidatePublishPacket(packet); packetWriter.WriteWithLengthPrefix(packet.Topic); if (packet.QualityOfServiceLevel > MqttQualityOfServiceLevel.AtMostOnce) { if (!packet.PacketIdentifier.HasValue) { throw new MqttProtocolViolationException("Publish packet has no packet identifier."); } packetWriter.Write(packet.PacketIdentifier.Value); } else { if (packet.PacketIdentifier > 0) { throw new MqttProtocolViolationException("Packet identifier must be empty if QoS == 0 [MQTT-2.3.1-5]."); } } if (packet.Payload?.Length > 0) { packetWriter.Write(packet.Payload, 0, packet.Payload.Length); } byte fixedHeader = 0; if (packet.Retain) { fixedHeader |= 0x01; } fixedHeader |= (byte)((byte)packet.QualityOfServiceLevel << 1); if (packet.Dup) { fixedHeader |= 0x08; } return(MqttPacketWriter.BuildFixedHeader(MqttControlPacketType.Publish, fixedHeader)); }
public void WriteUserProperties(List <MqttUserProperty> userProperties) { if (userProperties == null || userProperties.Count == 0) { return; } var propertyWriter = new MqttPacketWriter(); foreach (var property in userProperties) { propertyWriter.WriteWithLengthPrefix(property.Name); propertyWriter.WriteWithLengthPrefix(property.Value); } _packetWriter.Write((byte)MqttPropertyId.UserProperty); _packetWriter.WriteVariableLengthInteger((uint)propertyWriter.Length); _packetWriter.Write(propertyWriter); }
static byte EncodeSubAckPacket(MqttSubAckPacket packet, IMqttPacketWriter packetWriter) { if (!packet.PacketIdentifier.HasValue) { throw new MqttProtocolViolationException("SubAck packet has no packet identifier."); } packetWriter.Write(packet.PacketIdentifier.Value); if (packet.ReturnCodes?.Any() == true) { foreach (var packetSubscribeReturnCode in packet.ReturnCodes) { packetWriter.Write((byte)packetSubscribeReturnCode); } } return(MqttPacketWriter.BuildFixedHeader(MqttControlPacketType.SubAck)); }
static byte EncodeSubscribePacket(MqttSubscribePacket packet, IMqttPacketWriter packetWriter) { if (!packet.TopicFilters.Any()) { throw new MqttProtocolViolationException("At least one topic filter must be set [MQTT-3.8.3-3]."); } if (packet.PacketIdentifier == 0) { throw new MqttProtocolViolationException("Subscribe packet has no packet identifier."); } packetWriter.Write(packet.PacketIdentifier); if (packet.TopicFilters?.Count > 0) { foreach (var topicFilter in packet.TopicFilters) { if (topicFilter.NoLocal) { throw new MqttProtocolViolationException("NoLocal is not supported in 3.1.1."); } if (topicFilter.RetainAsPublished) { throw new MqttProtocolViolationException("RetainAsPublished is not supported in 3.1.1."); } if (topicFilter.RetainHandling != MqttRetainHandling.SendAtSubscribe) { throw new MqttProtocolViolationException("RetainHandling is not supported in 3.1.1."); } packetWriter.WriteWithLengthPrefix(topicFilter.Topic); packetWriter.Write((byte)topicFilter.QualityOfServiceLevel); } } return(MqttPacketWriter.BuildFixedHeader(MqttControlPacketType.Subscribe, 0x02)); }
private static byte EncodePubAckPacket(MqttPubAckPacket packet, IMqttPacketWriter packetWriter) { if (packet == null) { throw new ArgumentNullException(nameof(packet)); } if (packetWriter == null) { throw new ArgumentNullException(nameof(packetWriter)); } if (!packet.PacketIdentifier.HasValue) { throw new MqttProtocolViolationException("PubAck packet has no packet identifier."); } if (!packet.ReasonCode.HasValue) { throw new MqttProtocolViolationException("PubAck packet must contain a reason code."); } packetWriter.Write(packet.PacketIdentifier.Value); var propertiesWriter = new MqttV500PropertiesWriter(); if (packet.Properties != null) { propertiesWriter.WriteReasonString(packet.Properties.ReasonString); propertiesWriter.WriteUserProperties(packet.Properties.UserProperties); } if (packetWriter.Length > 0 || packet.ReasonCode.Value != MqttPubAckReasonCode.Success) { packetWriter.Write((byte)packet.ReasonCode.Value); propertiesWriter.WriteTo(packetWriter); } return(MqttPacketWriter.BuildFixedHeader(MqttControlPacketType.PubAck)); }
private static byte EncodeDisconnectPacket(MqttDisconnectPacket packet, IMqttPacketWriter packetWriter) { if (!packet.ReasonCode.HasValue) { ThrowReasonCodeNotSetException(); } packetWriter.Write((byte)packet.ReasonCode.Value); var propertiesWriter = new MqttV500PropertiesWriter(); if (packet.Properties != null) { propertiesWriter.WriteServerReference(packet.Properties.ServerReference); propertiesWriter.WriteReasonString(packet.Properties.ReasonString); propertiesWriter.WriteSessionExpiryInterval(packet.Properties.SessionExpiryInterval); propertiesWriter.WriteUserProperties(packet.Properties.UserProperties); } propertiesWriter.WriteTo(packetWriter); return(MqttPacketWriter.BuildFixedHeader(MqttControlPacketType.Disconnect)); }
static byte EncodeUnsubscribePacket(MqttUnsubscribePacket packet, IMqttPacketWriter packetWriter) { if (!packet.TopicFilters.Any()) { throw new MqttProtocolViolationException("At least one topic filter must be set [MQTT-3.10.3-2]."); } if (!packet.PacketIdentifier.HasValue) { throw new MqttProtocolViolationException("Unsubscribe packet has no packet identifier."); } packetWriter.Write(packet.PacketIdentifier.Value); if (packet.TopicFilters?.Any() == true) { foreach (var topicFilter in packet.TopicFilters) { packetWriter.WriteWithLengthPrefix(topicFilter); } } return(MqttPacketWriter.BuildFixedHeader(MqttControlPacketType.Unsubscibe, 0x02)); }
static byte EncodeEmptyPacket(MqttControlPacketType type) { return(MqttPacketWriter.BuildFixedHeader(type)); }
protected virtual byte EncodeConnectPacket(MqttConnectPacket packet, IMqttPacketWriter packetWriter) { ValidateConnectPacket(packet); packetWriter.WriteWithLengthPrefix("MQIsdp"); packetWriter.Write(3); // Protocol Level 3 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); } return(MqttPacketWriter.BuildFixedHeader(MqttControlPacketType.Connect)); }
private static byte EncodePublishPacket(MqttPublishPacket packet, IMqttPacketWriter packetWriter) { if (packet == null) { throw new ArgumentNullException(nameof(packet)); } if (packetWriter == null) { throw new ArgumentNullException(nameof(packetWriter)); } if (packet.QualityOfServiceLevel == 0 && packet.Dup) { throw new MqttProtocolViolationException("Dup flag must be false for QoS 0 packets [MQTT-3.3.1-2]."); } packetWriter.WriteWithLengthPrefix(packet.Topic); if (packet.QualityOfServiceLevel > MqttQualityOfServiceLevel.AtMostOnce) { if (!packet.PacketIdentifier.HasValue) { throw new MqttProtocolViolationException("Publish packet has no packet identifier."); } packetWriter.Write(packet.PacketIdentifier.Value); } else { if (packet.PacketIdentifier > 0) { throw new MqttProtocolViolationException("Packet identifier must be 0 if QoS == 0 [MQTT-2.3.1-5]."); } } var propertiesWriter = new MqttV500PropertiesWriter(); if (packet.Properties != null) { propertiesWriter.WritePayloadFormatIndicator(packet.Properties.PayloadFormatIndicator); propertiesWriter.WriteMessageExpiryInterval(packet.Properties.MessageExpiryInterval); propertiesWriter.WriteTopicAlias(packet.Properties.TopicAlias); propertiesWriter.WriteResponseTopic(packet.Properties.ResponseTopic); propertiesWriter.WriteCorrelationData(packet.Properties.CorrelationData); propertiesWriter.WriteSubscriptionIdentifiers(packet.Properties.SubscriptionIdentifiers); propertiesWriter.WriteContentType(packet.Properties.ContentType); propertiesWriter.WriteUserProperties(packet.Properties.UserProperties); } propertiesWriter.WriteTo(packetWriter); if (packet.Payload?.Length > 0) { packetWriter.Write(packet.Payload, 0, packet.Payload.Length); } byte fixedHeader = 0; if (packet.Retain) { fixedHeader |= 0x01; } fixedHeader |= (byte)((byte)packet.QualityOfServiceLevel << 1); if (packet.Dup) { fixedHeader |= 0x08; } return(MqttPacketWriter.BuildFixedHeader(MqttControlPacketType.Publish, fixedHeader)); }
private static byte EncodeConnectPacket(MqttConnectPacket packet, IMqttPacketWriter packetWriter) { if (packet == null) { throw new ArgumentNullException(nameof(packet)); } if (packetWriter == null) { throw new ArgumentNullException(nameof(packetWriter)); } if (string.IsNullOrEmpty(packet.ClientId) && !packet.CleanSession) { throw new MqttProtocolViolationException("CleanSession must be set if ClientId is empty [MQTT-3.1.3-7]."); } 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); var propertiesWriter = new MqttV500PropertiesWriter(); if (packet.Properties != null) { propertiesWriter.WriteSessionExpiryInterval(packet.Properties.SessionExpiryInterval); propertiesWriter.WriteAuthenticationMethod(packet.Properties.AuthenticationMethod); propertiesWriter.WriteAuthenticationData(packet.Properties.AuthenticationData); propertiesWriter.WriteRequestProblemInformation(packet.Properties.RequestProblemInformation); propertiesWriter.WriteRequestResponseInformation(packet.Properties.RequestResponseInformation); propertiesWriter.WriteReceiveMaximum(packet.Properties.ReceiveMaximum); propertiesWriter.WriteTopicAliasMaximum(packet.Properties.TopicAliasMaximum); propertiesWriter.WriteMaximumPacketSize(packet.Properties.MaximumPacketSize); propertiesWriter.WriteUserProperties(packet.Properties.UserProperties); } propertiesWriter.WriteTo(packetWriter); packetWriter.WriteWithLengthPrefix(packet.ClientId); if (packet.WillMessage != null) { var willPropertiesWriter = new MqttV500PropertiesWriter(); willPropertiesWriter.WritePayloadFormatIndicator(packet.WillMessage.PayloadFormatIndicator); willPropertiesWriter.WriteMessageExpiryInterval(packet.WillMessage.MessageExpiryInterval); willPropertiesWriter.WriteTopicAlias(packet.WillMessage.TopicAlias); willPropertiesWriter.WriteResponseTopic(packet.WillMessage.ResponseTopic); willPropertiesWriter.WriteCorrelationData(packet.WillMessage.CorrelationData); willPropertiesWriter.WriteSubscriptionIdentifiers(packet.WillMessage.SubscriptionIdentifiers); willPropertiesWriter.WriteContentType(packet.WillMessage.ContentType); willPropertiesWriter.WriteUserProperties(packet.WillMessage.UserProperties); // This is a special case! willPropertiesWriter.WriteWillDelayInterval(packet.Properties?.WillDelayInterval); willPropertiesWriter.WriteTo(packetWriter); 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); } return(MqttPacketWriter.BuildFixedHeader(MqttControlPacketType.Connect)); }
private static byte EncodePingRespPacket() { return(MqttPacketWriter.BuildFixedHeader(MqttControlPacketType.PingResp)); }