void Pump(Stream stream)
        {
            try
            {
                while (true)
                {
                    byte[] buffer = new byte[8];
                    Read(stream, buffer, 0, 8);
                    OnHeader(stream, buffer);

                    while (true)
                    {
                        Read(stream, buffer, 0, 4);
                        int    len   = AmqpBitConverter.ReadInt(buffer, 0);
                        byte[] frame = new byte[len - 4];
                        Read(stream, frame, 0, frame.Length);
                        if (!OnFrame(stream, new ByteBuffer(frame, 0, frame.Length, frame.Length)))
                        {
                            break;
                        }
                    }
                }
            }
            catch
            {
                stream.Dispose();
            }
        }
Beispiel #2
0
        public static ByteBuffer ReadFrameBuffer(ITransport transport, byte[] sizeBuffer, uint maxFrameSize)
        {
            if (!ReadBuffer(transport, sizeBuffer, 0, FixedWidth.UInt))
            {
                return(null);
            }

            int size = AmqpBitConverter.ReadInt(sizeBuffer, 0);

            if ((uint)size > maxFrameSize)
            {
                throw new AmqpException(ErrorCode.InvalidField,
                                        Fx.Format(SRAmqp.InvalidFrameSize, size, maxFrameSize));
            }

            ByteBuffer frameBuffer = new ByteBuffer(size, false);

            AmqpBitConverter.WriteInt(frameBuffer, size);
            if (!ReadBuffer(transport, frameBuffer.Buffer, frameBuffer.Length, frameBuffer.Size))
            {
                return(null);
            }

            frameBuffer.Append(frameBuffer.Size);
            return(frameBuffer);
        }
