bool TryDequeueMessage(PacketWithId packet, out TAckState message)
        {
            TAckState firstRequest = this.FirstRequestPendingAck;

            if (firstRequest == null)
            {
                CommonEventSource.Log.Warning($"{packet.PacketType.ToString()} #{packet.PacketId.ToString()} was received while not expected.", this.identityProvider.ChannelId, this.identityProvider.Id);
                message = default(TAckState);
                return(false);
            }

            if (packet.PacketId != firstRequest.PacketId)
            {
                CommonEventSource.Log.Warning($"{packet.PacketType.ToString()} #{packet.PacketId.ToString()} was received while #{firstRequest.PacketId.ToString()} was expected.", this.identityProvider.ChannelId, this.identityProvider.Id);
                message = default(TAckState);
                return(false);
            }

            TAckState dequeued = this.pendingAckQueue.Dequeue();

            Contract.Assert(ReferenceEquals(dequeued, firstRequest));

            message = firstRequest;
            return(true);
        }
Exemple #2
0
        bool TryDequeueMessage(PacketWithId packet, out TAckState message, string scope)
        {
            TAckState firstRequest = this.FirstRequestPendingAck;

            if (firstRequest == null)
            {
                CommonEventSource.Log.Warning($"{packet.PacketType.ToString()} #{packet.PacketId.ToString()} was received while not expected.", scope);
                message = default(TAckState);
                return(false);
            }

            if (packet.PacketId != firstRequest.PacketId)
            {
                CommonEventSource.Log.Warning($"{packet.PacketType.ToString()} #{packet.PacketId.ToString()} was received while #{firstRequest.PacketId.ToString()} was expected.", scope);
                message = default(TAckState);
                return(false);
            }

            TAckState dequeued = this.pendingAckQueue.Dequeue();

            Contract.Assert(ReferenceEquals(dequeued, firstRequest));

            if (this.pendingAckQueue.Count == 0)
            {
                this.Retransmitting = false;
            }

            message = firstRequest;
            return(true);
        }
Exemple #3
0
        static void DecodePacketIdVariableHeader(DataReader reader, PacketWithId packet, ref uint remainingLength)
        {
            int packetId = packet.PacketId = DecodeUnsignedShort(reader, ref remainingLength);

            if (packetId == 0)
            {
                throw new DecoderException("[MQTT-2.3.1-1]");
            }
        }
Exemple #4
0
        static void DecodePacketIdVariableHeader(IByteBuffer buffer, PacketWithId packet, ref int remainingLength)
        {
            int packetId = packet.PacketId = DecodeUnsignedShort(buffer, ref remainingLength);

            if (0u >= (uint)packetId)
            {
                ThrowHelper.ThrowDecoderException_MQTT_231_1();
            }
        }
Exemple #5
0
 public bool CheckServerAndDevicePayload(PacketWithId packet, Device device)
 {
     if (GetServerPayloadSignature(packet.randomPayload) == packet.serverSignature &&
         GetDevicePayloadSignature(packet.randomPayload, device) == packet.deviceSignature)
     {
         return(true);
     }
     return(false);
 }
Exemple #6
0
        static void DecodePacketIdVariableHeader(Packet buffer, PacketWithId packet, ref Int32 remainingLength)
        {
            var packetId = packet.PacketId = DecodeUnsignedShort(buffer, ref remainingLength);

            if (packetId == 0)
            {
                throw new DecoderException("[MQTT-2.3.1-1]");
            }
        }
Exemple #7
0
        static void EncodePacketWithIdOnly(PacketWithId packet, DataWriter writer)
        {
            var msgId = packet.PacketId;

            const uint VariableHeaderBufferSize = PACKET_ID_LENGTH; // variable part only has a packet id

            writer.WriteByte(CalculateFirstByteOfFixedHeader(packet));
            WriteVariableLengthInt(writer, VariableHeaderBufferSize);
            writer.WriteUInt16(msgId);
        }
        static void EncodePacketWithIdOnly(IByteBufferAllocator bufferAllocator, PacketWithId packet, List <object> output)
        {
            int msgId = packet.PacketId;

            const int   VariableHeaderBufferSize = PacketIdLength; // variable part only has a packet id
            int         fixedHeaderBufferSize    = 1 + MaxVariableLength;
            IByteBuffer buffer = bufferAllocator.Buffer(fixedHeaderBufferSize + VariableHeaderBufferSize);

            buffer.WriteByte(CalculateFirstByteOfFixedHeader(packet));
            WriteVariableLengthInt(buffer, VariableHeaderBufferSize);
            buffer.WriteShort(msgId);

            output.Add(buffer);
        }
        protected override Task ProcessAsync(IChannelHandlerContext context, PacketWithId packet)
        {
            TAckState message;

            if (this.TryDequeueMessage(packet, out message))
            {
                return(this.processAckFunc(context, message));
            }
            else if (this.abortOnOutOfOrderAck)
            {
                return(TaskEx.FromException(new ProtocolGatewayException(ErrorCode.InvalidPubAckOrder, "Client MUST send PUBACK packets in the order in which the corresponding PUBLISH packets were received")));
            }

            return(TaskEx.Completed);
        }
