Esempio n. 1
0
        private static void SkipBinaryBuffer(ByteBuffer buffer)
        {
            var binaryFormatCode = AmqpCodec.DecodeFormatCode(buffer);
            int size             = 0;

            if (binaryFormatCode == FormatCode.Binary8)
            {
                size = AmqpBitConverter.ReadUByte(buffer);
            }
            else if (binaryFormatCode == FormatCode.Binary32)
            {
                size = (int)AmqpBitConverter.ReadUInt(buffer);
            }
            buffer.CompleteRead(size);
        }
Esempio n. 2
0
        private static void SkipDescribedList(ByteBuffer buffer)
        {
            // read the list length and move forward
            var listFormatCode = AmqpCodec.DecodeFormatCode(buffer);
            int size           = 0;

            if (listFormatCode == FormatCode.List0)
            {
                size = 0;
            }
            else if (listFormatCode == FormatCode.List8)
            {
                size = AmqpBitConverter.ReadUByte(buffer);
            }
            else if (listFormatCode == FormatCode.List32)
            {
                size = (int)AmqpBitConverter.ReadUInt(buffer);
            }
            buffer.CompleteRead(size);
        }
Esempio n. 3
0
 protected override void DecodeValue(ByteBuffer buffer)
 {
     map = Encoder.ReadMap(buffer, AmqpCodec.DecodeFormatCode(buffer));
 }
Esempio n. 4
0
        public static BrokeredMessage Decode(ByteBuffer buffer)
        {
            var message = new BrokeredMessage();

            while (buffer.LengthAvailableToRead > 0)
            {
                int offOfDescribedList = buffer.ReadOffset;

                // peak at the type of the described list
                var formatCode = AmqpCodec.DecodeFormatCode(buffer);
                if (formatCode != FormatCode.Described)
                {
                    throw new AmqpException(ErrorCode.FramingError, $"Expected Format Code = {FormatCode.Described.ToHex()} but was {formatCode.ToHex()}");
                }

                var descriptor = AmqpCodec.DecodeDescriptor(buffer);

                if (descriptor == DescribedTypeCodec.Header)
                {
                    message.Header = (Header)AmqpCodec.DecodeKnownDescribedType(buffer, descriptor);
                    continue;
                }

                if (descriptor == DescribedTypeCodec.DeliveryAnnotations)
                {
                    message.DeliveryAnnotations = (DeliveryAnnotations)AmqpCodec.DecodeKnownDescribedType(buffer, descriptor);
                    continue;
                }

                if (descriptor == DescribedTypeCodec.MessageAnnotations)
                {
                    message.MessageAnnotations = (MessageAnnotations)AmqpCodec.DecodeKnownDescribedType(buffer, descriptor);
                    continue;
                }

                if (descriptor == DescribedTypeCodec.Footer)
                {
                    message.Footer = (Footer)AmqpCodec.DecodeKnownDescribedType(buffer, descriptor);
                    continue;
                }

                if (descriptor == DescribedTypeCodec.Properties)
                {
                    message.Properties = (Properties)AmqpCodec.DecodeKnownDescribedType(buffer, descriptor);
                    continue;
                }

                if (descriptor == DescribedTypeCodec.ApplicationProperties)
                {
                    message.ApplicationProperties = (ApplicationProperties)AmqpCodec.DecodeKnownDescribedType(buffer, descriptor);
                    continue;
                }

                if (descriptor == DescribedTypeCodec.Data)
                {
                    throw new NotImplementedException("TODO: Decode Described amqp:data:binary");
                    // continue;
                }

                if (descriptor == DescribedTypeCodec.AmqpValue)
                {
                    throw new NotImplementedException("TODO: Decode Described amqp:amqp-value:*");
                    // continue;
                }

                if (descriptor == DescribedTypeCodec.AmqpSequence)
                {
                    throw new NotImplementedException("TODO: Decode Described amqp:amqp-sequence:list");
                    //continue;
                }
            }

            return(message);
        }
Esempio n. 5
0
        public static AnnotatedMessage Decode(ByteBuffer buffer)
        {
            var message = new AnnotatedMessage();

            int bareMessageStartOffset = -1;
            int bareMessageEndOffset   = -1;

            while (buffer.LengthAvailableToRead > 0)
            {
                int offOfDescribedList = buffer.ReadOffset;

                // peak at the type of the described list
                var formatCode = AmqpCodec.DecodeFormatCode(buffer);
                if (formatCode != FormatCode.Described)
                {
                    throw new AmqpException(ErrorCode.FramingError, $"Expected Format Code = {FormatCode.Described.ToHex()} but was {formatCode.ToHex()}");
                }

                var descriptor = AmqpCodec.DecodeDescriptor(buffer);

                if (descriptor == DescribedTypeCodec.Header)
                {
                    message.Header = (Header)AmqpCodec.DecodeKnownDescribedType(buffer, descriptor);
                    continue;
                }

                if (descriptor == DescribedTypeCodec.DeliveryAnnotations)
                {
                    message.DeliveryAnnotations = (DeliveryAnnotations)AmqpCodec.DecodeKnownDescribedType(buffer, descriptor);
                    continue;
                }

                if (descriptor == DescribedTypeCodec.MessageAnnotations)
                {
                    message.MessageAnnotations = (MessageAnnotations)AmqpCodec.DecodeKnownDescribedType(buffer, descriptor);
                    continue;
                }

                if (descriptor == DescribedTypeCodec.Footer)
                {
                    message.Footer = (Footer)AmqpCodec.DecodeKnownDescribedType(buffer, descriptor);
                    continue;
                }

                if (descriptor == DescribedTypeCodec.Properties)
                {
                    if (bareMessageStartOffset < 0)
                    {
                        bareMessageStartOffset = offOfDescribedList; // the first described list in the bare message
                    }
                    SkipDescribedList(buffer);
                    bareMessageEndOffset = buffer.ReadOffset;
                    continue;
                }

                if (descriptor == DescribedTypeCodec.ApplicationProperties)
                {
                    if (bareMessageStartOffset < 0)
                    {
                        bareMessageStartOffset = offOfDescribedList; // the first described list in the bare message
                    }
                    SkipDescribedList(buffer);
                    bareMessageEndOffset = buffer.ReadOffset;
                    continue;
                }

                if (descriptor == DescribedTypeCodec.Data)
                {
                    if (bareMessageStartOffset < 0)
                    {
                        bareMessageStartOffset = offOfDescribedList; // the first described list in the bare message
                    }
                    SkipBinaryBuffer(buffer);
                    bareMessageEndOffset = buffer.ReadOffset;
                    continue;
                }

                if (descriptor == DescribedTypeCodec.AmqpValue)
                {
                    if (bareMessageStartOffset < 0)
                    {
                        bareMessageStartOffset = offOfDescribedList; // the first described list in the bare message
                    }
                    throw new NotImplementedException();
                    //continue;
                }

                if (descriptor == DescribedTypeCodec.AmqpSequence)
                {
                    if (bareMessageStartOffset < 0)
                    {
                        bareMessageStartOffset = offOfDescribedList; // the first described list in the bare message
                    }
                    throw new NotImplementedException();
                    //continue;
                }
            }

            if (bareMessageStartOffset > -1)
            {
                message.BareMessage = new byte[bareMessageEndOffset - bareMessageStartOffset];
                Array.Copy(buffer.Buffer, bareMessageStartOffset, message.BareMessage, 0, message.BareMessage.Length);
            }

            return(message);
        }