Skip to content

Commit d9b8983

Browse files
committed
Add additional handler extension callbacks
Resolves AsyncHttpClient#732.
1 parent 0b77060 commit d9b8983

File tree

6 files changed

+33
-2
lines changed

6 files changed

+33
-2
lines changed

api/src/main/java/org/asynchttpclient/AsyncHandlerExtensions.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,4 +59,14 @@ public interface AsyncHandlerExtensions {
5959
* Notify the callback every time a request is being retried.
6060
*/
6161
void onRetry();
62+
63+
/**
64+
* Notify the callback after DNS resolution has completed.
65+
*/
66+
void onDnsResolved();
67+
68+
/**
69+
* Notify the callback when the SSL handshake performed to establish an HTTPS connection has been completed.
70+
*/
71+
void onSslHandshakeCompleted();
6272
}

api/src/test/java/org/asynchttpclient/async/util/EventCollectingHandler.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,4 +85,14 @@ public void onSendRequest(Object request) {
8585
public void onRetry() {
8686
firedEvents.add("Retry");
8787
}
88+
89+
@Override
90+
public void onDnsResolved() {
91+
firedEvents.add("DnsResolved");
92+
}
93+
94+
@Override
95+
public void onSslHandshakeCompleted() {
96+
firedEvents.add("SslHandshakeCompleted");
97+
}
8898
}

providers/netty/src/main/java/org/asynchttpclient/providers/netty/request/NettyConnectListener.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import javax.net.ssl.SSLEngine;
3030
import javax.net.ssl.SSLSession;
3131

32+
import org.asynchttpclient.AsyncHandler;
3233
import org.asynchttpclient.AsyncHandlerExtensions;
3334
import org.asynchttpclient.AsyncHttpClientConfig;
3435
import org.asynchttpclient.providers.netty.channel.ChannelManager;
@@ -106,6 +107,10 @@ public void operationComplete(Future<? super Channel> handshakeFuture) throws Ex
106107
LOGGER.debug("onFutureSuccess: session = {}, id = {}, isValid = {}, host = {}", session.toString(),
107108
Base64.encode(session.getId()), session.isValid(), host);
108109
if (hostnameVerifier.verify(host, session)) {
110+
final AsyncHandler<T> asyncHandler = future.getAsyncHandler();
111+
if (asyncHandler instanceof AsyncHandlerExtensions)
112+
AsyncHandlerExtensions.class.cast(asyncHandler).onSslHandshakeCompleted();
113+
109114
writeRequest(channel);
110115
} else {
111116
abortChannelPreemption(poolKey);

providers/netty/src/main/java/org/asynchttpclient/providers/netty/request/NettyRequestSender.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ private <T> ListenableFuture<T> sendRequestWithNewChannel(//
271271
if (asyncHandler instanceof AsyncHandlerExtensions)
272272
AsyncHandlerExtensions.class.cast(asyncHandler).onOpenConnection();
273273

274-
ChannelFuture channelFuture = connect(request, uri, proxy, useProxy, bootstrap);
274+
ChannelFuture channelFuture = connect(request, uri, proxy, useProxy, bootstrap, asyncHandler);
275275
channelFuture.addListener(new NettyConnectListener<T>(config, future, this, channelManager, channelPreempted, poolKey));
276276

277277
} catch (Throwable t) {
@@ -354,9 +354,12 @@ else if (!useProxy || avoidProxy(proxy, uri.getHost()))
354354
return new InetSocketAddress(proxy.getHost(), proxy.getPort());
355355
}
356356

357-
private ChannelFuture connect(Request request, Uri uri, ProxyServer proxy, boolean useProxy, Bootstrap bootstrap) {
357+
private ChannelFuture connect(Request request, Uri uri, ProxyServer proxy, boolean useProxy, Bootstrap bootstrap, AsyncHandler<?> asyncHandler) {
358358
InetSocketAddress remoteAddress = remoteAddress(request, uri, proxy, useProxy);
359359

360+
if (asyncHandler instanceof AsyncHandlerExtensions)
361+
AsyncHandlerExtensions.class.cast(asyncHandler).onDnsResolved();
362+
360363
if (request.getLocalAddress() != null)
361364
return bootstrap.connect(remoteAddress, new InetSocketAddress(request.getLocalAddress(), 0));
362365
else

providers/netty/src/test/java/org/asynchttpclient/providers/netty/NettyAsyncProviderBasicTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ public void testNewConnectionEventsFired() throws Exception {
5858
List<String> expectedEvents = Arrays.asList(
5959
"PoolConnection",
6060
"OpenConnection",
61+
"DnsResolved",
6162
"ConnectionOpen",
6263
"SendRequest",
6364
"HeaderWriteCompleted",

providers/netty/src/test/java/org/asynchttpclient/providers/netty/NettyBasicHttpsTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ public void testNormalEventsFired() throws InterruptedException, TimeoutExceptio
4040
List<String> expectedEvents = Arrays.asList(
4141
"PoolConnection",
4242
"OpenConnection",
43+
"DnsResolved",
44+
"SslHandshakeCompleted",
4345
"ConnectionOpen",
4446
"SendRequest",
4547
"HeaderWriteCompleted",

0 commit comments

Comments
 (0)