3535import org .asynchttpclient .ListenableFuture ;
3636import org .asynchttpclient .Realm ;
3737import org .asynchttpclient .Request ;
38- import org .asynchttpclient .channel .pool .ConnectionPoolPartitioning ;
3938import org .asynchttpclient .filter .FilterContext ;
4039import org .asynchttpclient .filter .FilterException ;
4140import org .asynchttpclient .filter .IOExceptionFilter ;
@@ -92,24 +91,22 @@ public <T> ListenableFuture<T> sendRequest(final Request request,//
9291 if (closed .get ())
9392 throw new IOException ("Closed" );
9493
95- Uri uri = request .getUri ();
96-
97- validateWebSocketRequest (request , uri , asyncHandler );
94+ validateWebSocketRequest (request , asyncHandler );
9895
9996 ProxyServer proxyServer = getProxyServer (config , request );
10097 boolean resultOfAConnect = future != null && future .getNettyRequest () != null
10198 && future .getNettyRequest ().getHttpRequest ().getMethod () == HttpMethod .CONNECT ;
10299 boolean useProxy = proxyServer != null && !resultOfAConnect ;
103100
104- if (useProxy && useProxyConnect (uri ))
101+ if (useProxy && useProxyConnect (request . getUri () ))
105102 // SSL proxy, have to handle CONNECT
106103 if (future != null && future .isConnectAllowed ())
107104 // CONNECT forced
108- return sendRequestWithCertainForceConnect (request , asyncHandler , future , reclaimCache , uri , proxyServer , true , true );
105+ return sendRequestWithCertainForceConnect (request , asyncHandler , future , reclaimCache , proxyServer , true , true );
109106 else
110- return sendRequestThroughSslProxy (request , asyncHandler , future , reclaimCache , uri , proxyServer );
107+ return sendRequestThroughSslProxy (request , asyncHandler , future , reclaimCache , proxyServer );
111108 else
112- return sendRequestWithCertainForceConnect (request , asyncHandler , future , reclaimCache , uri , proxyServer , useProxy , false );
109+ return sendRequestWithCertainForceConnect (request , asyncHandler , future , reclaimCache , proxyServer , useProxy , false );
113110 }
114111
115112 /**
@@ -123,18 +120,17 @@ private <T> ListenableFuture<T> sendRequestWithCertainForceConnect(//
123120 AsyncHandler <T > asyncHandler ,//
124121 NettyResponseFuture <T > future ,//
125122 boolean reclaimCache ,//
126- Uri uri ,//
127123 ProxyServer proxyServer ,//
128124 boolean useProxy ,//
129125 boolean forceConnect ) throws IOException {
130- NettyResponseFuture <T > newFuture = newNettyRequestAndResponseFuture (request , asyncHandler , future , uri , proxyServer , forceConnect );
126+ NettyResponseFuture <T > newFuture = newNettyRequestAndResponseFuture (request , asyncHandler , future , proxyServer , forceConnect );
131127
132- Channel channel = getCachedChannel (future , uri , request . getConnectionPoolPartitioning () , proxyServer , asyncHandler );
128+ Channel channel = getCachedChannel (future , request , proxyServer , asyncHandler );
133129
134130 if (Channels .isChannelValid (channel ))
135- return sendRequestWithCachedChannel (request , uri , proxyServer , newFuture , asyncHandler , channel );
131+ return sendRequestWithCachedChannel (request , proxyServer , newFuture , asyncHandler , channel );
136132 else
137- return sendRequestWithNewChannel (request , uri , proxyServer , useProxy , newFuture , asyncHandler , reclaimCache );
133+ return sendRequestWithNewChannel (request , proxyServer , useProxy , newFuture , asyncHandler , reclaimCache );
138134 }
139135
140136 /**
@@ -148,52 +144,51 @@ private <T> ListenableFuture<T> sendRequestThroughSslProxy(//
148144 AsyncHandler <T > asyncHandler ,//
149145 NettyResponseFuture <T > future ,//
150146 boolean reclaimCache ,//
151- Uri uri ,//
152147 ProxyServer proxyServer ) throws IOException {
153148
154149 NettyResponseFuture <T > newFuture = null ;
155150 for (int i = 0 ; i < 3 ; i ++) {
156- Channel channel = getCachedChannel (future , uri , request . getConnectionPoolPartitioning () , proxyServer , asyncHandler );
151+ Channel channel = getCachedChannel (future , request , proxyServer , asyncHandler );
157152 if (Channels .isChannelValid (channel ))
158153 if (newFuture == null )
159- newFuture = newNettyRequestAndResponseFuture (request , asyncHandler , future , uri , proxyServer , false );
154+ newFuture = newNettyRequestAndResponseFuture (request , asyncHandler , future , proxyServer , false );
160155
161156 if (Channels .isChannelValid (channel ))
162157 // if the channel is still active, we can use it, otherwise try gain
163- return sendRequestWithCachedChannel (request , uri , proxyServer , newFuture , asyncHandler , channel );
158+ return sendRequestWithCachedChannel (request , proxyServer , newFuture , asyncHandler , channel );
164159 else
165160 // pool is empty
166161 break ;
167162 }
168163
169- newFuture = newNettyRequestAndResponseFuture (request , asyncHandler , future , uri , proxyServer , true );
170- return sendRequestWithNewChannel (request , uri , proxyServer , true , newFuture , asyncHandler , reclaimCache );
164+ newFuture = newNettyRequestAndResponseFuture (request , asyncHandler , future , proxyServer , true );
165+ return sendRequestWithNewChannel (request , proxyServer , true , newFuture , asyncHandler , reclaimCache );
171166 }
172167
173168 private <T > NettyResponseFuture <T > newNettyRequestAndResponseFuture (final Request request , final AsyncHandler <T > asyncHandler ,
174- NettyResponseFuture <T > originalFuture , Uri uri , ProxyServer proxy , boolean forceConnect ) throws IOException {
169+ NettyResponseFuture <T > originalFuture , ProxyServer proxy , boolean forceConnect ) throws IOException {
175170
176- NettyRequest nettyRequest = requestFactory .newNettyRequest (request , uri , forceConnect , proxy );
171+ NettyRequest nettyRequest = requestFactory .newNettyRequest (request , forceConnect , proxy );
177172
178173 if (originalFuture == null ) {
179- return newNettyResponseFuture (uri , request , asyncHandler , nettyRequest , proxy );
174+ return newNettyResponseFuture (request , asyncHandler , nettyRequest , proxy );
180175 } else {
181176 originalFuture .setNettyRequest (nettyRequest );
182177 originalFuture .setRequest (request );
183178 return originalFuture ;
184179 }
185180 }
186181
187- private Channel getCachedChannel (NettyResponseFuture <?> future , Uri uri , ConnectionPoolPartitioning partitioning ,
182+ private Channel getCachedChannel (NettyResponseFuture <?> future , Request request ,
188183 ProxyServer proxyServer , AsyncHandler <?> asyncHandler ) {
189184
190185 if (future != null && future .reuseChannel () && Channels .isChannelValid (future .channel ()))
191186 return future .channel ();
192187 else
193- return pollAndVerifyCachedChannel (uri , proxyServer , partitioning , asyncHandler );
188+ return pollAndVerifyCachedChannel (request , proxyServer , asyncHandler );
194189 }
195190
196- private <T > ListenableFuture <T > sendRequestWithCachedChannel (Request request , Uri uri , ProxyServer proxy ,
191+ private <T > ListenableFuture <T > sendRequestWithCachedChannel (Request request , ProxyServer proxy ,
197192 NettyResponseFuture <T > future , AsyncHandler <T > asyncHandler , Channel channel ) throws IOException {
198193
199194 if (asyncHandler instanceof AsyncHandlerExtensions )
@@ -242,20 +237,19 @@ private <T> ListenableFuture<T> sendRequestWithCachedChannel(Request request, Ur
242237
243238 private <T > ListenableFuture <T > sendRequestWithNewChannel (//
244239 Request request ,//
245- Uri uri ,//
246240 ProxyServer proxy ,//
247241 boolean useProxy ,//
248242 NettyResponseFuture <T > future ,//
249243 AsyncHandler <T > asyncHandler ,//
250244 boolean reclaimCache ) throws IOException {
251245
252- boolean useSSl = isSecure (uri ) && !useProxy ;
246+ boolean useSSl = isSecure (request . getUri () ) && !useProxy ;
253247
254248 // some headers are only set when performing the first request
255249 HttpHeaders headers = future .getNettyRequest ().getHttpRequest ().headers ();
256250 Realm realm = request .getRealm () != null ? request .getRealm () : config .getRealm ();
257251 boolean connect = future .getNettyRequest ().getHttpRequest ().getMethod () == HttpMethod .CONNECT ;
258- requestFactory .addAuthorizationHeader (headers , requestFactory .firstRequestOnlyAuthorizationHeader (request , uri , proxy , realm ));
252+ requestFactory .addAuthorizationHeader (headers , requestFactory .firstRequestOnlyAuthorizationHeader (request , proxy , realm ));
259253 requestFactory .setProxyAuthorizationHeader (headers , requestFactory .firstRequestOnlyProxyAuthorizationHeader (request , proxy , connect ));
260254
261255 // Do not throw an exception when we need an extra connection for a
@@ -276,7 +270,7 @@ private <T> ListenableFuture<T> sendRequestWithNewChannel(//
276270 if (asyncHandler instanceof AsyncHandlerExtensions )
277271 AsyncHandlerExtensions .class .cast (asyncHandler ).onConnectionOpen ();
278272
279- ChannelFuture channelFuture = connect (request , uri , proxy , useProxy , bootstrap , asyncHandler );
273+ ChannelFuture channelFuture = connect (request , proxy , useProxy , bootstrap , asyncHandler );
280274 channelFuture .addListener (new NettyConnectListener <T >(future , this , channelManager , channelPreempted , partitionKey ));
281275
282276 } catch (Throwable t ) {
@@ -289,11 +283,10 @@ private <T> ListenableFuture<T> sendRequestWithNewChannel(//
289283 return future ;
290284 }
291285
292- private <T > NettyResponseFuture <T > newNettyResponseFuture (Uri uri , Request request , AsyncHandler <T > asyncHandler ,
286+ private <T > NettyResponseFuture <T > newNettyResponseFuture (Request request , AsyncHandler <T > asyncHandler ,
293287 NettyRequest nettyRequest , ProxyServer proxyServer ) {
294288
295289 NettyResponseFuture <T > future = new NettyResponseFuture <>(//
296- uri ,//
297290 request ,//
298291 asyncHandler ,//
299292 nettyRequest ,//
@@ -343,9 +336,10 @@ public <T> void writeRequest(NettyResponseFuture<T> future, Channel channel) {
343336 }
344337 }
345338
346- private InetSocketAddress remoteAddress (Request request , Uri uri , ProxyServer proxy , boolean useProxy ) throws UnknownHostException {
339+ private InetSocketAddress remoteAddress (Request request , ProxyServer proxy , boolean useProxy ) throws UnknownHostException {
347340
348341 InetAddress address ;
342+ Uri uri = request .getUri ();
349343 int port = getDefaultPort (uri );
350344
351345 if (request .getInetAddress () != null ) {
@@ -362,8 +356,8 @@ private InetSocketAddress remoteAddress(Request request, Uri uri, ProxyServer pr
362356 return new InetSocketAddress (address , port );
363357 }
364358
365- private ChannelFuture connect (Request request , Uri uri , ProxyServer proxy , boolean useProxy , ClientBootstrap bootstrap , AsyncHandler <?> asyncHandler ) throws UnknownHostException {
366- InetSocketAddress remoteAddress = remoteAddress (request , uri , proxy , useProxy );
359+ private ChannelFuture connect (Request request , ProxyServer proxy , boolean useProxy , ClientBootstrap bootstrap , AsyncHandler <?> asyncHandler ) throws UnknownHostException {
360+ InetSocketAddress remoteAddress = remoteAddress (request , proxy , useProxy );
367361
368362 if (asyncHandler instanceof AsyncHandlerExtensions )
369363 AsyncHandlerExtensions .class .cast (asyncHandler ).onDnsResolved (remoteAddress .getAddress ());
@@ -492,23 +486,26 @@ public <T> void sendNextRequest(Request request, NettyResponseFuture<T> future)
492486 sendRequest (request , future .getAsyncHandler (), future , true );
493487 }
494488
495- private void validateWebSocketRequest (Request request , Uri uri , AsyncHandler <?> asyncHandler ) {
489+ private void validateWebSocketRequest (Request request , AsyncHandler <?> asyncHandler ) {
490+ Uri uri = request .getUri ();
491+ boolean isWs = uri .getScheme ().startsWith (WS );
496492 if (asyncHandler instanceof WebSocketUpgradeHandler ) {
497- if (!uri . getScheme (). startsWith ( WS ) )
493+ if (!isWs )
498494 throw new IllegalArgumentException ("WebSocketUpgradeHandler but scheme isn't ws or wss: " + uri .getScheme ());
499495 else if (!request .getMethod ().equals (HttpMethod .GET .getName ()))
500496 throw new IllegalArgumentException ("WebSocketUpgradeHandler but method isn't GET: " + request .getMethod ());
501- } else if (uri . getScheme (). startsWith ( WS ) ) {
497+ } else if (isWs ) {
502498 throw new IllegalArgumentException ("No WebSocketUpgradeHandler but scheme is " + uri .getScheme ());
503499 }
504500 }
505501
506- public Channel pollAndVerifyCachedChannel (Uri uri , ProxyServer proxy , ConnectionPoolPartitioning connectionPoolPartitioning , AsyncHandler <?> asyncHandler ) {
502+ public Channel pollAndVerifyCachedChannel (Request request , ProxyServer proxy , AsyncHandler <?> asyncHandler ) {
507503
508504 if (asyncHandler instanceof AsyncHandlerExtensions )
509505 AsyncHandlerExtensions .class .cast (asyncHandler ).onConnectionPool ();
510506
511- final Channel channel = channelManager .poll (uri , proxy , connectionPoolPartitioning );
507+ Uri uri = request .getUri ();
508+ final Channel channel = channelManager .poll (uri , proxy , request .getConnectionPoolPartitioning ());
512509
513510 if (channel != null ) {
514511 LOGGER .debug ("Using cached Channel {}\n for uri {}\n " , channel , uri );
0 commit comments