@@ -454,12 +454,15 @@ public Response get(long timeout, TimeUnit unit) throws InterruptedException, Ex
454
454
}
455
455
}
456
456
457
- private void connectThenPerformRequest (Bootstrap b , String url , final ResponseFuture responseFuture , final RequestPerformer requestPerformer ) throws InterruptedException {
457
+ private Channel connect (Bootstrap b , String url , final ResponseFuture responseFuture ) throws InterruptedException {
458
458
459
459
URI uri = URI .create (url );
460
460
461
- // FIXME handle connect timeout exception
462
- b .connect (uri .getHost (), uri .getPort ()).sync ().addListener (new GenericFutureListener <ChannelFuture >() {
461
+ ChannelFuture f = b .connect (uri .getHost (), uri .getPort ()).sync ();
462
+
463
+ MyChannelInboundHandlerAdapter .responseFutureAttr (f .channel ().pipeline ()).set (responseFuture );
464
+
465
+ f .addListener (new GenericFutureListener <ChannelFuture >() {
463
466
@ Override
464
467
public void operationComplete (ChannelFuture future ) throws Exception {
465
468
LOGGER .info ("Connect future complete" );
@@ -485,54 +488,43 @@ public void operationComplete(io.netty.util.concurrent.Future<Channel> f) throws
485
488
}
486
489
487
490
LOGGER .error ("Handshake failed" , cause );
488
- responseFuture .set (f .cause ());
489
- } else {
490
- MyChannelInboundHandlerAdapter .responseFutureAttr (ch .pipeline ()).set (responseFuture );
491
- requestPerformer .performRequest (ch );
491
+ responseFuture .set (cause );
492
492
}
493
493
}
494
494
});
495
495
}
496
496
}
497
497
}
498
498
});
499
- }
500
-
501
- private static interface RequestPerformer {
502
499
503
- void performRequest ( Channel ch ) throws Exception ;
500
+ return f . channel () ;
504
501
}
505
502
506
503
private ResponseFuture post (Bootstrap b , String url , final String string ) throws InterruptedException {
507
504
508
505
final URI uri = URI .create (url );
509
506
final ResponseFuture responseFuture = new ResponseFuture ();
510
507
511
- RequestPerformer requestPerformer = new RequestPerformer () {
508
+ Channel ch = connect (b , url , responseFuture );
509
+
510
+ byte [] bodyBytes = string .getBytes (CharsetUtil .UTF_8 );
511
+ HttpRequest request = new DefaultFullHttpRequest (HttpVersion .HTTP_1_1 , HttpMethod .POST , uri .getPath (), Unpooled .wrappedBuffer (bodyBytes ));
512
+ request .headers ()/**/
513
+ .set (HttpHeaders .Names .CONTENT_TYPE , "text/html" )/**/
514
+ .set (HttpHeaders .Names .HOST , uri .getHost ())/**/
515
+ .set (HttpHeaders .Names .ACCEPT , "*/*" )/**/
516
+ .set (HttpHeaders .Names .CONTENT_LENGTH , bodyBytes .length );
517
+
518
+ ch .writeAndFlush (request ).addListener (new GenericFutureListener <ChannelFuture >() {
512
519
@ Override
513
- public void performRequest (Channel ch ) {
514
- byte [] bodyBytes = string .getBytes (CharsetUtil .UTF_8 );
515
- HttpRequest request = new DefaultFullHttpRequest (HttpVersion .HTTP_1_1 , HttpMethod .POST , uri .getPath (), Unpooled .wrappedBuffer (bodyBytes ));
516
- request .headers ()/**/
517
- .set (HttpHeaders .Names .CONTENT_TYPE , "text/html" )/**/
518
- .set (HttpHeaders .Names .HOST , uri .getHost ())/**/
519
- .set (HttpHeaders .Names .ACCEPT , "*/*" )/**/
520
- .set (HttpHeaders .Names .CONTENT_LENGTH , bodyBytes .length );
521
-
522
- ch .writeAndFlush (request ).addListener (new GenericFutureListener <ChannelFuture >() {
523
- @ Override
524
- public void operationComplete (ChannelFuture future ) throws Exception {
525
- if (!future .isSuccess ()) {
526
- ResponseFuture responseFuture = MyChannelInboundHandlerAdapter .responseFutureAttr (future .channel ().pipeline ()).getAndRemove ();
527
- responseFuture .set (future .cause ());
528
- MyChannelInboundHandlerAdapter .responseAttr (future .channel ().pipeline ()).remove ();
529
- }
530
- }
531
- });
520
+ public void operationComplete (ChannelFuture future ) throws Exception {
521
+ if (!future .isSuccess ()) {
522
+ ResponseFuture responseFuture = MyChannelInboundHandlerAdapter .responseFutureAttr (future .channel ().pipeline ()).getAndRemove ();
523
+ responseFuture .set (future .cause ());
524
+ MyChannelInboundHandlerAdapter .responseAttr (future .channel ().pipeline ()).remove ();
525
+ }
532
526
}
533
- };
534
-
535
- connectThenPerformRequest (b , url , responseFuture , requestPerformer );
527
+ });
536
528
537
529
return responseFuture ;
538
530
}
@@ -563,37 +555,32 @@ private ResponseFuture post(Bootstrap b, String url, final File file) throws Exc
563
555
final URI uri = URI .create (url );
564
556
final ResponseFuture responseFuture = new ResponseFuture ();
565
557
566
- RequestPerformer requestPerformer = new RequestPerformer () {
567
- @ Override
568
- public void performRequest (Channel ch ) throws Exception {
569
- HttpRequest request = new DefaultHttpRequest (HttpVersion .HTTP_1_1 , HttpMethod .POST , uri .getPath ());
570
- request .headers ()/**/
571
- .set (HttpHeaders .Names .CONTENT_TYPE , "text/html" )/**/
572
- .set (HttpHeaders .Names .HOST , uri .getHost ())/**/
573
- .set (HttpHeaders .Names .ACCEPT , "*/*" )/**/
574
- .set (HttpHeaders .Names .CONTENT_LENGTH , file .length ());
575
-
576
- ch .writeAndFlush (request );
577
- RandomAccessFile raf = new RandomAccessFile (file , "r" );
578
- ch .write (new ChunkedFile (raf , 0 , file .length (), 8 * 1024 ))/**/
579
- // FIXME DefaultFileRegion not working over HTTPS?
580
- // ch.write(new DefaultFileRegion(raf.getChannel(), 0, file.length()))/**/
581
- .addListener (new GenericFutureListener <ChannelFuture >() {
582
- @ Override
583
- public void operationComplete (ChannelFuture future ) throws Exception {
584
- if (!future .isSuccess ()) {
585
- ResponseFuture responseFuture = MyChannelInboundHandlerAdapter .responseFutureAttr (future .channel ().pipeline ()).getAndRemove ();
586
- responseFuture .set (future .cause ());
587
- MyChannelInboundHandlerAdapter .responseAttr (future .channel ().pipeline ()).remove ();
588
- }
589
- }
590
- });
591
-
592
- ch .writeAndFlush (LastHttpContent .EMPTY_LAST_CONTENT );
593
- }
594
- };
558
+ Channel ch = connect (b , url , responseFuture );
559
+
560
+ HttpRequest request = new DefaultHttpRequest (HttpVersion .HTTP_1_1 , HttpMethod .POST , uri .getPath ());
561
+ request .headers ()/**/
562
+ .set (HttpHeaders .Names .CONTENT_TYPE , "text/html" )/**/
563
+ .set (HttpHeaders .Names .HOST , uri .getHost ())/**/
564
+ .set (HttpHeaders .Names .ACCEPT , "*/*" )/**/
565
+ .set (HttpHeaders .Names .CONTENT_LENGTH , file .length ());
566
+
567
+ ch .writeAndFlush (request );
568
+ RandomAccessFile raf = new RandomAccessFile (file , "r" );
569
+ ch .write (new ChunkedFile (raf , 0 , file .length (), 8 * 1024 ))/**/
570
+ // FIXME DefaultFileRegion not working over HTTPS?
571
+ // ch.write(new DefaultFileRegion(raf.getChannel(), 0, file.length()))/**/
572
+ .addListener (new GenericFutureListener <ChannelFuture >() {
573
+ @ Override
574
+ public void operationComplete (ChannelFuture future ) throws Exception {
575
+ if (!future .isSuccess ()) {
576
+ ResponseFuture responseFuture = MyChannelInboundHandlerAdapter .responseFutureAttr (future .channel ().pipeline ()).getAndRemove ();
577
+ responseFuture .set (future .cause ());
578
+ MyChannelInboundHandlerAdapter .responseAttr (future .channel ().pipeline ()).remove ();
579
+ }
580
+ }
581
+ });
595
582
596
- connectThenPerformRequest ( b , url , responseFuture , requestPerformer );
583
+ ch . writeAndFlush ( LastHttpContent . EMPTY_LAST_CONTENT );
597
584
598
585
return responseFuture ;
599
586
}
0 commit comments