@@ -113,17 +113,15 @@ public <T> ListenableFuture<T> sendRequest(final Request request, //
113
113
// Proxy with HTTPS or WebSocket: CONNECT for sure
114
114
if (future != null && future .isConnectAllowed ()) {
115
115
// Perform CONNECT
116
- return sendRequestWithCertainForceConnect (request , asyncHandler , future , performingNextRequest ,
117
- proxyServer , true );
116
+ return sendRequestWithCertainForceConnect (request , asyncHandler , future , proxyServer , true );
118
117
} else {
119
118
// CONNECT will depend if we can pool or connection or if we have to open a new
120
119
// one
121
- return sendRequestThroughSslProxy (request , asyncHandler , future , performingNextRequest , proxyServer );
120
+ return sendRequestThroughSslProxy (request , asyncHandler , future , proxyServer );
122
121
}
123
122
} else {
124
123
// no CONNECT for sure
125
- return sendRequestWithCertainForceConnect (request , asyncHandler , future , performingNextRequest , proxyServer ,
126
- false );
124
+ return sendRequestWithCertainForceConnect (request , asyncHandler , future , proxyServer , false );
127
125
}
128
126
}
129
127
@@ -143,57 +141,58 @@ private <T> ListenableFuture<T> sendRequestWithCertainForceConnect(//
143
141
Request request , //
144
142
AsyncHandler <T > asyncHandler , //
145
143
NettyResponseFuture <T > future , //
146
- boolean performingNextRequest , //
147
144
ProxyServer proxyServer , //
148
- boolean forceConnect ) {
145
+ boolean performConnectRequest ) {
149
146
150
147
NettyResponseFuture <T > newFuture = newNettyRequestAndResponseFuture (request , asyncHandler , future , proxyServer ,
151
- forceConnect );
148
+ performConnectRequest );
152
149
153
150
Channel channel = getOpenChannel (future , request , proxyServer , asyncHandler );
154
151
155
- if (Channels .isChannelActive (channel ))
156
- return sendRequestWithOpenChannel (request , proxyServer , newFuture , asyncHandler , channel );
157
- else
158
- return sendRequestWithNewChannel (request , proxyServer , newFuture , asyncHandler , performingNextRequest );
152
+ return Channels .isChannelActive (channel )
153
+ ? sendRequestWithOpenChannel (request , proxyServer , newFuture , asyncHandler , channel )
154
+ : sendRequestWithNewChannel (request , proxyServer , newFuture , asyncHandler );
159
155
}
160
156
161
157
/**
162
158
* Using CONNECT depends on wither we can fetch a valid channel or not Loop
163
159
* until we get a valid channel from the pool and it's still valid once the
164
160
* request is built @
165
161
*/
166
- @ SuppressWarnings ("unused" )
167
162
private <T > ListenableFuture <T > sendRequestThroughSslProxy (//
168
163
Request request , //
169
164
AsyncHandler <T > asyncHandler , //
170
165
NettyResponseFuture <T > future , //
171
- boolean performingNextRequest , //
172
166
ProxyServer proxyServer ) {
173
167
174
168
NettyResponseFuture <T > newFuture = null ;
175
169
for (int i = 0 ; i < 3 ; i ++) {
176
170
Channel channel = getOpenChannel (future , request , proxyServer , asyncHandler );
177
- if (Channels .isChannelActive (channel ))
178
- if (newFuture == null )
179
- newFuture = newNettyRequestAndResponseFuture (request , asyncHandler , future , proxyServer , false );
180
171
181
- if (Channels .isChannelActive (channel ))
182
- // if the channel is still active, we can use it, otherwise try
183
- // gain
184
- return sendRequestWithOpenChannel (request , proxyServer , newFuture , asyncHandler , channel );
185
- else
172
+ if (channel == null ) {
186
173
// pool is empty
187
174
break ;
175
+ }
176
+
177
+ if (newFuture == null ) {
178
+ newFuture = newNettyRequestAndResponseFuture (request , asyncHandler , future , proxyServer , false );
179
+ }
180
+
181
+ if (Channels .isChannelActive (channel )) {
182
+ // if the channel is still active, we can use it,
183
+ // otherwise, channel was closed by the time we computed the request, try again
184
+ return sendRequestWithOpenChannel (request , proxyServer , newFuture , asyncHandler , channel );
185
+ }
188
186
}
189
187
188
+ // couldn't poll an active channel
190
189
newFuture = newNettyRequestAndResponseFuture (request , asyncHandler , future , proxyServer , true );
191
- return sendRequestWithNewChannel (request , proxyServer , newFuture , asyncHandler , performingNextRequest );
190
+ return sendRequestWithNewChannel (request , proxyServer , newFuture , asyncHandler );
192
191
}
193
192
194
193
private <T > NettyResponseFuture <T > newNettyRequestAndResponseFuture (final Request request ,
195
194
final AsyncHandler <T > asyncHandler , NettyResponseFuture <T > originalFuture , ProxyServer proxy ,
196
- boolean forceConnect ) {
195
+ boolean performConnectRequest ) {
197
196
198
197
Realm realm = null ;
199
198
if (originalFuture != null ) {
@@ -212,7 +211,8 @@ private <T> NettyResponseFuture<T> newNettyRequestAndResponseFuture(final Reques
212
211
proxyRealm = proxy .getRealm ();
213
212
}
214
213
215
- NettyRequest nettyRequest = requestFactory .newNettyRequest (request , forceConnect , proxy , realm , proxyRealm );
214
+ NettyRequest nettyRequest = requestFactory .newNettyRequest (request , performConnectRequest , proxy , realm ,
215
+ proxyRealm );
216
216
217
217
if (originalFuture == null ) {
218
218
NettyResponseFuture <T > future = newNettyResponseFuture (request , asyncHandler , nettyRequest , proxy );
@@ -284,8 +284,7 @@ private <T> ListenableFuture<T> sendRequestWithNewChannel(//
284
284
Request request , //
285
285
ProxyServer proxy , //
286
286
NettyResponseFuture <T > future , //
287
- AsyncHandler <T > asyncHandler , //
288
- boolean performingNextRequest ) {
287
+ AsyncHandler <T > asyncHandler ) {
289
288
290
289
// some headers are only set when performing the first request
291
290
HttpHeaders headers = future .getNettyRequest ().getHttpRequest ().headers ();
0 commit comments