public static PooledBuffer HeaderAsBinary(HTTP2FrameHeaderAndPayload header) { // https://httpwg.org/specs/rfc7540.html#FrameHeader var buffer = BufferPool.Get(9, true); BufferHelper.SetUInt24(buffer, 0, header.PayloadLength); buffer[3] = (byte)header.Type; buffer[4] = header.Flags; BufferHelper.SetUInt31(buffer, 5, header.StreamId); return(new PooledBuffer { Data = buffer, Length = 9 }); }
public static HTTP2FrameHeaderAndPayload CreateGoAwayFrame(UInt32 lastStreamId, HTTP2ErrorCodes error) { // https://httpwg.org/specs/rfc7540.html#GOAWAY HTTP2FrameHeaderAndPayload frame = new HTTP2FrameHeaderAndPayload(); frame.Type = HTTP2FrameTypes.GOAWAY; frame.Flags = 0; frame.StreamId = 0; frame.Payload = BufferPool.Get(8, true); frame.PayloadLength = 8; BufferHelper.SetUInt31(frame.Payload, 0, lastStreamId); BufferHelper.SetUInt31(frame.Payload, 4, (UInt32)error); return(frame); }
public static HTTP2FrameHeaderAndPayload CreateWindowUpdateFrame(UInt32 streamId, UInt32 windowSizeIncrement) { // https://httpwg.org/specs/rfc7540.html#WINDOW_UPDATE HTTP2FrameHeaderAndPayload frame = new HTTP2FrameHeaderAndPayload(); frame.Type = HTTP2FrameTypes.WINDOW_UPDATE; frame.Flags = 0; frame.StreamId = streamId; frame.Payload = BufferPool.Get(4, true); frame.PayloadLength = 4; BufferHelper.SetBit(0, 0, 0); BufferHelper.SetUInt31(frame.Payload, 0, windowSizeIncrement); return(frame); }