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 }
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); }