/// <summary> /// Adopts protocol terms into owin environment. /// </summary> /// <param name="headers">The headers.</param> /// <returns></returns> private OwinContext PopulateEnvironment(HeadersList headers) { var owinContext = new OwinContext(); var headersAsDict = headers.ToDictionary(header => header.Key, header => new[] {header.Value}, StringComparer.OrdinalIgnoreCase); owinContext.Environment[CommonOwinKeys.RequestHeaders] = headersAsDict; owinContext.Environment[CommonOwinKeys.ResponseHeaders] = new Dictionary<string, string[]>(); var owinRequest = owinContext.Request; var owinResponse = owinContext.Response; owinRequest.Method = headers.GetValue(CommonHeaders.Method); owinRequest.Path = headers.GetValue(CommonHeaders.Path); owinRequest.CallCancelled = CancellationToken.None; owinRequest.Host = headers.GetValue(CommonHeaders.Host); owinRequest.PathBase = String.Empty; owinRequest.QueryString = String.Empty; owinRequest.Body = new MemoryStream(); owinRequest.Protocol = Protocols.Http2; owinRequest.Scheme = headers.GetValue(CommonHeaders.Scheme) == Uri.UriSchemeHttp ? Uri.UriSchemeHttp : Uri.UriSchemeHttps; owinRequest.RemoteIpAddress = _transportInfo.RemoteIpAddress; owinRequest.RemotePort = Convert.ToInt32(_transportInfo.RemotePort); owinRequest.LocalIpAddress = _transportInfo.LocalIpAddress; owinRequest.LocalPort = _transportInfo.LocalPort; owinResponse.Body = new ResponseStream{Capacity = 16384}; return owinContext; }