|
13 | 13 |
|
14 | 14 | package com.ning.http.client.providers.grizzly;
|
15 | 15 |
|
16 |
| -import static com.ning.http.client.providers.grizzly.GrizzlyAsyncHttpProviderConfig.Property.BUFFER_WEBSOCKET_FRAGMENTS; |
17 |
| -import static com.ning.http.client.providers.grizzly.GrizzlyAsyncHttpProviderConfig.Property.MAX_HTTP_PACKET_HEADER_SIZE; |
18 |
| -import static com.ning.http.client.providers.grizzly.GrizzlyAsyncHttpProviderConfig.Property.TRANSPORT_CUSTOMIZER; |
| 16 | +import com.ning.http.client.AsyncHandler; |
| 17 | +import com.ning.http.client.AsyncHandlerExtensions; |
| 18 | +import com.ning.http.client.AsyncHttpClient; |
| 19 | +import com.ning.http.client.AsyncHttpClientConfig; |
| 20 | +import com.ning.http.client.AsyncHttpProvider; |
| 21 | +import com.ning.http.client.AsyncHttpProviderConfig; |
| 22 | +import com.ning.http.client.Body; |
| 23 | +import com.ning.http.client.BodyGenerator; |
| 24 | +import com.ning.http.client.FluentCaseInsensitiveStringsMap; |
| 25 | +import com.ning.http.client.HttpResponseBodyPart; |
| 26 | +import com.ning.http.client.HttpResponseHeaders; |
| 27 | +import com.ning.http.client.HttpResponseStatus; |
| 28 | +import com.ning.http.client.ListenableFuture; |
| 29 | +import com.ning.http.client.MaxRedirectException; |
| 30 | +import com.ning.http.client.Param; |
| 31 | +import com.ning.http.client.Part; |
| 32 | +import com.ning.http.client.ProxyServer; |
| 33 | +import com.ning.http.client.Realm; |
| 34 | +import com.ning.http.client.Request; |
| 35 | +import com.ning.http.client.RequestBuilder; |
| 36 | +import com.ning.http.client.Response; |
| 37 | +import com.ning.http.client.UpgradeHandler; |
| 38 | +import com.ning.http.client.cookie.Cookie; |
| 39 | +import com.ning.http.client.cookie.CookieDecoder; |
| 40 | +import com.ning.http.client.filter.FilterContext; |
| 41 | +import com.ning.http.client.filter.ResponseFilter; |
| 42 | +import com.ning.http.client.listener.TransferCompletionHandler; |
| 43 | +import com.ning.http.client.ntlm.NTLMEngine; |
| 44 | +import com.ning.http.client.uri.UriComponents; |
| 45 | +import com.ning.http.client.websocket.WebSocket; |
| 46 | +import com.ning.http.client.websocket.WebSocketByteListener; |
| 47 | +import com.ning.http.client.websocket.WebSocketCloseCodeReasonListener; |
| 48 | +import com.ning.http.client.websocket.WebSocketListener; |
| 49 | +import com.ning.http.client.websocket.WebSocketPingListener; |
| 50 | +import com.ning.http.client.websocket.WebSocketPongListener; |
| 51 | +import com.ning.http.client.websocket.WebSocketTextListener; |
| 52 | +import com.ning.http.client.websocket.WebSocketUpgradeHandler; |
| 53 | +import com.ning.http.multipart.MultipartBody; |
| 54 | +import com.ning.http.multipart.MultipartRequestEntity; |
| 55 | +import com.ning.http.util.AsyncHttpProviderUtils; |
19 | 56 | import static com.ning.http.util.AsyncHttpProviderUtils.getNonEmptyPath;
|
| 57 | +import com.ning.http.util.AuthenticatorUtils; |
20 | 58 | import static com.ning.http.util.MiscUtils.isNonEmpty;
|
21 | 59 |
|
| 60 | +import com.ning.http.util.ProxyUtils; |
| 61 | +import com.ning.http.util.SslUtils; |
22 | 62 | import java.io.ByteArrayOutputStream;
|
23 | 63 | import java.io.File;
|
24 | 64 | import java.io.FileInputStream;
|
|
43 | 83 | import java.util.concurrent.TimeoutException;
|
44 | 84 | import java.util.concurrent.atomic.AtomicInteger;
|
45 | 85 | import java.util.concurrent.atomic.AtomicLong;
|
46 |
| - |
| 86 | +import javax.net.ssl.HostnameVerifier; |
47 | 87 | import javax.net.ssl.SSLContext;
|
48 |
| - |
49 | 88 | import org.glassfish.grizzly.Buffer;
|
| 89 | +import org.glassfish.grizzly.CloseListener; |
| 90 | +import org.glassfish.grizzly.CloseType; |
| 91 | +import org.glassfish.grizzly.Closeable; |
50 | 92 | import org.glassfish.grizzly.CompletionHandler;
|
51 | 93 | import org.glassfish.grizzly.Connection;
|
52 | 94 | import org.glassfish.grizzly.EmptyCompletionHandler;
|
|
103 | 145 | import org.slf4j.Logger;
|
104 | 146 | import org.slf4j.LoggerFactory;
|
105 | 147 |
|
106 |
| -import com.ning.http.client.AsyncHandler; |
107 |
| -import com.ning.http.client.AsyncHandlerExtensions; |
108 |
| -import com.ning.http.client.AsyncHttpClient; |
109 |
| -import com.ning.http.client.AsyncHttpClientConfig; |
110 |
| -import com.ning.http.client.AsyncHttpProvider; |
111 |
| -import com.ning.http.client.AsyncHttpProviderConfig; |
112 |
| -import com.ning.http.client.Body; |
113 |
| -import com.ning.http.client.BodyGenerator; |
114 |
| -import com.ning.http.client.FluentCaseInsensitiveStringsMap; |
115 |
| -import com.ning.http.client.HttpResponseBodyPart; |
116 |
| -import com.ning.http.client.HttpResponseHeaders; |
117 |
| -import com.ning.http.client.HttpResponseStatus; |
118 |
| -import com.ning.http.client.ListenableFuture; |
119 |
| -import com.ning.http.client.MaxRedirectException; |
120 |
| -import com.ning.http.client.Param; |
121 |
| -import com.ning.http.client.Part; |
122 |
| -import com.ning.http.client.ProxyServer; |
123 |
| -import com.ning.http.client.Realm; |
124 |
| -import com.ning.http.client.Request; |
125 |
| -import com.ning.http.client.RequestBuilder; |
126 |
| -import com.ning.http.client.Response; |
127 |
| -import com.ning.http.client.UpgradeHandler; |
128 |
| -import com.ning.http.client.cookie.Cookie; |
129 |
| -import com.ning.http.client.cookie.CookieDecoder; |
130 |
| -import com.ning.http.client.filter.FilterContext; |
131 |
| -import com.ning.http.client.filter.ResponseFilter; |
132 |
| -import com.ning.http.client.listener.TransferCompletionHandler; |
133 |
| -import com.ning.http.client.ntlm.NTLMEngine; |
134 |
| -import com.ning.http.client.uri.UriComponents; |
135 |
| -import com.ning.http.client.websocket.WebSocket; |
136 |
| -import com.ning.http.client.websocket.WebSocketByteListener; |
137 |
| -import com.ning.http.client.websocket.WebSocketCloseCodeReasonListener; |
138 |
| -import com.ning.http.client.websocket.WebSocketListener; |
139 |
| -import com.ning.http.client.websocket.WebSocketPingListener; |
140 |
| -import com.ning.http.client.websocket.WebSocketPongListener; |
141 |
| -import com.ning.http.client.websocket.WebSocketTextListener; |
142 |
| -import com.ning.http.client.websocket.WebSocketUpgradeHandler; |
143 |
| -import com.ning.http.multipart.MultipartBody; |
144 |
| -import com.ning.http.multipart.MultipartRequestEntity; |
145 |
| -import com.ning.http.util.AsyncHttpProviderUtils; |
146 |
| -import com.ning.http.util.AuthenticatorUtils; |
147 |
| -import com.ning.http.util.ProxyUtils; |
148 |
| -import com.ning.http.util.SslUtils; |
149 |
| - |
150 |
| -import org.glassfish.grizzly.CloseListener; |
151 |
| -import org.glassfish.grizzly.CloseType; |
152 |
| -import org.glassfish.grizzly.Closeable; |
| 148 | +import static com.ning.http.client.providers.grizzly.GrizzlyAsyncHttpProviderConfig.Property.BUFFER_WEBSOCKET_FRAGMENTS; |
| 149 | +import static com.ning.http.client.providers.grizzly.GrizzlyAsyncHttpProviderConfig.Property.MAX_HTTP_PACKET_HEADER_SIZE; |
| 150 | +import static com.ning.http.client.providers.grizzly.GrizzlyAsyncHttpProviderConfig.Property.TRANSPORT_CUSTOMIZER; |
153 | 151 |
|
154 | 152 | /**
|
155 | 153 | * A Grizzly 2.0-based implementation of {@link AsyncHttpProvider}.
|
@@ -396,8 +394,13 @@ public void onTimeout(Connection connection) {
|
396 | 394 | true,
|
397 | 395 | false,
|
398 | 396 | false);
|
399 |
| - final SwitchingSSLFilter filter = new SwitchingSSLFilter(configurator, defaultSecState); |
400 |
| - fcb.add(filter); |
| 397 | + final SwitchingSSLFilter sslFilter = |
| 398 | + new SwitchingSSLFilter(configurator, defaultSecState); |
| 399 | + if (clientConfig.getHostnameVerifier() != null) { |
| 400 | + sslFilter.addHandshakeListener(new HostnameVerifierListener()); |
| 401 | + } |
| 402 | + fcb.add(sslFilter); |
| 403 | + |
401 | 404 | final AsyncHttpClientEventFilter eventFilter = new
|
402 | 405 | AsyncHttpClientEventFilter(this, (Integer) providerConfig.getProperty(MAX_HTTP_PACKET_HEADER_SIZE));
|
403 | 406 | final AsyncHttpClientFilter clientFilter =
|
@@ -2394,12 +2397,29 @@ void doAsyncConnect(final Request request,
|
2394 | 2397 | final UriComponents uri = request.getURI();
|
2395 | 2398 | String host = ((proxy != null) ? proxy.getHost() : uri.getHost());
|
2396 | 2399 | int port = ((proxy != null) ? proxy.getPort() : uri.getPort());
|
2397 |
| - if(request.getLocalAddress()!=null) { |
2398 |
| - connectionHandler.connect(new InetSocketAddress(host, getPort(uri, port)), new InetSocketAddress(request.getLocalAddress(), 0), |
2399 |
| - createConnectionCompletionHandler(request, requestFuture, connectHandler)); |
| 2400 | + |
| 2401 | + CompletionHandler<Connection> completionHandler = |
| 2402 | + createConnectionCompletionHandler(request, requestFuture, |
| 2403 | + connectHandler); |
| 2404 | + |
| 2405 | + final HostnameVerifier verifier = |
| 2406 | + provider.clientConfig.getHostnameVerifier(); |
| 2407 | + |
| 2408 | + if (Utils.isSecure(uri) && verifier != null) { |
| 2409 | + completionHandler = |
| 2410 | + HostnameVerifierListener.wrapWithHostnameVerifierHandler( |
| 2411 | + completionHandler, verifier, uri.getHost()); |
| 2412 | + } |
| 2413 | + |
| 2414 | + if (request.getLocalAddress() != null) { |
| 2415 | + connectionHandler.connect(new InetSocketAddress(host, |
| 2416 | + getPort(uri, port)), |
| 2417 | + new InetSocketAddress(request.getLocalAddress(), 0), |
| 2418 | + completionHandler); |
2400 | 2419 | } else {
|
2401 |
| - connectionHandler.connect(new InetSocketAddress(host, getPort(uri, port)), |
2402 |
| - createConnectionCompletionHandler(request, requestFuture, connectHandler)); |
| 2420 | + connectionHandler.connect(new InetSocketAddress(host, |
| 2421 | + getPort(uri, port)), |
| 2422 | + completionHandler); |
2403 | 2423 | }
|
2404 | 2424 |
|
2405 | 2425 | }
|
@@ -2452,7 +2472,7 @@ void destroy() {
|
2452 | 2472 | pool.destroy();
|
2453 | 2473 |
|
2454 | 2474 | }
|
2455 |
| - |
| 2475 | + |
2456 | 2476 | CompletionHandler<Connection> createConnectionCompletionHandler(final Request request,
|
2457 | 2477 | final GrizzlyResponseFuture future,
|
2458 | 2478 | final CompletionHandler<Connection> wrappedHandler) {
|
|
0 commit comments