@@ -179,7 +179,8 @@ private boolean exitAfterHandling401(//
179
179
final Request request ,//
180
180
int statusCode ,//
181
181
Realm realm ,//
182
- ProxyServer proxyServer ) {
182
+ ProxyServer proxyServer ,//
183
+ HttpRequest httpRequest ) {
183
184
184
185
if (statusCode != UNAUTHORIZED .code ())
185
186
return false ;
@@ -291,7 +292,7 @@ private boolean exitAfterHandling401(//
291
292
final Request nextRequest = new RequestBuilder (future .getCurrentRequest ()).setHeaders (requestHeaders ).build ();
292
293
293
294
logger .debug ("Sending authentication to {}" , request .getUri ());
294
- if (future .isKeepAlive () && !HttpHeaders .isTransferEncodingChunked (response )) {
295
+ if (future .isKeepAlive () && !HttpHeaders .isTransferEncodingChunked (httpRequest ) && ! HttpHeaders . isTransferEncodingChunked ( response )) {
295
296
future .setReuseChannel (true );
296
297
requestSender .drainChannelAndExecuteNextRequest (channel , future , nextRequest );
297
298
} else {
@@ -308,7 +309,8 @@ private boolean exitAfterHandling407(//
308
309
HttpResponse response ,//
309
310
Request request ,//
310
311
int statusCode ,//
311
- ProxyServer proxyServer ) {
312
+ ProxyServer proxyServer ,//
313
+ HttpRequest httpRequest ) {
312
314
313
315
if (statusCode != PROXY_AUTHENTICATION_REQUIRED .code ())
314
316
return false ;
@@ -425,7 +427,7 @@ private boolean exitAfterHandling407(//
425
427
final Request nextRequest = nextRequestBuilder .build ();
426
428
427
429
logger .debug ("Sending proxy authentication to {}" , request .getUri ());
428
- if (future .isKeepAlive () && !HttpHeaders .isTransferEncodingChunked (response )) {
430
+ if (future .isKeepAlive () && !HttpHeaders .isTransferEncodingChunked (httpRequest ) && ! HttpHeaders . isTransferEncodingChunked ( response )) {
429
431
future .setConnectAllowed (true );
430
432
future .setReuseChannel (true );
431
433
requestSender .drainChannelAndExecuteNextRequest (channel , future , nextRequest );
@@ -464,32 +466,32 @@ private boolean exitAfterHandlingConnect(//
464
466
return false ;
465
467
}
466
468
467
- private boolean exitAfterHandlingStatus (Channel channel , NettyResponseFuture <?> future , HttpResponse response , AsyncHandler <?> handler , NettyResponseStatus status )
469
+ private boolean exitAfterHandlingStatus (Channel channel , NettyResponseFuture <?> future , HttpResponse response , AsyncHandler <?> handler , NettyResponseStatus status , HttpRequest httpRequest )
468
470
throws IOException , Exception {
469
471
if (!future .getAndSetStatusReceived (true ) && handler .onStatusReceived (status ) != State .CONTINUE ) {
470
- finishUpdate (future , channel , HttpHeaders .isTransferEncodingChunked (response ));
472
+ finishUpdate (future , channel , HttpHeaders .isTransferEncodingChunked (httpRequest ) || HttpHeaders . isTransferEncodingChunked ( response ));
471
473
return true ;
472
474
}
473
475
return false ;
474
476
}
475
477
476
- private boolean exitAfterHandlingHeaders (Channel channel , NettyResponseFuture <?> future , HttpResponse response , AsyncHandler <?> handler , NettyResponseHeaders responseHeaders )
478
+ private boolean exitAfterHandlingHeaders (Channel channel , NettyResponseFuture <?> future , HttpResponse response , AsyncHandler <?> handler , NettyResponseHeaders responseHeaders , HttpRequest httpRequest )
477
479
throws IOException , Exception {
478
480
if (!response .headers ().isEmpty () && handler .onHeadersReceived (responseHeaders ) != State .CONTINUE ) {
479
- finishUpdate (future , channel , HttpHeaders .isTransferEncodingChunked (response ));
481
+ finishUpdate (future , channel , HttpHeaders .isTransferEncodingChunked (httpRequest ) || HttpHeaders . isTransferEncodingChunked ( response ));
480
482
return true ;
481
483
}
482
484
return false ;
483
485
}
484
486
485
- private boolean exitAfterHandlingReactiveStreams (Channel channel , NettyResponseFuture <?> future , HttpResponse response , AsyncHandler <?> handler ) throws IOException {
487
+ private boolean exitAfterHandlingReactiveStreams (Channel channel , NettyResponseFuture <?> future , HttpResponse response , AsyncHandler <?> handler , HttpRequest httpRequest ) throws IOException {
486
488
if (handler instanceof StreamedAsyncHandler ) {
487
489
StreamedAsyncHandler <?> streamedAsyncHandler = (StreamedAsyncHandler <?>) handler ;
488
490
StreamedResponsePublisher publisher = new StreamedResponsePublisher (channel .eventLoop (), channelManager , future , channel );
489
491
channel .pipeline ().addLast (channel .eventLoop (), "streamedAsyncHandler" , publisher );
490
492
Channels .setAttribute (channel , publisher );
491
493
if (streamedAsyncHandler .onStream (publisher ) != State .CONTINUE ) {
492
- finishUpdate (future , channel , HttpHeaders .isTransferEncodingChunked (response ));
494
+ finishUpdate (future , channel , HttpHeaders .isTransferEncodingChunked (httpRequest ) || HttpHeaders . isTransferEncodingChunked ( response ));
493
495
return true ;
494
496
}
495
497
}
@@ -515,13 +517,14 @@ private boolean handleHttpResponse(final HttpResponse response, final Channel ch
515
517
NettyResponseHeaders responseHeaders = new NettyResponseHeaders (response .headers ());
516
518
517
519
return exitAfterProcessingFilters (channel , future , handler , status , responseHeaders ) || //
518
- exitAfterHandling401 (channel , future , response , request , statusCode , realm , proxyServer ) || //
519
- exitAfterHandling407 (channel , future , response , request , statusCode , proxyServer ) || //
520
+ exitAfterHandling401 (channel , future , response , request , statusCode , realm , proxyServer , httpRequest ) || //
521
+ exitAfterHandling407 (channel , future , response , request , statusCode , proxyServer , httpRequest ) || //
520
522
exitAfterHandling100 (channel , future , statusCode ) || //
521
523
exitAfterHandlingRedirect (channel , future , response , request , statusCode , realm ) || //
522
524
exitAfterHandlingConnect (channel , future , request , proxyServer , statusCode , httpRequest ) || //
523
- exitAfterHandlingStatus (channel , future , response , handler , status ) || //
524
- exitAfterHandlingHeaders (channel , future , response , handler , responseHeaders ) || exitAfterHandlingReactiveStreams (channel , future , response , handler );
525
+ exitAfterHandlingStatus (channel , future , response , handler , status , httpRequest ) || //
526
+ exitAfterHandlingHeaders (channel , future , response , handler , responseHeaders , httpRequest ) || //
527
+ exitAfterHandlingReactiveStreams (channel , future , response , handler , httpRequest );
525
528
}
526
529
527
530
private void handleChunk (HttpContent chunk ,//
0 commit comments