Esempio n. 1
0
        public override void ParsePayload (byte[] payloadData, FrameHeader frameHeader)
        {
            EndHeaders = (frameHeader.Flags & 0x4) == 0x4;

            HeaderBlockFragment = new byte[payloadData.Length];
            payloadData.CopyTo (HeaderBlockFragment, 0);
        }
Esempio n. 2
0
        public override void ParsePayload (byte[] payloadData, FrameHeader frameHeader)
        {
            Ack = (frameHeader.Flags & 0x1) == 0x1;

            for (int i = 0; i < payloadData.Length; i+=6) {
                
                var value = BitConverter.ToUInt32 (payloadData, i + 2);

                switch (value) {
                case 0x1:
                    HeaderTableSize = value;
                    break;
                case 0x2:
                    EnablePush = value == 1;
                    break;
                case 0x3:
                    MaxConcurrentStreams = value;
                    break;
                case 0x4:
                    InitialWindowSize = value;
                    break;
                case 0x5:
                    MaxFrameSize = value;
                    break;
                case 0x6:
                    MaxHeaderListSize = value;
                    break;
                }
            }
        }
Esempio n. 3
0
        public override void ParsePayload (byte[] payloadData, FrameHeader frameHeader)
        {
            EndHeaders = (frameHeader.Flags & 0x4) == 0x4;
            Padded = (frameHeader.Flags & 0x8) == 0x8;

            var index = 0;

            if (Padded) {
                // Get pad length (1 byte)
                padLength = (ushort)payloadData [index];
                index++;
            } else {
                padLength = 0;
            }

            // Get Dependency Stream Id
            // we need to turn the stream id into a uint
            var frameStreamIdData = new byte[4]; 
            Array.Copy (payloadData, index, frameStreamIdData, 0, 4);
            StreamDependency = Util.ConvertFromUInt31 (frameStreamIdData.EnsureBigEndian ());

            // Advance the index
            index += 4;

            // create an array for the header data to read
            // it will be the payload length, minus the pad length value, weight, stream id, and padding
            HeaderBlockFragment = new byte[payloadData.Length - (index + padLength)];
            Array.Copy (payloadData, index, HeaderBlockFragment, 0, HeaderBlockFragment.Length);

            // Advance the index
            index += HeaderBlockFragment.Length;

            // Don't care about padding
        }
Esempio n. 4
0
 public override void ParsePayload (byte[] payloadData, FrameHeader frameHeader)
 {
     // we need to turn the stream id into a uint
     var windowSizeIncrData = new byte[4]; 
     Array.Copy (payloadData, 0, windowSizeIncrData, 0, 4);
     WindowSizeIncrement = Util.ConvertFromUInt31 (windowSizeIncrData.EnsureBigEndian ());
 }
Esempio n. 5
0
 public override void ParsePayload (byte[] payloadData, FrameHeader frameHeader)
 {
     if (payloadData != null && payloadData.Length > 0)
         ErrorCode = (ErrorCode)payloadData [0];
     else
         ErrorCode = ErrorCode.NoError;
 }
Esempio n. 6
0
        public override void ParsePayload(byte[] payloadData, FrameHeader frameHeader)
        {
            Ack = (frameHeader.Flags & 0x1) == 0x1;

            opaqueData = new byte[64];

            if (payloadData != null)
                Array.Copy (payloadData, 0, opaqueData, 0, opaqueData.Length);
        }
Esempio n. 7
0
        public override void ParsePayload (byte[] payloadData, FrameHeader frameHeader)
        {           
            // Get Dependency Stream Id
            // we need to turn the stream id into a uint
            var frameStreamIdData = new byte[4]; 
            Array.Copy (payloadData, 0, frameStreamIdData, 0, 4);
            StreamDependency = Util.ConvertFromUInt31 (frameStreamIdData.EnsureBigEndian ());

            // Get the weight
            weight = (ushort)payloadData [4];
        }
Esempio n. 8
0
        public override void ParsePayload (byte[] payloadData, FrameHeader frameHeader)
        {
            EndStream = (frameHeader.Flags & 0x1) == 0x1;
            Padded = (frameHeader.Flags & 0x8) == 0x8;

            var index = 0;

            if (Padded) {
                padLength = (ushort)payloadData [index];
                index++;
            }

            // Data will be length of total payload - pad length value - the actual padding
            Data = new byte[payloadData.Length - (index + padLength)];
            Array.Copy (payloadData, index, Data, 0, Data.Length);
        }
