@@ -325,13 +325,13 @@ private Future<HttpClientRequest> doRequest(
325325 ContextInternal ctx = vertx .getOrCreateContext ();
326326 ContextInternal connCtx = ctx .isEventLoopContext () ? ctx : vertx .createEventLoopContext (ctx .nettyEventLoop (), ctx .workerPool (), ctx .classLoader ());
327327 Promise <HttpClientRequest > promise = ctx .promise ();
328- Future <HttpClientStream > future ;
329- ProxyOptions proxyOptions ;
328+ Future <ConnectionObtainedResult > future ;
330329 if (endpointResolver != null && endpointResolver .accepts (server ) != null ) {
331330 Future <EndpointLookup > fut = endpointResolver .lookupEndpoint (ctx , server );
332331 future = fut .compose (lookup -> {
333332 SocketAddress address = lookup .address ();
334- EndpointKey key = new EndpointKey (useSSL , sslOptions , proxyConfig , address , authority != null ? authority : HostAndPort .create (address .host (), address .port ()));
333+ ProxyOptions proxyOptions = computeProxyOptions (proxyConfig , address );
334+ EndpointKey key = new EndpointKey (useSSL , sslOptions , proxyOptions , address , authority != null ? authority : HostAndPort .create (address .host (), address .port ()));
335335 return httpCM .withEndpointAsync (key , httpEndpointProvider (), (endpoint , created ) -> {
336336 Future <Lease <HttpClientConnection >> fut2 = endpoint .requestConnection (connCtx , connectTimeout );
337337 if (fut2 == null ) {
@@ -347,19 +347,14 @@ private Future<HttpClientRequest> doRequest(
347347 return conn .createStream (ctx ).map (stream -> {
348348 HttpClientStream wrapped = new StatisticsGatheringHttpClientStream (stream , endpointRequest );
349349 wrapped .closeHandler (v -> lease .recycle ());
350- return wrapped ;
350+ return new ConnectionObtainedResult ( proxyOptions , wrapped ) ;
351351 });
352352 });
353353 }
354354 });
355355 });
356- if (future != null ) {
357- proxyOptions = proxyConfig ;
358- } else {
359- proxyOptions = null ;
360- }
361356 } else if (server instanceof SocketAddress ) {
362- proxyOptions = computeProxyOptions (proxyConfig , (SocketAddress ) server );
357+ ProxyOptions proxyOptions = computeProxyOptions (proxyConfig , (SocketAddress ) server );
363358 EndpointKey key = new EndpointKey (useSSL , sslOptions , proxyOptions , (SocketAddress ) server , authority );
364359 future = httpCM .withEndpointAsync (key , httpEndpointProvider (), (endpoint , created ) -> {
365360 Future <Lease <HttpClientConnection >> fut = endpoint .requestConnection (connCtx , connectTimeout );
@@ -368,13 +363,11 @@ private Future<HttpClientRequest> doRequest(
368363 } else {
369364 return fut .compose (lease -> {
370365 HttpClientConnection conn = lease .get ();
371- return conn .createStream (ctx ).andThen (ar -> {
372- if (ar .succeeded ()) {
373- HttpClientStream stream = ar .result ();
374- stream .closeHandler (v -> {
375- lease .recycle ();
376- });
377- }
366+ return conn .createStream (ctx ).map (stream -> {
367+ stream .closeHandler (v -> {
368+ lease .recycle ();
369+ });
370+ return new ConnectionObtainedResult (proxyOptions , stream );
378371 });
379372 });
380373 }
@@ -385,13 +378,22 @@ private Future<HttpClientRequest> doRequest(
385378 if (future == null ) {
386379 return connCtx .failedFuture ("Cannot resolve address " + server );
387380 } else {
388- future .map (stream -> {
389- return createRequest (stream , method , headers , requestURI , proxyOptions , useSSL , idleTimeout , followRedirects , traceOperation );
381+ future .map (res -> {
382+ return createRequest (res . stream , method , headers , requestURI , res . proxyOptions , useSSL , idleTimeout , followRedirects , traceOperation );
390383 }).onComplete (promise );
391384 return promise .future ();
392385 }
393386 }
394387
388+ private static class ConnectionObtainedResult {
389+ private final ProxyOptions proxyOptions ;
390+ private final HttpClientStream stream ;
391+ public ConnectionObtainedResult (ProxyOptions proxyOptions , HttpClientStream stream ) {
392+ this .proxyOptions = proxyOptions ;
393+ this .stream = stream ;
394+ }
395+ }
396+
395397 Future <HttpClientRequest > createRequest (HttpClientConnection conn , ContextInternal context ) {
396398 return conn .createStream (context ).map (this ::createRequest );
397399 }
0 commit comments