internal static Http2Request Parse(IStream stream) { Http2Request request = new Http2Request(); try { request.Heads = stream.ReadHeadersAsync().GetAwaiter().GetResult().ToList(); request.Method = request.Heads.First(h => h.Name == ":method").Value; request.Path = request.Heads.First(h => h.Name == ":path").Value; List <Byte> list = new List <byte>(); while (true) { var buf = new byte[2048]; var readResult = stream.ReadAsync(new ArraySegment <byte>(buf)).GetAwaiter().GetResult(); if (readResult.EndOfStream) { break; } list.AddRange(buf.AsSpan().Slice(0, readResult.BytesRead).ToArray()); } request.Body = list.ToArray(); list.Clear(); } catch (Exception ex) { request = null; } return(request); }
internal Http2Context(IStream stream, IHttp2Invoker invoker = null) { Request = Http2Request.Parse(stream); Response = new Http2Response(stream); if (_invoker == null) { _invoker = new WebInvoker("wwwroot"); } }