Exemple #10
0
        bool TryDequeueMessage(PacketWithId packet, out TAckState message)
        {
            TAckState firstRequest = this.FirstRequestPendingAck;

            if (firstRequest == null)
            {
                if (MqttIotHubAdapterEventSource.Log.IsWarningEnabled)
                {
                    MqttIotHubAdapterEventSource.Log.Warning(string.Format("{0} #{1} was received while not expected.",
                                                                           packet.PacketType, packet.PacketId));
                }
                message = default(TAckState);
                return(false);
            }

            if (packet.PacketId != firstRequest.PacketId)
            {
                if (MqttIotHubAdapterEventSource.Log.IsWarningEnabled)
                {
                    MqttIotHubAdapterEventSource.Log.Warning(string.Format("{0} #{1} was received while #{2} was expected.",
                                                                           packet.PacketType, packet.PacketId, firstRequest.PacketId));
                }
                message = default(TAckState);
                return(false);
            }

            TAckState dequeued = this.pendingAckQueue.Dequeue();

            Contract.Assert(ReferenceEquals(dequeued, firstRequest));

            if (this.pendingAckQueue.Count == 0)
            {
                this.Retransmitting = false;
            }

            message = firstRequest;
            return(true);
        }
Exemple #11
0
        static void EncodePacketWithIdOnly(IByteBufferAllocator bufferAllocator, PacketWithId packet, List <object> output)
        {
            int msgId = packet.PacketId;

            const int   VariableHeaderBufferSize = PACKET_ID_LENGTH; // variable part only has a packet id
            int         fixedHeaderBufferSize    = 1 + MAX_VARIABLE_LENGTH;
            IByteBuffer buffer = null;

            try
            {
                buffer = bufferAllocator.Buffer(fixedHeaderBufferSize + VariableHeaderBufferSize);
                buffer.WriteByte(CalculateFirstByteOfFixedHeader(packet));
                WriteVariableLengthInt(buffer, VariableHeaderBufferSize);
                buffer.WriteShort(msgId);

                output.Add(buffer);
                buffer = null;
            }
            finally
            {
                buffer?.SafeRelease();
            }
        }
Exemple #12
0
        static void EncodePacketWithIdOnly(IByteBufferAllocator bufferAllocator, PacketWithId packet, List <Object> output)
        {
            var msgId = packet.PacketId;

            const Int32 VariableHeaderBufferSize = PacketIdLength; // variable part only has a packet id
            var         fixedHeaderBufferSize    = 1 + MaxVariableLength;
            Packet      buffer = null;

            try
            {
                buffer = bufferAllocator.Buffer(fixedHeaderBufferSize + VariableHeaderBufferSize);
                buffer.WriteByte(CalculateFirstByteOfFixedHeader(packet));
                WriteVariableLengthInt(buffer, VariableHeaderBufferSize);
                buffer.WriteShort(msgId);

                output.Add(buffer);
                buffer = null;
            }
            finally
            {
                buffer?.SafeRelease();
            }
        }
Exemple #13
0
        protected override Task ProcessAsync(IChannelHandlerContext context, PacketWithId packet)
        {
            TAckState message;

            return(this.TryDequeueMessage(packet, out message) ? this.processAckFunc(context, message) : TaskEx.Completed);
        }
 static void DecodePacketIdVariableHeader(IByteBuffer buffer, PacketWithId packet, ref int remainingLength)
 {
     packet.PacketId = DecodeUnsignedShort(buffer, ref remainingLength);
 }