Beispiel #3
0
        int GetCount(byte formatCode, ByteBuffer buffer)
        {
            int count;

            if (formatCode >= 0xA0)
            {
                //bin8  a0 10100001
                //str8  a1 10100001
                //sym8  a3 10100011
                //list8 c0 11000000
                //map8  c1 11000001
                //arr8  e0 11100000
                //bin32 b0 10110000
                //str32 b1 10110001
                //sym32 b3 10110011
                //lit32 d0 11010000
                //map32 d1 11010001
                //arr32 f0 11110000
                if ((formatCode & 0x10) == 0)
                {
                    count = AmqpBitConverter.ReadUByte(buffer);
                }
                else
                {
                    count = AmqpBitConverter.ReadInt(buffer);
                }
            }
            else
            {
                count = (1 << ((formatCode >> 4) - 4)) >> 1;
            }

            return(count);
        }
        void Pump(Stream stream)
        {
            try
            {
                while (pumpEnabled)
                {
                    byte[] buffer = new byte[8];
                    Read(stream, buffer, 0, 8);
                    testAmqpPeer.OnHeader(stream, buffer);

                    while (pumpEnabled)
                    {
                        Read(stream, buffer, 0, 4);
                        int    len   = AmqpBitConverter.ReadInt(buffer, 0);
                        byte[] frame = new byte[len - 4];
                        Read(stream, frame, 0, frame.Length);
                        if (!OnFrame(stream, new ByteBuffer(frame, 0, frame.Length, frame.Length)))
                        {
                            break;
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Logger.Info(e);
                stream.Dispose();
            }
        }
Beispiel #5
0
        internal override void DecodeValue(ByteBuffer buffer)
        {
            int  offset     = buffer.Offset;
            byte formatCode = Encoder.ReadFormatCode(buffer);

            if (formatCode == FormatCode.Binary8)
            {
                this.binaryOffset = 2;
            }
            else if (formatCode == FormatCode.Binary32)
            {
                this.binaryOffset = 5;
            }
            else
            {
                while (formatCode == FormatCode.Described)
                {
                    Encoder.ReadObject(buffer);
                    formatCode = Encoder.ReadFormatCode(buffer);
                }
            }

            int count;

            if (formatCode >= 0xA0)
            {
                //bin8  a0 10100001
                //str8  a1 10100001
                //sym8  a3 10100011
                //list8 c0 11000000
                //map8  c1 11000001
                //arr8  e0 11100000
                //bin32 b0 10110000
                //str32 b1 10110001
                //sym32 b3 10110011
                //lit32 d0 11010000
                //map32 d1 11010001
                //arr32 f0 11110000
                if ((formatCode & 0x10) == 0)
                {
                    count = AmqpBitConverter.ReadUByte(buffer);
                }
                else
                {
                    count = AmqpBitConverter.ReadInt(buffer);
                }
            }
            else
            {
                count = (1 << ((formatCode >> 4) - 4)) >> 1;
            }

            buffer.Validate(false, count);
            buffer.Complete(count);

            int size = buffer.Offset - offset;

            this.valueBuffer = new ByteBuffer(buffer.Buffer, offset, size, size);
        }
Beispiel #6
0
 public static char ReadChar(ByteBuffer buffer, byte formatCode)
 {
     if (formatCode == FormatCode.Char)
     {
         return((char)AmqpBitConverter.ReadInt(buffer));
     }
     else
     {
         throw DecodeException(formatCode, buffer.Offset);
     }
 }
Beispiel #7
0
        public static int?Decode(ByteBuffer buffer, FormatCode formatCode)
        {
            if (formatCode == 0 && (formatCode = AmqpEncoding.ReadFormatCode(buffer)) == FormatCode.Null)
            {
                return(null);
            }

            VerifyFormatCode(formatCode, buffer.Offset, FormatCode.Int, FormatCode.SmallInt);
            return(formatCode == FormatCode.SmallInt ?
                   AmqpBitConverter.ReadByte(buffer) :
                   AmqpBitConverter.ReadInt(buffer));
        }
Beispiel #8
0
 public static int ReadInt(ByteBuffer buffer, byte formatCode)
 {
     if (formatCode == FormatCode.SmallInt)
     {
         return(AmqpBitConverter.ReadByte(buffer));
     }
     else if (formatCode == FormatCode.Int)
     {
         return(AmqpBitConverter.ReadInt(buffer));
     }
     else
     {
         throw DecodeException(formatCode, buffer.Offset);
     }
 }
        public void Can_Encode_Int_Without_Boxing_Using_Generic_DecodeObject()
        {
            var buffer   = new ByteBuffer(1024, true);
            var instance = new TestCompositeClass();

            instance.IntValue = randNum.Next(300, 1000);

            // compile lambda expression
            var compiled = CompileGenericPropertyEncodeExpression(typeof(TestCompositeClass), "IntValue");

            // execute
            compiled(instance, buffer);

            // assert
            var formatCode = AmqpBitConverter.ReadByte(buffer);

            Assert.AreEqual(FormatCode.Int, formatCode);
            var value = AmqpBitConverter.ReadInt(buffer);

            Assert.AreEqual(instance.IntValue, value);
        }
Beispiel #10
0
        public void TestMethod_AmqpBitConverter()
        {
            ByteBuffer buffer = new ByteBuffer(128, true);

            AmqpBitConverter.WriteByte(buffer, 0x22);
            AmqpBitConverter.WriteByte(buffer, -0x22);

            AmqpBitConverter.WriteUByte(buffer, 0x22);
            AmqpBitConverter.WriteUByte(buffer, 0xB2);

            AmqpBitConverter.WriteShort(buffer, 0x22B7);
            AmqpBitConverter.WriteShort(buffer, -0x22B7);

            AmqpBitConverter.WriteUShort(buffer, 0x22B7);
            AmqpBitConverter.WriteUShort(buffer, 0xC2B7);

            AmqpBitConverter.WriteInt(buffer, 0x340da287);
            AmqpBitConverter.WriteInt(buffer, -0x340da287);

            AmqpBitConverter.WriteUInt(buffer, 0x340da287);
            AmqpBitConverter.WriteUInt(buffer, 0xF40da287);

            AmqpBitConverter.WriteLong(buffer, 0x5d00BB9A340da287);
            AmqpBitConverter.WriteLong(buffer, -0x5d00BB9A340da287);

            AmqpBitConverter.WriteULong(buffer, 0x5d00BB9A340da287);
            AmqpBitConverter.WriteULong(buffer, 0xad00BB9A340da287);

            AmqpBitConverter.WriteFloat(buffer, 12344.4434F);
            AmqpBitConverter.WriteFloat(buffer, -12344.4434F);

            AmqpBitConverter.WriteDouble(buffer, 39432123244.44352334);
            AmqpBitConverter.WriteDouble(buffer, -39432123244.44352334);

            Guid uuid = Guid.NewGuid();

            AmqpBitConverter.WriteUuid(buffer, uuid);

            sbyte b  = AmqpBitConverter.ReadByte(buffer);
            sbyte b2 = AmqpBitConverter.ReadByte(buffer);

            byte ub  = AmqpBitConverter.ReadUByte(buffer);
            byte ub2 = AmqpBitConverter.ReadUByte(buffer);

            short s  = AmqpBitConverter.ReadShort(buffer);
            short s2 = AmqpBitConverter.ReadShort(buffer);

            ushort us  = AmqpBitConverter.ReadUShort(buffer);
            ushort us2 = AmqpBitConverter.ReadUShort(buffer);

            int i  = AmqpBitConverter.ReadInt(buffer);
            int i2 = AmqpBitConverter.ReadInt(buffer);

            uint ui  = AmqpBitConverter.ReadUInt(buffer);
            uint ui2 = AmqpBitConverter.ReadUInt(buffer);

            long l  = AmqpBitConverter.ReadLong(buffer);
            long l2 = AmqpBitConverter.ReadLong(buffer);

            ulong ul  = AmqpBitConverter.ReadULong(buffer);
            ulong ul2 = AmqpBitConverter.ReadULong(buffer);

            float f  = AmqpBitConverter.ReadFloat(buffer);
            float f2 = AmqpBitConverter.ReadFloat(buffer);

            double d  = AmqpBitConverter.ReadDouble(buffer);
            double d2 = AmqpBitConverter.ReadDouble(buffer);

            Guid uuid2 = AmqpBitConverter.ReadUuid(buffer);
        }