示例#1
0
        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);
        }
示例#2
0
        internal Http2Context(IStream stream, IHttp2Invoker invoker = null)
        {
            Request  = Http2Request.Parse(stream);
            Response = new Http2Response(stream);

            if (_invoker == null)
            {
                _invoker = new WebInvoker("wwwroot");
            }
        }