private async Task <HttpResponseMessage> ProcessRequestAsync(HttpRequestMessage request, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); ProcessUrl(request); ProcessHostHeader(request); request.Headers.ConnectionClose = true; // TODO: Connection re-use is not supported. if (request.Method != HttpMethod.Get) { throw new NotImplementedException(request.Method.Method); // TODO: POST } ProxyMode proxyMode = DetermineProxyModeAndAddressLine(request); ApmStream transport = await ConnectAsync(request, cancellationToken); if (proxyMode == ProxyMode.Tunnel) { await TunnelThroughProxyAsync(request, transport, cancellationToken); } System.Diagnostics.Debug.Assert(!(proxyMode == ProxyMode.Http && request.IsHttps())); if (request.IsHttps()) { SslStream sslStream = new SslStream(transport); await sslStream.AuthenticateAsClientAsync(request.GetHostProperty()); transport = new ApmStreamWrapper(sslStream); } var bufferedReadStream = new BufferedReadStream(transport); var connection = new HttpConnection(bufferedReadStream); return(await connection.SendAsync(request, cancellationToken)); }
public HttpConnection(BufferedReadStream transport) { Transport = transport; }
public ChunkedReadStream(BufferedReadStream inner) { _inner = inner; }