Skip to content

Commit 9d4135f

Browse files
impl uds,without test
1 parent 087b41a commit 9d4135f

25 files changed

+460
-78
lines changed

client/src/main/java/org/asynchttpclient/AsyncHandler.java

+5-4
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
import javax.net.ssl.SSLSession;
2323
import java.net.InetSocketAddress;
24+
import java.net.SocketAddress;
2425
import java.util.List;
2526

2627

@@ -132,7 +133,7 @@ default void onHostnameResolutionAttempt(String name) {
132133
* @param name the name to be resolved
133134
* @param addresses the resolved addresses
134135
*/
135-
default void onHostnameResolutionSuccess(String name, List<InetSocketAddress> addresses) {
136+
default void onHostnameResolutionSuccess(String name, List<? extends SocketAddress> addresses) {
136137
}
137138

138139
/**
@@ -153,7 +154,7 @@ default void onHostnameResolutionFailure(String name, Throwable cause) {
153154
*
154155
* @param remoteAddress the address we try to connect to
155156
*/
156-
default void onTcpConnectAttempt(InetSocketAddress remoteAddress) {
157+
default void onTcpConnectAttempt(SocketAddress remoteAddress) {
157158
}
158159

159160
/**
@@ -162,7 +163,7 @@ default void onTcpConnectAttempt(InetSocketAddress remoteAddress) {
162163
* @param remoteAddress the address we try to connect to
163164
* @param connection the connection
164165
*/
165-
default void onTcpConnectSuccess(InetSocketAddress remoteAddress, Channel connection) {
166+
default void onTcpConnectSuccess(SocketAddress remoteAddress, Channel connection) {
166167
}
167168

168169
/**
@@ -173,7 +174,7 @@ default void onTcpConnectSuccess(InetSocketAddress remoteAddress, Channel connec
173174
* @param remoteAddress the address we try to connect to
174175
* @param cause the cause of the failure
175176
*/
176-
default void onTcpConnectFailure(InetSocketAddress remoteAddress, Throwable cause) {
177+
default void onTcpConnectFailure(SocketAddress remoteAddress, Throwable cause) {
177178
}
178179

179180
// ////////////// TLS ///////////////

client/src/main/java/org/asynchttpclient/AsyncHttpClientConfig.java

+7
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,13 @@ public interface AsyncHttpClientConfig {
294294

295295
boolean isUseNativeTransport();
296296

297+
String getUnixSocket();
298+
299+
default boolean isUseUnixDomain(){
300+
String unixSocket = getUnixSocket();
301+
return unixSocket !=null && !unixSocket.isEmpty();
302+
}
303+
297304
Consumer<Channel> getHttpAdditionalChannelInitializer();
298305

299306
Consumer<Channel> getWsAdditionalChannelInitializer();

client/src/main/java/org/asynchttpclient/DefaultAsyncHttpClientConfig.java

+17
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ public class DefaultAsyncHttpClientConfig implements AsyncHttpClientConfig {
120120
private final Map<ChannelOption<Object>, Object> channelOptions;
121121
private final EventLoopGroup eventLoopGroup;
122122
private final boolean useNativeTransport;
123+
private final String unixSocket;
123124
private final ByteBufAllocator allocator;
124125
private final boolean tcpNoDelay;
125126
private final boolean soReuseAddress;
@@ -209,6 +210,7 @@ private DefaultAsyncHttpClientConfig(// http
209210
Map<ChannelOption<Object>, Object> channelOptions,
210211
EventLoopGroup eventLoopGroup,
211212
boolean useNativeTransport,
213+
String unixSocket,
212214
ByteBufAllocator allocator,
213215
Timer nettyTimer,
214216
ThreadFactory threadFactory,
@@ -295,6 +297,7 @@ private DefaultAsyncHttpClientConfig(// http
295297
this.channelOptions = channelOptions;
296298
this.eventLoopGroup = eventLoopGroup;
297299
this.useNativeTransport = useNativeTransport;
300+
this.unixSocket = unixSocket;
298301
this.allocator = allocator;
299302
this.nettyTimer = nettyTimer;
300303
this.threadFactory = threadFactory;
@@ -621,6 +624,11 @@ public boolean isUseNativeTransport() {
621624
return useNativeTransport;
622625
}
623626

627+
@Override
628+
public String getUnixSocket() {
629+
return unixSocket;
630+
}
631+
624632
@Override
625633
public ByteBufAllocator getAllocator() {
626634
return allocator;
@@ -738,6 +746,7 @@ public static class Builder {
738746
private int httpClientCodecInitialBufferSize = defaultHttpClientCodecInitialBufferSize();
739747
private int chunkedFileChunkSize = defaultChunkedFileChunkSize();
740748
private boolean useNativeTransport = defaultUseNativeTransport();
749+
private String unixSocket = defaultUnixSocket();
741750
private ByteBufAllocator allocator;
742751
private Map<ChannelOption<Object>, Object> channelOptions = new HashMap<>();
743752
private EventLoopGroup eventLoopGroup;
@@ -821,6 +830,7 @@ public Builder(AsyncHttpClientConfig config) {
821830
channelOptions.putAll(config.getChannelOptions());
822831
eventLoopGroup = config.getEventLoopGroup();
823832
useNativeTransport = config.isUseNativeTransport();
833+
unixSocket = config.getUnixSocket();
824834
allocator = config.getAllocator();
825835
nettyTimer = config.getNettyTimer();
826836
threadFactory = config.getThreadFactory();
@@ -1189,6 +1199,12 @@ public Builder setUseNativeTransport(boolean useNativeTransport) {
11891199
return this;
11901200
}
11911201

1202+
public Builder setUnixSocket(String unixSocket) {
1203+
setUseNativeTransport(true);
1204+
this.unixSocket = unixSocket;
1205+
return this;
1206+
}
1207+
11921208
public Builder setAllocator(ByteBufAllocator allocator) {
11931209
this.allocator = allocator;
11941210
return this;
@@ -1301,6 +1317,7 @@ public DefaultAsyncHttpClientConfig build() {
13011317
channelOptions.isEmpty() ? Collections.emptyMap() : Collections.unmodifiableMap(channelOptions),
13021318
eventLoopGroup,
13031319
useNativeTransport,
1320+
unixSocket,
13041321
allocator,
13051322
nettyTimer,
13061323
threadFactory,

client/src/main/java/org/asynchttpclient/DefaultRequest.java

+17-7
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
*/
1414
package org.asynchttpclient;
1515

16+
import io.netty.channel.unix.DomainSocketAddress;
1617
import io.netty.handler.codec.http.HttpHeaders;
1718
import io.netty.handler.codec.http.cookie.Cookie;
1819
import io.netty.resolver.NameResolver;
@@ -25,6 +26,7 @@
2526
import java.io.File;
2627
import java.io.InputStream;
2728
import java.net.InetAddress;
29+
import java.net.SocketAddress;
2830
import java.nio.ByteBuffer;
2931
import java.nio.charset.Charset;
3032
import java.util.ArrayList;
@@ -39,8 +41,8 @@ public class DefaultRequest implements Request {
3941
public final ProxyServer proxyServer;
4042
private final String method;
4143
private final Uri uri;
42-
private final InetAddress address;
43-
private final InetAddress localAddress;
44+
private final SocketAddress address;
45+
private final SocketAddress localAddress;
4446
private final HttpHeaders headers;
4547
private final List<Cookie> cookies;
4648
private final byte[] byteData;
@@ -61,13 +63,14 @@ public class DefaultRequest implements Request {
6163
private final Charset charset;
6264
private final ChannelPoolPartitioning channelPoolPartitioning;
6365
private final NameResolver<InetAddress> nameResolver;
66+
private final NameResolver<DomainSocketAddress> domainNameResolver;
6467
// lazily loaded
6568
private List<Param> queryParams;
6669

6770
public DefaultRequest(String method,
6871
Uri uri,
69-
InetAddress address,
70-
InetAddress localAddress,
72+
SocketAddress address,
73+
SocketAddress localAddress,
7174
HttpHeaders headers,
7275
List<Cookie> cookies,
7376
byte[] byteData,
@@ -88,7 +91,8 @@ public DefaultRequest(String method,
8891
long rangeOffset,
8992
Charset charset,
9093
ChannelPoolPartitioning channelPoolPartitioning,
91-
NameResolver<InetAddress> nameResolver) {
94+
NameResolver<InetAddress> nameResolver,
95+
NameResolver<DomainSocketAddress> domainNameResolver) {
9296
this.method = method;
9397
this.uri = uri;
9498
this.address = address;
@@ -114,6 +118,7 @@ public DefaultRequest(String method,
114118
this.charset = charset;
115119
this.channelPoolPartitioning = channelPoolPartitioning;
116120
this.nameResolver = nameResolver;
121+
this.domainNameResolver = domainNameResolver;
117122
}
118123

119124
@Override
@@ -132,12 +137,12 @@ public Uri getUri() {
132137
}
133138

134139
@Override
135-
public InetAddress getAddress() {
140+
public SocketAddress getAddress() {
136141
return address;
137142
}
138143

139144
@Override
140-
public InetAddress getLocalAddress() {
145+
public SocketAddress getLocalAddress() {
141146
return localAddress;
142147
}
143148

@@ -246,6 +251,11 @@ public NameResolver<InetAddress> getNameResolver() {
246251
return nameResolver;
247252
}
248253

254+
@Override
255+
public NameResolver<DomainSocketAddress> getDomainNameResolver() {
256+
return domainNameResolver;
257+
}
258+
249259
@Override
250260
public List<Param> getQueryParams() {
251261
if (queryParams == null)

client/src/main/java/org/asynchttpclient/Request.java

+9-2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
*/
1717
package org.asynchttpclient;
1818

19+
import io.netty.channel.unix.DomainSocketAddress;
1920
import io.netty.handler.codec.http.HttpHeaders;
2021
import io.netty.handler.codec.http.cookie.Cookie;
2122
import io.netty.resolver.NameResolver;
@@ -28,6 +29,7 @@
2829
import java.io.File;
2930
import java.io.InputStream;
3031
import java.net.InetAddress;
32+
import java.net.SocketAddress;
3133
import java.nio.ByteBuffer;
3234
import java.nio.charset.Charset;
3335
import java.util.List;
@@ -64,12 +66,12 @@ public interface Request {
6466
/**
6567
* @return the InetAddress to be used to bypass uri's hostname resolution
6668
*/
67-
InetAddress getAddress();
69+
SocketAddress getAddress();
6870

6971
/**
7072
* @return the local address to bind from
7173
*/
72-
InetAddress getLocalAddress();
74+
SocketAddress getLocalAddress();
7375

7476
/**
7577
* @return the HTTP headers
@@ -181,6 +183,11 @@ public interface Request {
181183
*/
182184
NameResolver<InetAddress> getNameResolver();
183185

186+
/**
187+
* @return the NameResolver to be used to resolve hostnams's IP
188+
*/
189+
NameResolver<DomainSocketAddress> getDomainNameResolver();
190+
184191
/**
185192
* @return a new request builder using this request as a prototype
186193
*/

client/src/main/java/org/asynchttpclient/RequestBuilderBase.java

+30-4
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package org.asynchttpclient;
1717

1818
import io.netty.buffer.ByteBuf;
19+
import io.netty.channel.unix.DomainSocketAddress;
1920
import io.netty.handler.codec.http.DefaultHttpHeaders;
2021
import io.netty.handler.codec.http.HttpHeaders;
2122
import io.netty.handler.codec.http.cookie.Cookie;
@@ -27,6 +28,7 @@
2728
import org.asynchttpclient.request.body.generator.BodyGenerator;
2829
import org.asynchttpclient.request.body.generator.ReactiveStreamsBodyGenerator;
2930
import org.asynchttpclient.request.body.multipart.Part;
31+
import org.asynchttpclient.resolver.DefaultDomainNameResolver;
3032
import org.asynchttpclient.uri.Uri;
3133
import org.asynchttpclient.util.UriEncoder;
3234
import org.reactivestreams.Publisher;
@@ -36,6 +38,8 @@
3638
import java.io.File;
3739
import java.io.InputStream;
3840
import java.net.InetAddress;
41+
import java.net.InetSocketAddress;
42+
import java.net.SocketAddress;
3943
import java.nio.ByteBuffer;
4044
import java.nio.charset.Charset;
4145
import java.util.*;
@@ -56,6 +60,7 @@ public abstract class RequestBuilderBase<T extends RequestBuilderBase<T>> {
5660
private final static Logger LOGGER = LoggerFactory.getLogger(RequestBuilderBase.class);
5761
private static final Uri DEFAULT_REQUEST_URL = Uri.create("http://localhost");
5862
public static NameResolver<InetAddress> DEFAULT_NAME_RESOLVER = new DefaultNameResolver(ImmediateEventExecutor.INSTANCE);
63+
public static NameResolver<DomainSocketAddress> DEFAULT_DOMAIN_NAME_RESOLVER = new DefaultDomainNameResolver(ImmediateEventExecutor.INSTANCE);
5964
// builder only fields
6065
protected UriEncoder uriEncoder;
6166
protected List<Param> queryParams;
@@ -64,8 +69,8 @@ public abstract class RequestBuilderBase<T extends RequestBuilderBase<T>> {
6469
// request fields
6570
protected String method;
6671
protected Uri uri;
67-
protected InetAddress address;
68-
protected InetAddress localAddress;
72+
protected SocketAddress address;
73+
protected SocketAddress localAddress;
6974
protected HttpHeaders headers;
7075
protected ArrayList<Cookie> cookies;
7176
protected byte[] byteData;
@@ -87,6 +92,7 @@ public abstract class RequestBuilderBase<T extends RequestBuilderBase<T>> {
8792
protected Charset charset;
8893
protected ChannelPoolPartitioning channelPoolPartitioning = ChannelPoolPartitioning.PerHostChannelPoolPartitioning.INSTANCE;
8994
protected NameResolver<InetAddress> nameResolver = DEFAULT_NAME_RESOLVER;
95+
protected NameResolver<DomainSocketAddress> domainNameResolver = DEFAULT_DOMAIN_NAME_RESOLVER;
9096

9197
protected RequestBuilderBase(String method, boolean disableUrlEncoding) {
9298
this(method, disableUrlEncoding, true);
@@ -136,6 +142,7 @@ protected RequestBuilderBase(Request prototype, boolean disableUrlEncoding, bool
136142
this.charset = prototype.getCharset();
137143
this.channelPoolPartitioning = prototype.getChannelPoolPartitioning();
138144
this.nameResolver = prototype.getNameResolver();
145+
this.domainNameResolver = prototype.getDomainNameResolver();
139146
}
140147

141148
@SuppressWarnings("unchecked")
@@ -144,6 +151,9 @@ private T asDerivedType() {
144151
}
145152

146153
public T setUrl(String url) {
154+
if (!url.contains("://")){
155+
url = "http://127.0.0.1:80" + url;
156+
}
147157
return setUri(Uri.create(url));
148158
}
149159

@@ -153,11 +163,20 @@ public T setUri(Uri uri) {
153163
}
154164

155165
public T setAddress(InetAddress address) {
156-
this.address = address;
166+
this.address = new InetSocketAddress(address,0);
157167
return asDerivedType();
158168
}
159169

160170
public T setLocalAddress(InetAddress address) {
171+
this.localAddress = new InetSocketAddress(address,0);
172+
return asDerivedType();
173+
}
174+
public T setDomainAddress(DomainSocketAddress address) {
175+
this.address = address;
176+
return asDerivedType();
177+
}
178+
179+
public T setDomainLocalAddress(DomainSocketAddress address) {
161180
this.localAddress = address;
162181
return asDerivedType();
163182
}
@@ -534,6 +553,11 @@ public T setNameResolver(NameResolver<InetAddress> nameResolver) {
534553
return asDerivedType();
535554
}
536555

556+
public T setDomainNameResolver(NameResolver<DomainSocketAddress> nameResolver) {
557+
this.domainNameResolver = nameResolver;
558+
return asDerivedType();
559+
}
560+
537561
public T setSignatureCalculator(SignatureCalculator signatureCalculator) {
538562
this.signatureCalculator = signatureCalculator;
539563
return asDerivedType();
@@ -580,6 +604,7 @@ private RequestBuilderBase<?> executeSignatureCalculator() {
580604
rb.charset = this.charset;
581605
rb.channelPoolPartitioning = this.channelPoolPartitioning;
582606
rb.nameResolver = this.nameResolver;
607+
rb.domainNameResolver = this.domainNameResolver;
583608
Request unsignedRequest = rb.build();
584609
signatureCalculator.calculateAndAddSignature(unsignedRequest, rb);
585610
return rb;
@@ -642,6 +667,7 @@ public Request build() {
642667
rb.rangeOffset,
643668
rb.charset,
644669
rb.channelPoolPartitioning,
645-
rb.nameResolver);
670+
rb.nameResolver,
671+
rb.domainNameResolver);
646672
}
647673
}

0 commit comments

Comments
 (0)