Skip to content

Commit 2fd3a70

Browse files
committed
Allow AhcEndpoint address override in grizzly provider
1 parent 170dc6e commit 2fd3a70

File tree

1 file changed

+19
-9
lines changed

1 file changed

+19
-9
lines changed

src/main/java/com/ning/http/client/providers/grizzly/ConnectionManager.java

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -129,12 +129,12 @@ void openAsync(final Request request,
129129
port = getPort(scheme, uri.getPort());
130130
}
131131

132-
final String partitionId = getPartitionId(request, proxy);
132+
final String partitionId = getPartitionId(request.getInetAddress(), request, proxy);
133133
Endpoint endpoint = endpointMap.get(partitionId);
134134
if (endpoint == null) {
135135
final boolean isSecure = Utils.isSecure(scheme);
136136
endpoint = new AhcEndpoint(partitionId,
137-
isSecure, host, port, request.getLocalAddress(),
137+
isSecure, request.getInetAddress(), host, port, request.getLocalAddress(),
138138
defaultConnectionHandler);
139139

140140
endpointMap.put(partitionId, endpoint);
@@ -164,11 +164,11 @@ Connection openSync(final Request request)
164164

165165
final boolean isSecure = Utils.isSecure(scheme);
166166

167-
final String partitionId = getPartitionId(request, proxy);
167+
final String partitionId = getPartitionId(request.getInetAddress(), request, proxy);
168168
Endpoint endpoint = endpointMap.get(partitionId);
169169
if (endpoint == null) {
170170
endpoint = new AhcEndpoint(partitionId,
171-
isSecure, host, port, request.getLocalAddress(),
171+
isSecure, request.getInetAddress(), host, port, request.getLocalAddress(),
172172
defaultConnectionHandler);
173173

174174
endpointMap.put(partitionId, endpoint);
@@ -219,10 +219,11 @@ static boolean isKeepAlive(final Connection connection) {
219219
return !IS_NOT_KEEP_ALIVE.isSet(connection);
220220
}
221221

222-
private static String getPartitionId(Request request,
222+
private static String getPartitionId(InetAddress overrideAddress, Request request,
223223
ProxyServer proxyServer) {
224-
return request.getConnectionPoolPartitioning()
225-
.getPartitionKey(request.getUri(), proxyServer).toString();
224+
return (overrideAddress != null ? overrideAddress.toString() + "_" : "") +
225+
request.getConnectionPoolPartitioning()
226+
.getPartitionKey(request.getUri(), proxyServer).toString();
226227
}
227228

228229
private static int getPort(final String scheme, final int p) {
@@ -244,19 +245,21 @@ private class AhcEndpoint extends Endpoint<SocketAddress> {
244245

245246
private final String partitionId;
246247
private final boolean isSecure;
248+
private final InetAddress remoteOverrideAddress;
247249
private final String host;
248250
private final int port;
249251
private final InetAddress localAddress;
250252
private final ConnectorHandler<SocketAddress> connectorHandler;
251253

252254
private AhcEndpoint(final String partitionId,
253255
final boolean isSecure,
254-
final String host, final int port,
256+
final InetAddress remoteOverrideAddress, final String host, final int port,
255257
final InetAddress localAddress,
256258
final ConnectorHandler<SocketAddress> connectorHandler) {
257259

258260
this.partitionId = partitionId;
259261
this.isSecure = isSecure;
262+
this.remoteOverrideAddress = remoteOverrideAddress;
260263
this.host = host;
261264
this.port = port;
262265
this.localAddress = localAddress;
@@ -275,12 +278,19 @@ public Object getId() {
275278
@Override
276279
public GrizzlyFuture<Connection> connect() {
277280
return (GrizzlyFuture<Connection>) connectorHandler.connect(
278-
new InetSocketAddress(host, port),
281+
buildRemoteSocketAddress(),
279282
localAddress != null
280283
? new InetSocketAddress(localAddress, 0)
281284
: null);
282285
}
283286

287+
private InetSocketAddress buildRemoteSocketAddress()
288+
{
289+
return remoteOverrideAddress != null
290+
? new InetSocketAddress(remoteOverrideAddress, port)
291+
: new InetSocketAddress(host, port);
292+
}
293+
284294
@Override
285295
protected void onConnect(final Connection connection,
286296
final SingleEndpointPool<SocketAddress> pool) {

0 commit comments

Comments
 (0)