69
69
public class ChannelManager {
70
70
71
71
private static final Logger LOGGER = LoggerFactory .getLogger (ChannelManager .class );
72
+ public static final String PINNED_ENTRY = "entry" ;
72
73
public static final String HTTP_CLIENT_CODEC = "http" ;
73
74
public static final String SSL_HANDLER = "ssl" ;
74
75
public static final String DEFLATER_HANDLER = "deflater" ;
@@ -232,7 +233,7 @@ private Class<? extends Channel> getEpollSocketChannelClass() {
232
233
throw new IllegalArgumentException (e );
233
234
}
234
235
}
235
-
236
+
236
237
public void configureBootstraps (NettyRequestSender requestSender ) {
237
238
238
239
HttpProtocol httpProtocol = new HttpProtocol (this , config , requestSender );
@@ -241,10 +242,13 @@ public void configureBootstraps(NettyRequestSender requestSender) {
241
242
WebSocketProtocol wsProtocol = new WebSocketProtocol (this , config , requestSender );
242
243
wsHandler = new AsyncHttpClientHandler (config , this , requestSender , wsProtocol );
243
244
245
+ final NoopHandler pinnedEntry = new NoopHandler ();
246
+
244
247
httpBootstrap .handler (new ChannelInitializer <Channel >() {
245
248
@ Override
246
249
protected void initChannel (Channel ch ) throws Exception {
247
250
ch .pipeline ()//
251
+ .addLast (PINNED_ENTRY , pinnedEntry )//
248
252
.addLast (HTTP_CLIENT_CODEC , newHttpClientCodec ())//
249
253
.addLast (INFLATER_HANDLER , newHttpContentDecompressor ())//
250
254
.addLast (CHUNKED_WRITER_HANDLER , new ChunkedWriteHandler ())//
@@ -261,6 +265,7 @@ protected void initChannel(Channel ch) throws Exception {
261
265
@ Override
262
266
protected void initChannel (Channel ch ) throws Exception {
263
267
ch .pipeline ()//
268
+ .addLast (PINNED_ENTRY , pinnedEntry )//
264
269
.addLast (HTTP_CLIENT_CODEC , newHttpClientCodec ())//
265
270
.addLast (AHC_WS_HANDLER , wsHandler );
266
271
@@ -411,12 +416,12 @@ public void upgradeProtocol(ChannelPipeline pipeline, Uri requestUri) throws SSL
411
416
if (isSslHandlerConfigured (pipeline )) {
412
417
pipeline .addAfter (SSL_HANDLER , HTTP_CLIENT_CODEC , newHttpClientCodec ());
413
418
} else {
414
- pipeline .addFirst ( HTTP_CLIENT_CODEC , newHttpClientCodec ());
415
- pipeline .addFirst ( SSL_HANDLER , createSslHandler (requestUri .getHost (), requestUri .getExplicitPort ()));
419
+ pipeline .addAfter ( PINNED_ENTRY , HTTP_CLIENT_CODEC , newHttpClientCodec ());
420
+ pipeline .addAfter ( PINNED_ENTRY , SSL_HANDLER , createSslHandler (requestUri .getHost (), requestUri .getExplicitPort ()));
416
421
}
417
422
418
423
else
419
- pipeline .addFirst ( HTTP_CLIENT_CODEC , newHttpClientCodec ());
424
+ pipeline .addAfter ( PINNED_ENTRY , HTTP_CLIENT_CODEC , newHttpClientCodec ());
420
425
421
426
if (requestUri .isWebSocket ()) {
422
427
pipeline .addAfter (AHC_HTTP_HANDLER , AHC_WS_HANDLER , wsHandler );
0 commit comments