Beispiel #1
0
        private static void SendHeader(StreamHandler streamHandler, int streamId, List <HeaderField> headers,
                                       bool endheaders = true, bool endStream = true, bool pushPromise = false)
        {
            byte[] commpresedHeaders = new byte[Server.MAX_HTTP2_FRAME_SIZE];
            // Encode a header block fragment into the output buffer
            var headerBlockFragment = new ArraySegment <byte>(commpresedHeaders);
            // komprimering
            var encodeResult = streamHandler.owner.hpackEncoder.EncodeInto(headerBlockFragment, headers);

            //Http2.Hpack.Encoder.Result encodeResult = Server.hPackEncoder.EncodeInto(headerBlockFragment, headers);
            commpresedHeaders = new byte[encodeResult.UsedBytes];
            // pick out the used bytes
            for (int i = 0; i < commpresedHeaders.Length; i++)
            {
                commpresedHeaders[i] = headerBlockFragment[i];
            }

            if (pushPromise)
            {
                HTTP2Frame promiseFrame = new HTTP2Frame(streamId).AddPushPromisePayload(streamId, commpresedHeaders, 0, true);
                streamHandler.SendFrame(promiseFrame);
            }
            HTTP2Frame headerframe = new HTTP2Frame(streamId).AddHeaderPayload(commpresedHeaders, 0, endheaders, endStream);

            streamHandler.SendFrame(headerframe); // todo støtte for datautvidelse med continuation rammer
        }
Beispiel #2
0
        public static bool SendPushPromise(StreamHandler streamHandler, int streamIdToSendPromiseFrameOn, string url, int streamIdToPromise, string file)
        {
            FileInfo fi = new FileInfo(url);

            if (!fi.Exists)
            {
                return(false);
            }
            List <HeaderField> headers = new List <HeaderField>()
            {
                //HEADER_OK,
                new HeaderField {
                    Name = ":url", Value = file, Sensitive = false
                },
                //new HeaderField{ Name = "content-type", Value = Mapping.MimeMap[fi.Extension], Sensitive = false },
                new HeaderField {
                    Name = ":authority", Value = Server.IpAddress, Sensitive = false
                },
            };

            byte[] commpresedHeaders = new byte[Server.MAX_HTTP2_FRAME_SIZE];
            // Encode a header block fragment into the output buffer
            var headerBlockFragment = new ArraySegment <byte>(commpresedHeaders);
            // komprimering
            var encodeResult = streamHandler.owner.hpackEncoder.EncodeInto(headerBlockFragment, headers);

            //Http2.Hpack.Encoder.Result encodeResult = Server.hPackEncoder.EncodeInto(headerBlockFragment, headers);
            commpresedHeaders = new byte[encodeResult.UsedBytes];
            // pick out the used bytes
            for (int i = 0; i < commpresedHeaders.Length; i++)
            {
                commpresedHeaders[i] = headerBlockFragment[i];
            }

            HTTP2Frame promiseFrame = new HTTP2Frame(streamIdToSendPromiseFrameOn).AddPushPromisePayload(streamIdToPromise, commpresedHeaders, 0, true);

            streamHandler.SendFrame(promiseFrame);
            return(true);
        }