public static HTTP2RSTStreamFrame ReadRST_StreamFrame(HTTP2FrameHeaderAndPayload header) { // https://httpwg.org/specs/rfc7540.html#RST_STREAM HTTP2RSTStreamFrame frame = new HTTP2RSTStreamFrame(header); frame.ErrorCode = BufferHelper.ReadUInt32(header.Payload, 0); return(frame); }
public static HTTP2GoAwayFrame ReadGoAwayFrame(HTTP2FrameHeaderAndPayload header) { // https://httpwg.org/specs/rfc7540.html#GOAWAY HTTP2GoAwayFrame frame = new HTTP2GoAwayFrame(header); frame.ReservedBit = BufferHelper.ReadBit(header.Payload[0], 0); frame.LastStreamId = BufferHelper.ReadUInt31(header.Payload, 0); frame.ErrorCode = BufferHelper.ReadUInt32(header.Payload, 4); frame.AdditionalDebugDataLength = header.PayloadLength - 8; if (frame.AdditionalDebugDataLength > 0) { frame.AdditionalDebugData = BufferPool.Get(frame.AdditionalDebugDataLength, true); Array.Copy(header.Payload, 0, frame.AdditionalDebugData, 0, frame.AdditionalDebugDataLength); } return(frame); }
public static HTTP2SettingsFrame ReadSettings(HTTP2FrameHeaderAndPayload header) { HTTP2SettingsFrame frame = new HTTP2SettingsFrame(header); if (header.PayloadLength > 0) { int kvpCount = (int)(header.PayloadLength / 6); frame.Settings = new List <KeyValuePair <HTTP2Settings, uint> >(kvpCount); for (int i = 0; i < kvpCount; ++i) { HTTP2Settings key = (HTTP2Settings)BufferHelper.ReadUInt16(header.Payload, i * 6); UInt32 value = BufferHelper.ReadUInt32(header.Payload, (i * 6) + 2); frame.Settings.Add(new KeyValuePair <HTTP2Settings, uint>(key, value)); } } return(frame); }