Exemplo n.º 1
0
        protected internal override Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            Uri uri = request.RequestUri;
            HttpConnectionKey  key  = new HttpConnectionKey(uri.IdnHost, uri.Port, GetSslHostName(request));
            HttpConnectionPool pool = _connectionPools.GetOrAddPool(key);

            return(pool.SendAsync(request, cancellationToken));
        }
        private Task <HttpResponseMessage> GetConnectionAndSendAsync(HttpRequestMessage request, Uri proxyUri, CancellationToken cancellationToken)
        {
            Debug.Assert(proxyUri.Scheme == UriScheme.Http);

            var key = new HttpConnectionKey(proxyUri.IdnHost, proxyUri.Port, null);
            HttpConnectionPool pool = _connectionPools.GetOrAddPool(key);

            return(pool.SendAsync(request, cancellationToken));
        }
Exemplo n.º 3
0
        private ValueTask <HttpConnection> GetOrCreateConnection(HttpRequestMessage request, Uri proxyUri, CancellationToken cancellationToken)
        {
            var key = new HttpConnectionKey(proxyUri);
            HttpConnectionPool pool = _connectionPools.GetOrAddPool(key);

            return(pool.GetConnectionAsync(async(state, ct) =>
            {
                Stream stream = await ConnectHelper.ConnectAsync(state.proxyUri.IdnHost, state.proxyUri.Port, ct).ConfigureAwait(false);
                return new HttpConnection(state.pool, state.key, null, stream, null, true);
            }, (pool: pool, key: key, request: request, proxyUri: proxyUri), cancellationToken));
        }
Exemplo n.º 4
0
        protected internal override Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            var key = new HttpConnectionKey(request.RequestUri);

            HttpConnectionPool         pool           = _connectionPools.GetOrAddPool(key);
            ValueTask <HttpConnection> connectionTask = pool.GetConnectionAsync(
                state => state.handler.CreateConnection(state.request, state.key, state.pool),
                (handler: this, request: request, key: key, pool: pool));

            return(connectionTask.IsCompletedSuccessfully ?
                   connectionTask.Result.SendAsync(request, cancellationToken) :
                   SendAsyncWithAwaitedConnection(connectionTask, request, cancellationToken));
        }