Skip to content

Commit e37befb

Browse files
committed
Don't pass Uri when passing request
1 parent ce5f0a9 commit e37befb

File tree

9 files changed

+89
-102
lines changed

9 files changed

+89
-102
lines changed

api/src/main/java/org/asynchttpclient/netty/request/NettyRequestFactoryBase.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ protected String systematicProxyAuthorizationHeader(Request request, ProxyServer
111111
return proxyAuthorization;
112112
}
113113

114-
protected String firstRequestOnlyAuthorizationHeader(Request request, Uri uri, ProxyServer proxyServer, Realm realm) throws IOException {
114+
protected String firstRequestOnlyAuthorizationHeader(Request request, ProxyServer proxyServer, Realm realm) throws IOException {
115115
String authorizationHeader = null;
116116

117117
if (realm != null && realm.getUsePreemptiveAuth()) {
@@ -128,7 +128,7 @@ protected String firstRequestOnlyAuthorizationHeader(Request request, Uri uri, P
128128
else if (request.getVirtualHost() != null)
129129
host = request.getVirtualHost();
130130
else
131-
host = uri.getHost();
131+
host = request.getUri().getHost();
132132

133133
try {
134134
authorizationHeader = "Negotiate " + SpnegoEngine.instance().generateToken(host);
@@ -144,7 +144,7 @@ else if (request.getVirtualHost() != null)
144144
return authorizationHeader;
145145
}
146146

147-
protected String systematicAuthorizationHeader(Request request, Uri uri, Realm realm) {
147+
protected String systematicAuthorizationHeader(Request request, Realm realm) {
148148

149149
String authorizationHeader = null;
150150

providers/netty3/src/main/java/org/asynchttpclient/netty/NettyResponseFuture.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,7 @@ public enum STATE {
9090
private boolean dontWriteBodyBecauseExpectContinue;
9191
private boolean allowConnect;
9292

93-
public NettyResponseFuture(Uri uri,//
94-
Request request,//
93+
public NettyResponseFuture(Request request,//
9594
AsyncHandler<V> asyncHandler,//
9695
NettyRequest nettyRequest,//
9796
int maxRetry,//
@@ -101,7 +100,7 @@ public NettyResponseFuture(Uri uri,//
101100
this.asyncHandler = asyncHandler;
102101
this.request = request;
103102
this.nettyRequest = nettyRequest;
104-
this.uri = uri;
103+
this.uri = request.getUri();
105104
this.connectionPoolPartitioning = connectionPoolPartitioning;
106105
this.proxyServer = proxyServer;
107106
this.maxRetry = maxRetry;

providers/netty3/src/main/java/org/asynchttpclient/netty/handler/HttpProtocol.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -102,14 +102,13 @@ private Realm kerberosProxyChallenge(Channel channel,//
102102
FluentCaseInsensitiveStringsMap headers,//
103103
NettyResponseFuture<?> future) throws NtlmEngineException {
104104

105-
Uri uri = request.getUri();
106105
try {
107106
String challengeHeader = SpnegoEngine.instance().generateToken(proxyServer.getHost());
108107
headers.remove(HttpHeaders.Names.AUTHORIZATION);
109108
headers.add(HttpHeaders.Names.AUTHORIZATION, "Negotiate " + challengeHeader);
110109

111110
return proxyServer.realmBuilder()//
112-
.setUri(uri)//
111+
.setUri(request.getUri())//
113112
.setMethodName(request.getMethod())//
114113
.setScheme(Realm.AuthScheme.KERBEROS)//
115114
.build();
@@ -138,8 +137,6 @@ private Realm ntlmChallenge(String authenticateHeader,//
138137
Realm realm,//
139138
NettyResponseFuture<?> future) throws NtlmEngineException {
140139

141-
Uri uri = request.getUri();
142-
143140
if (authenticateHeader.equals("NTLM")) {
144141
// server replied bare NTLM => we didn't preemptively sent Type1Msg
145142
String challengeHeader = NtlmEngine.INSTANCE.generateType1Msg();
@@ -153,7 +150,7 @@ private Realm ntlmChallenge(String authenticateHeader,//
153150
}
154151

155152
return new Realm.RealmBuilder().clone(realm)//
156-
.setUri(uri)//
153+
.setUri(request.getUri())//
157154
.setMethodName(request.getMethod())//
158155
.build();
159156
}

providers/netty3/src/main/java/org/asynchttpclient/netty/request/NettyRequestFactory.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -126,9 +126,9 @@ public void setProxyAuthorizationHeader(HttpHeaders headers, String proxyAuthori
126126
headers.set(PROXY_AUTHORIZATION, proxyAuthorizationHeader);
127127
}
128128

129-
public NettyRequest newNettyRequest(Request request, Uri uri, boolean forceConnect, ProxyServer proxyServer)
130-
throws IOException {
129+
public NettyRequest newNettyRequest(Request request, boolean forceConnect, ProxyServer proxyServer) throws IOException {
131130

131+
Uri uri = request.getUri();
132132
HttpMethod method = forceConnect ? HttpMethod.CONNECT : HttpMethod.valueOf(request.getMethod());
133133
boolean connect = method == HttpMethod.CONNECT;
134134

@@ -200,7 +200,7 @@ public NettyRequest newNettyRequest(Request request, Uri uri, boolean forceConne
200200
Realm realm = request.getRealm() != null ? request.getRealm() : config.getRealm();
201201

202202
// don't override authorization but append
203-
addAuthorizationHeader(headers, systematicAuthorizationHeader(request, uri, realm));
203+
addAuthorizationHeader(headers, systematicAuthorizationHeader(request, realm));
204204

205205
setProxyAuthorizationHeader(headers, systematicProxyAuthorizationHeader(request, proxyServer, realm, connect));
206206

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

Lines changed: 36 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
import org.asynchttpclient.ListenableFuture;
3636
import org.asynchttpclient.Realm;
3737
import org.asynchttpclient.Request;
38-
import org.asynchttpclient.channel.pool.ConnectionPoolPartitioning;
3938
import org.asynchttpclient.filter.FilterContext;
4039
import org.asynchttpclient.filter.FilterException;
4140
import org.asynchttpclient.filter.IOExceptionFilter;
@@ -92,24 +91,22 @@ public <T> ListenableFuture<T> sendRequest(final Request request,//
9291
if (closed.get())
9392
throw new IOException("Closed");
9493

95-
Uri uri = request.getUri();
96-
97-
validateWebSocketRequest(request, uri, asyncHandler);
94+
validateWebSocketRequest(request, asyncHandler);
9895

9996
ProxyServer proxyServer = getProxyServer(config, request);
10097
boolean resultOfAConnect = future != null && future.getNettyRequest() != null
10198
&& future.getNettyRequest().getHttpRequest().getMethod() == HttpMethod.CONNECT;
10299
boolean useProxy = proxyServer != null && !resultOfAConnect;
103100

104-
if (useProxy && useProxyConnect(uri))
101+
if (useProxy && useProxyConnect(request.getUri()))
105102
// SSL proxy, have to handle CONNECT
106103
if (future != null && future.isConnectAllowed())
107104
// CONNECT forced
108-
return sendRequestWithCertainForceConnect(request, asyncHandler, future, reclaimCache, uri, proxyServer, true, true);
105+
return sendRequestWithCertainForceConnect(request, asyncHandler, future, reclaimCache, proxyServer, true, true);
109106
else
110-
return sendRequestThroughSslProxy(request, asyncHandler, future, reclaimCache, uri, proxyServer);
107+
return sendRequestThroughSslProxy(request, asyncHandler, future, reclaimCache, proxyServer);
111108
else
112-
return sendRequestWithCertainForceConnect(request, asyncHandler, future, reclaimCache, uri, proxyServer, useProxy, false);
109+
return sendRequestWithCertainForceConnect(request, asyncHandler, future, reclaimCache, proxyServer, useProxy, false);
113110
}
114111

115112
/**
@@ -123,18 +120,17 @@ private <T> ListenableFuture<T> sendRequestWithCertainForceConnect(//
123120
AsyncHandler<T> asyncHandler,//
124121
NettyResponseFuture<T> future,//
125122
boolean reclaimCache,//
126-
Uri uri,//
127123
ProxyServer proxyServer,//
128124
boolean useProxy,//
129125
boolean forceConnect) throws IOException {
130-
NettyResponseFuture<T> newFuture = newNettyRequestAndResponseFuture(request, asyncHandler, future, uri, proxyServer, forceConnect);
126+
NettyResponseFuture<T> newFuture = newNettyRequestAndResponseFuture(request, asyncHandler, future, proxyServer, forceConnect);
131127

132-
Channel channel = getCachedChannel(future, uri, request.getConnectionPoolPartitioning(), proxyServer, asyncHandler);
128+
Channel channel = getCachedChannel(future, request, proxyServer, asyncHandler);
133129

134130
if (Channels.isChannelValid(channel))
135-
return sendRequestWithCachedChannel(request, uri, proxyServer, newFuture, asyncHandler, channel);
131+
return sendRequestWithCachedChannel(request, proxyServer, newFuture, asyncHandler, channel);
136132
else
137-
return sendRequestWithNewChannel(request, uri, proxyServer, useProxy, newFuture, asyncHandler, reclaimCache);
133+
return sendRequestWithNewChannel(request, proxyServer, useProxy, newFuture, asyncHandler, reclaimCache);
138134
}
139135

140136
/**
@@ -148,52 +144,51 @@ private <T> ListenableFuture<T> sendRequestThroughSslProxy(//
148144
AsyncHandler<T> asyncHandler,//
149145
NettyResponseFuture<T> future,//
150146
boolean reclaimCache,//
151-
Uri uri,//
152147
ProxyServer proxyServer) throws IOException {
153148

154149
NettyResponseFuture<T> newFuture = null;
155150
for (int i = 0; i < 3; i++) {
156-
Channel channel = getCachedChannel(future, uri, request.getConnectionPoolPartitioning(), proxyServer, asyncHandler);
151+
Channel channel = getCachedChannel(future, request, proxyServer, asyncHandler);
157152
if (Channels.isChannelValid(channel))
158153
if (newFuture == null)
159-
newFuture = newNettyRequestAndResponseFuture(request, asyncHandler, future, uri, proxyServer, false);
154+
newFuture = newNettyRequestAndResponseFuture(request, asyncHandler, future, proxyServer, false);
160155

161156
if (Channels.isChannelValid(channel))
162157
// if the channel is still active, we can use it, otherwise try gain
163-
return sendRequestWithCachedChannel(request, uri, proxyServer, newFuture, asyncHandler, channel);
158+
return sendRequestWithCachedChannel(request, proxyServer, newFuture, asyncHandler, channel);
164159
else
165160
// pool is empty
166161
break;
167162
}
168163

169-
newFuture = newNettyRequestAndResponseFuture(request, asyncHandler, future, uri, proxyServer, true);
170-
return sendRequestWithNewChannel(request, uri, proxyServer, true, newFuture, asyncHandler, reclaimCache);
164+
newFuture = newNettyRequestAndResponseFuture(request, asyncHandler, future, proxyServer, true);
165+
return sendRequestWithNewChannel(request, proxyServer, true, newFuture, asyncHandler, reclaimCache);
171166
}
172167

173168
private <T> NettyResponseFuture<T> newNettyRequestAndResponseFuture(final Request request, final AsyncHandler<T> asyncHandler,
174-
NettyResponseFuture<T> originalFuture, Uri uri, ProxyServer proxy, boolean forceConnect) throws IOException {
169+
NettyResponseFuture<T> originalFuture, ProxyServer proxy, boolean forceConnect) throws IOException {
175170

176-
NettyRequest nettyRequest = requestFactory.newNettyRequest(request, uri, forceConnect, proxy);
171+
NettyRequest nettyRequest = requestFactory.newNettyRequest(request, forceConnect, proxy);
177172

178173
if (originalFuture == null) {
179-
return newNettyResponseFuture(uri, request, asyncHandler, nettyRequest, proxy);
174+
return newNettyResponseFuture(request, asyncHandler, nettyRequest, proxy);
180175
} else {
181176
originalFuture.setNettyRequest(nettyRequest);
182177
originalFuture.setRequest(request);
183178
return originalFuture;
184179
}
185180
}
186181

187-
private Channel getCachedChannel(NettyResponseFuture<?> future, Uri uri, ConnectionPoolPartitioning partitioning,
182+
private Channel getCachedChannel(NettyResponseFuture<?> future, Request request,
188183
ProxyServer proxyServer, AsyncHandler<?> asyncHandler) {
189184

190185
if (future != null && future.reuseChannel() && Channels.isChannelValid(future.channel()))
191186
return future.channel();
192187
else
193-
return pollAndVerifyCachedChannel(uri, proxyServer, partitioning, asyncHandler);
188+
return pollAndVerifyCachedChannel(request, proxyServer, asyncHandler);
194189
}
195190

196-
private <T> ListenableFuture<T> sendRequestWithCachedChannel(Request request, Uri uri, ProxyServer proxy,
191+
private <T> ListenableFuture<T> sendRequestWithCachedChannel(Request request, ProxyServer proxy,
197192
NettyResponseFuture<T> future, AsyncHandler<T> asyncHandler, Channel channel) throws IOException {
198193

199194
if (asyncHandler instanceof AsyncHandlerExtensions)
@@ -242,20 +237,19 @@ private <T> ListenableFuture<T> sendRequestWithCachedChannel(Request request, Ur
242237

243238
private <T> ListenableFuture<T> sendRequestWithNewChannel(//
244239
Request request,//
245-
Uri uri,//
246240
ProxyServer proxy,//
247241
boolean useProxy,//
248242
NettyResponseFuture<T> future,//
249243
AsyncHandler<T> asyncHandler,//
250244
boolean reclaimCache) throws IOException {
251245

252-
boolean useSSl = isSecure(uri) && !useProxy;
246+
boolean useSSl = isSecure(request.getUri()) && !useProxy;
253247

254248
// some headers are only set when performing the first request
255249
HttpHeaders headers = future.getNettyRequest().getHttpRequest().headers();
256250
Realm realm = request.getRealm() != null ? request.getRealm() : config.getRealm();
257251
boolean connect = future.getNettyRequest().getHttpRequest().getMethod() == HttpMethod.CONNECT;
258-
requestFactory.addAuthorizationHeader(headers, requestFactory.firstRequestOnlyAuthorizationHeader(request, uri, proxy, realm));
252+
requestFactory.addAuthorizationHeader(headers, requestFactory.firstRequestOnlyAuthorizationHeader(request, proxy, realm));
259253
requestFactory.setProxyAuthorizationHeader(headers, requestFactory.firstRequestOnlyProxyAuthorizationHeader(request, proxy, connect));
260254

261255
// Do not throw an exception when we need an extra connection for a
@@ -276,7 +270,7 @@ private <T> ListenableFuture<T> sendRequestWithNewChannel(//
276270
if (asyncHandler instanceof AsyncHandlerExtensions)
277271
AsyncHandlerExtensions.class.cast(asyncHandler).onConnectionOpen();
278272

279-
ChannelFuture channelFuture = connect(request, uri, proxy, useProxy, bootstrap, asyncHandler);
273+
ChannelFuture channelFuture = connect(request, proxy, useProxy, bootstrap, asyncHandler);
280274
channelFuture.addListener(new NettyConnectListener<T>(future, this, channelManager, channelPreempted, partitionKey));
281275

282276
} catch (Throwable t) {
@@ -289,11 +283,10 @@ private <T> ListenableFuture<T> sendRequestWithNewChannel(//
289283
return future;
290284
}
291285

292-
private <T> NettyResponseFuture<T> newNettyResponseFuture(Uri uri, Request request, AsyncHandler<T> asyncHandler,
286+
private <T> NettyResponseFuture<T> newNettyResponseFuture(Request request, AsyncHandler<T> asyncHandler,
293287
NettyRequest nettyRequest, ProxyServer proxyServer) {
294288

295289
NettyResponseFuture<T> future = new NettyResponseFuture<>(//
296-
uri,//
297290
request,//
298291
asyncHandler,//
299292
nettyRequest,//
@@ -343,9 +336,10 @@ public <T> void writeRequest(NettyResponseFuture<T> future, Channel channel) {
343336
}
344337
}
345338

346-
private InetSocketAddress remoteAddress(Request request, Uri uri, ProxyServer proxy, boolean useProxy) throws UnknownHostException {
339+
private InetSocketAddress remoteAddress(Request request, ProxyServer proxy, boolean useProxy) throws UnknownHostException {
347340

348341
InetAddress address;
342+
Uri uri = request.getUri();
349343
int port = getDefaultPort(uri);
350344

351345
if (request.getInetAddress() != null) {
@@ -362,8 +356,8 @@ private InetSocketAddress remoteAddress(Request request, Uri uri, ProxyServer pr
362356
return new InetSocketAddress(address, port);
363357
}
364358

365-
private ChannelFuture connect(Request request, Uri uri, ProxyServer proxy, boolean useProxy, ClientBootstrap bootstrap, AsyncHandler<?> asyncHandler) throws UnknownHostException {
366-
InetSocketAddress remoteAddress = remoteAddress(request, uri, proxy, useProxy);
359+
private ChannelFuture connect(Request request, ProxyServer proxy, boolean useProxy, ClientBootstrap bootstrap, AsyncHandler<?> asyncHandler) throws UnknownHostException {
360+
InetSocketAddress remoteAddress = remoteAddress(request, proxy, useProxy);
367361

368362
if (asyncHandler instanceof AsyncHandlerExtensions)
369363
AsyncHandlerExtensions.class.cast(asyncHandler).onDnsResolved(remoteAddress.getAddress());
@@ -492,23 +486,26 @@ public <T> void sendNextRequest(Request request, NettyResponseFuture<T> future)
492486
sendRequest(request, future.getAsyncHandler(), future, true);
493487
}
494488

495-
private void validateWebSocketRequest(Request request, Uri uri, AsyncHandler<?> asyncHandler) {
489+
private void validateWebSocketRequest(Request request, AsyncHandler<?> asyncHandler) {
490+
Uri uri = request.getUri();
491+
boolean isWs = uri.getScheme().startsWith(WS);
496492
if (asyncHandler instanceof WebSocketUpgradeHandler) {
497-
if (!uri.getScheme().startsWith(WS))
493+
if (!isWs)
498494
throw new IllegalArgumentException("WebSocketUpgradeHandler but scheme isn't ws or wss: " + uri.getScheme());
499495
else if (!request.getMethod().equals(HttpMethod.GET.getName()))
500496
throw new IllegalArgumentException("WebSocketUpgradeHandler but method isn't GET: " + request.getMethod());
501-
} else if (uri.getScheme().startsWith(WS)) {
497+
} else if (isWs) {
502498
throw new IllegalArgumentException("No WebSocketUpgradeHandler but scheme is " + uri.getScheme());
503499
}
504500
}
505501

506-
public Channel pollAndVerifyCachedChannel(Uri uri, ProxyServer proxy, ConnectionPoolPartitioning connectionPoolPartitioning, AsyncHandler<?> asyncHandler) {
502+
public Channel pollAndVerifyCachedChannel(Request request, ProxyServer proxy, AsyncHandler<?> asyncHandler) {
507503

508504
if (asyncHandler instanceof AsyncHandlerExtensions)
509505
AsyncHandlerExtensions.class.cast(asyncHandler).onConnectionPool();
510506

511-
final Channel channel = channelManager.poll(uri, proxy, connectionPoolPartitioning);
507+
Uri uri = request.getUri();
508+
final Channel channel = channelManager.poll(uri, proxy, request.getConnectionPoolPartitioning());
512509

513510
if (channel != null) {
514511
LOGGER.debug("Using cached Channel {}\n for uri {}\n", channel, uri);

providers/netty4/src/main/java/org/asynchttpclient/netty/NettyResponseFuture.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,7 @@ public enum STATE {
9090
private boolean dontWriteBodyBecauseExpectContinue;
9191
private boolean allowConnect;
9292

93-
public NettyResponseFuture(Uri uri,//
94-
Request request,//
93+
public NettyResponseFuture(Request request,//
9594
AsyncHandler<V> asyncHandler,//
9695
NettyRequest nettyRequest,//
9796
int maxRetry,//
@@ -101,7 +100,7 @@ public NettyResponseFuture(Uri uri,//
101100
this.asyncHandler = asyncHandler;
102101
this.request = request;
103102
this.nettyRequest = nettyRequest;
104-
this.uri = uri;
103+
this.uri = request.getUri();
105104
this.connectionPoolPartitioning = connectionPoolPartitioning;
106105
this.proxyServer = proxyServer;
107106
this.maxRetry = maxRetry;

providers/netty4/src/main/java/org/asynchttpclient/netty/handler/HttpProtocol.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -103,14 +103,13 @@ private Realm kerberosProxyChallenge(Channel channel,//
103103
FluentCaseInsensitiveStringsMap headers,//
104104
NettyResponseFuture<?> future) throws NtlmEngineException {
105105

106-
Uri uri = request.getUri();
107106
try {
108107
String challengeHeader = SpnegoEngine.instance().generateToken(proxyServer.getHost());
109108
headers.remove(HttpHeaders.Names.AUTHORIZATION);
110109
headers.add(HttpHeaders.Names.AUTHORIZATION, "Negotiate " + challengeHeader);
111110

112111
return proxyServer.realmBuilder()//
113-
.setUri(uri)//
112+
.setUri(request.getUri())//
114113
.setMethodName(request.getMethod())//
115114
.setScheme(Realm.AuthScheme.KERBEROS)//
116115
.build();
@@ -139,8 +138,6 @@ private Realm ntlmChallenge(String authenticateHeader,//
139138
Realm realm,//
140139
NettyResponseFuture<?> future) throws NtlmEngineException {
141140

142-
Uri uri = request.getUri();
143-
144141
if (authenticateHeader.equals("NTLM")) {
145142
// server replied bare NTLM => we didn't preemptively sent Type1Msg
146143
String challengeHeader = NtlmEngine.INSTANCE.generateType1Msg();
@@ -153,7 +150,7 @@ private Realm ntlmChallenge(String authenticateHeader,//
153150
}
154151

155152
return new Realm.RealmBuilder().clone(realm)//
156-
.setUri(uri)//
153+
.setUri(request.getUri())//
157154
.setMethodName(request.getMethod())//
158155
.build();
159156
}

0 commit comments

Comments
 (0)