System.Net.Http.OwinHttpMessageHandler.RequestState.RequestState C# (CSharp) Method

RequestState() private method

private RequestState ( HttpRequestMessage request, CancellationToken cancellationToken ) : System
request HttpRequestMessage
cancellationToken System.Threading.CancellationToken
return System
            internal RequestState(HttpRequestMessage request, CancellationToken cancellationToken)
            {
                _request = request;
                _responseTcs = new TaskCompletionSource<HttpResponseMessage>();
                _sendingHeaders = () => { };

                request.Headers.Host = request.RequestUri.IsDefaultPort 
                    ? request.RequestUri.Host
                    : request.RequestUri.GetComponents(UriComponents.HostAndPort, UriFormat.UriEscaped);

                OwinContext = new OwinContext();
                OwinContext.Set("owin.Version", "1.0");
                var owinRequest = OwinContext.Request;
                owinRequest.Protocol = "HTTP/" + request.Version.ToString(2);
                owinRequest.Scheme = request.RequestUri.Scheme;
                owinRequest.Method = request.Method.ToString();
                owinRequest.Path = PathString.FromUriComponent(request.RequestUri);
                owinRequest.PathBase = PathString.Empty;
                owinRequest.QueryString = QueryString.FromUriComponent(request.RequestUri);
                owinRequest.CallCancelled = cancellationToken;
                owinRequest.Set<Action<Action<object>, object>>("server.OnSendingHeaders", (callback, state) =>
                {
                    var prior = _sendingHeaders;
                    _sendingHeaders = () =>
                    {
                        callback(state);
                        prior();
                    };
                });

                foreach (var header in request.Headers)
                {
                    owinRequest.Headers.AppendValues(header.Key, header.Value.ToArray());
                }
                if (request.Content != null)
                {
                    // Need to touch the ContentLength property for it to be calculated and added
                    // to the request.Content.Headers collection.
                    var d = request.Content.Headers.ContentLength;

                    foreach (var header in request.Content.Headers)
                    {
                        owinRequest.Headers.AppendValues(header.Key, header.Value.ToArray());
                    }
                }

                _responseStream = new ResponseStream(CompleteResponse);
                OwinContext.Response.Body = _responseStream;
                OwinContext.Response.StatusCode = 200;
            }