Esempio n. 9
0
        public override void ParsePayload (byte[] payloadData, FrameHeader frameHeader)
        {
            // we need to turn the stream id into a uint
            var frameStreamIdData = new byte[4]; 
            Array.Copy (payloadData, 0, frameStreamIdData, 0, 4);
            LastStreamId = Util.ConvertFromUInt31 (frameStreamIdData.EnsureBigEndian ());

            var errorCodeData = new byte[4];
            Array.Copy (payloadData, 4, errorCodeData, 0, 4);
            uint errorCode = BitConverter.ToUInt32 (errorCodeData.EnsureBigEndian (), 0);
            ErrorCode = errorCode;

            if (payloadData.Length > 8)
            {
                AdditionalDebugData = new byte[payloadData.Length - 8];
                Array.Copy(payloadData, 8, AdditionalDebugData, 0, payloadData.Length - 8);
            }
        }
Esempio n. 10
0
        public override void ParsePayload(byte[] payloadData, FrameHeader frameHeader)
        {
            EndHeaders = (frameHeader.Flags & 0x4) == 0x4;
            Padded     = (frameHeader.Flags & 0x8) == 0x8;

            var index = 0;

            if (Padded)
            {
                // Get pad length (1 byte)
                padLength = (ushort)payloadData [index];
                index++;
            }
            else
            {
                padLength = 0;
            }

            // Get Dependency Stream Id
            // we need to turn the stream id into a uint
            var frameStreamIdData = new byte[4];

            Array.Copy(payloadData, index, frameStreamIdData, 0, 4);
            StreamDependency = Util.ConvertFromUInt31(frameStreamIdData.EnsureBigEndian());

            // Advance the index
            index += 4;

            // create an array for the header data to read
            // it will be the payload length, minus the pad length value, weight, stream id, and padding
            HeaderBlockFragment = new byte[payloadData.Length - (index + padLength)];
            Array.Copy(payloadData, index, HeaderBlockFragment, 0, HeaderBlockFragment.Length);

            // Advance the index
            index += HeaderBlockFragment.Length;

            // Don't care about padding
        }
Esempio n. 11
0
        public override void ParsePayload(byte[] payloadData, FrameHeader frameHeader)
        {
            Ack = (frameHeader.Flags & 0x1) == 0x1;

            for (int i = 0; i < payloadData.Length; i += 6)
            {
                var value = BitConverter.ToUInt32(payloadData, i + 2);

                switch (value)
                {
                case 0x1:
                    HeaderTableSize = value;
                    break;

                case 0x2:
                    EnablePush = value == 1;
                    break;

                case 0x3:
                    MaxConcurrentStreams = value;
                    break;

                case 0x4:
                    InitialWindowSize = value;
                    break;

                case 0x5:
                    MaxFrameSize = value;
                    break;

                case 0x6:
                    MaxHeaderListSize = value;
                    break;
                }
            }
        }
Esempio n. 12
0
 public abstract void ParsePayload(byte[] payloadData, FrameHeader frameHeader);
Esempio n. 13
0
 public abstract void ParsePayload (byte[] payloadData, FrameHeader frameHeader);
Esempio n. 14
0
        internal void Parse (byte[] data)
        {
            if (data.Length < 9)
                throw new InvalidDataException ("data[] is missing frame header");

            // Find out the frame length
            // which is a 24 bit uint, so we need to convert this as c# uint is 32 bit
            var flen = new byte[4];
            flen [0] = 0x0;
            flen [1] = data [0];
            flen [2] = data [1];
            flen [3] = data [2];

            var frameLength = BitConverter.ToUInt32 (flen.EnsureBigEndian (), 0);

            // If we are expecting a payload that's bigger than what's in our buffer
            // we should keep reading from the stream 
            if (data.Length - 9 < frameLength)
                throw new InvalidDataException ("Length of data[] does not match frame length in data");

            var frameType = data [3]; // 4th byte in frame header is TYPE
            var frameFlags = data [4]; // 5th byte is FLAGS

            // we need to turn the stream id into a uint
            var frameStreamIdData = new byte[4]; 
            Array.Copy (data, 5, frameStreamIdData, 0, 4);
            this.StreamIdentifier = Util.ConvertFromUInt31 (frameStreamIdData.EnsureBigEndian ());

            //this.Type = frameType;
            this.Flags = frameFlags;

            var frameHeader = new FrameHeader {
                Length = frameLength,
                Type = frameType,
                Flags = frameFlags,
                StreamIdentifier = this.StreamIdentifier
            };

            // Isolate the payload data
            var payloadData = new byte[frameLength];
            Array.Copy (data, 9, payloadData, 0, frameLength);

            ParsePayload (payloadData, frameHeader);
        }