11package com .redhat .hacbs .domainproxy .server ;
22
3- import static com .redhat .hacbs .domainproxy .common .CommonIOUtil .TIMEOUT_MS ;
4-
53import java .util .Set ;
64import java .util .concurrent .atomic .AtomicInteger ;
75
@@ -50,15 +48,8 @@ public class ExternalProxyVerticle extends AbstractVerticle {
5048 private AtomicInteger counter = new AtomicInteger (0 );
5149
5250 public ExternalProxyVerticle (final Vertx vertx ) {
53- webClient = WebClient .create (vertx , new WebClientOptions ()
54- .setMaxPoolSize (50 )
55- .setKeepAlive (true )
56- .setIdleTimeout (60 )
57- .setConnectTimeout (TIMEOUT_MS ));
58- netClient = vertx .createNetClient (new NetClientOptions ()
59- .setReuseAddress (true )
60- .setIdleTimeout (60 )
61- .setConnectTimeout (TIMEOUT_MS ));
51+ webClient = WebClient .create (vertx , new WebClientOptions ());
52+ netClient = vertx .createNetClient (new NetClientOptions ());
6253 httpServer = vertx .createHttpServer ();
6354 }
6455
@@ -90,27 +81,21 @@ private void handleGetRequest(final HttpServerRequest request) {
9081 if (isTargetWhitelisted (request .authority ().host (), request )) {
9182 Log .infof ("Target URI %s" , request .uri ());
9283 final long startTime = System .currentTimeMillis ();
93- vertx .executeBlocking (promise -> {
94- webClient .getAbs (request .uri ()).send (asyncResult -> {
95- Log .infof ("Request %d took %d ms" , requestNo , System .currentTimeMillis () - startTime );
96- if (asyncResult .succeeded ()) {
97- final HttpResponse <Buffer > response = asyncResult .result ();
98- if (response .statusCode () != HttpResponseStatus .OK .code ()) {
99- Log .errorf ("Response code: %d, message: %s, body: %s" , response .statusCode (),
100- response .statusMessage (),
101- response .bodyAsString ());
102- }
103- request .response ()
104- .setStatusCode (response .statusCode ())
105- .headers ().addAll (response .headers ());
106- request .response ().end (response .body ());
107- } else {
108- handleErrorResponse (request , asyncResult .cause (), "Failed to get response" );
84+ webClient .getAbs (request .uri ()).send (asyncResult -> {
85+ Log .infof ("Request %d took %d ms" , requestNo , System .currentTimeMillis () - startTime );
86+ if (asyncResult .succeeded ()) {
87+ final HttpResponse <Buffer > response = asyncResult .result ();
88+ if (response .statusCode () != HttpResponseStatus .OK .code ()) {
89+ Log .errorf ("Response code: %d, message: %s, body: %s" , response .statusCode (),
90+ response .statusMessage (),
91+ response .bodyAsString ());
10992 }
110- });
111- }, res -> {
112- if (res .failed ()) {
113- Log .errorf (res .cause (), "Failed to process GET request asynchronously" );
93+ request .response ()
94+ .setStatusCode (response .statusCode ())
95+ .headers ().addAll (response .headers ());
96+ request .response ().end (response .body ());
97+ } else {
98+ handleErrorResponse (request , asyncResult .cause (), "Failed to get response" );
11499 }
115100 });
116101 }
@@ -121,36 +106,27 @@ private void handleConnectRequest(final HttpServerRequest request) {
121106 final int requestNo = counter .incrementAndGet ();
122107 Log .infof ("Request no: %d" , requestNo );
123108 final String targetHost = request .authority ().host ();
109+ final int targetPort = request .authority ().port () == -1 ? HTTPS_PORT : request .authority ().port ();
124110 if (isTargetWhitelisted (targetHost , request )) {
125111 Log .infof ("Target URI %s" , request .uri ());
126112 final long startTime = System .currentTimeMillis ();
127- vertx .executeBlocking (promise -> {
128- int targetPort = request .authority ().port ();
129- if (targetPort == -1 ) {
130- targetPort = HTTPS_PORT ;
131- }
132- netClient .connect (targetPort , targetHost , targetConnect -> {
133- Log .infof ("Request %d took %d ms" , requestNo , System .currentTimeMillis () - startTime );
134- if (targetConnect .succeeded ()) {
135- final NetSocket targetSocket = targetConnect .result ();
136- request .toNetSocket ().onComplete (sourceConnect -> {
137- if (sourceConnect .succeeded ()) {
138- final NetSocket sourceSocket = sourceConnect .result ();
139- sourceSocket .handler (targetSocket ::write );
140- targetSocket .handler (sourceSocket ::write );
141- sourceSocket .closeHandler (v -> targetSocket .close ());
142- targetSocket .closeHandler (v -> sourceSocket .close ());
143- } else {
144- handleErrorResponse (request , sourceConnect .cause (), "Failed to connect to source" );
145- }
146- });
147- } else {
148- handleErrorResponse (request , targetConnect .cause (), "Failed to connect to target" );
149- }
150- });
151- }, res -> {
152- if (res .failed ()) {
153- Log .errorf (res .cause (), "Failed to process CONNECT request asynchronously" );
113+ netClient .connect (targetPort , targetHost , targetConnect -> {
114+ Log .infof ("Request %d took %d ms" , requestNo , System .currentTimeMillis () - startTime );
115+ if (targetConnect .succeeded ()) {
116+ final NetSocket targetSocket = targetConnect .result ();
117+ request .toNetSocket ().onComplete (sourceConnect -> {
118+ if (sourceConnect .succeeded ()) {
119+ final NetSocket sourceSocket = sourceConnect .result ();
120+ sourceSocket .handler (targetSocket ::write );
121+ targetSocket .handler (sourceSocket ::write );
122+ sourceSocket .closeHandler (v -> targetSocket .close ());
123+ targetSocket .closeHandler (v -> sourceSocket .close ());
124+ } else {
125+ handleErrorResponse (request , sourceConnect .cause (), "Failed to connect to source" );
126+ }
127+ });
128+ } else {
129+ handleErrorResponse (request , targetConnect .cause (), "Failed to connect to target" );
154130 }
155131 });
156132 }
@@ -184,7 +160,7 @@ public void stop() {
184160 netClient .close ();
185161 httpServer .close (ar -> {
186162 if (ar .succeeded ()) {
187- Log .info ("Server shut down successfully. " );
163+ Log .info ("Server shut down successfully" );
188164 } else {
189165 Log .errorf (ar .cause (), "Server shutdown failed" );
190166 }
0 commit comments