internal async Task <Http2FrameWithPayload> ReceiveFrameAsync(uint maxFrameSize = Http2PeerSettings.DefaultMaxFrameSize) { var frame = new Http2FrameWithPayload(); while (true) { var result = await _pair.Application.Input.ReadAsync().AsTask().DefaultTimeout(); var buffer = result.Buffer; var consumed = buffer.Start; var examined = buffer.Start; try { Assert.True(buffer.Length > 0); if (Http2FrameReader.TryReadFrame(ref buffer, frame, maxFrameSize, out var framePayload)) { consumed = examined = framePayload.End; frame.Payload = framePayload.ToArray(); return(frame); } else { examined = buffer.End; } if (result.IsCompleted) { throw new IOException("The reader completed without returning a frame."); } }
internal Dictionary <string, string> DecodeHeaders(Http2FrameWithPayload frame, bool endHeaders = false) { Assert.Equal(Http2FrameType.HEADERS, frame.Type); _hpackDecoder.Decode(frame.PayloadSequence, endHeaders, handler: this); return(_decodedHeaders); }