Skip to content

Commit

Permalink
Allow using SocketAddress proxies instead of just InetSocketAddress (#…
Browse files Browse the repository at this point in the history
…3243)

This commit adds new socketAddress methods and tries to keep backwards compat for users using the old address methods, which are deprecated. I'd recommend removing socketAddress and renaming it back to address on the next major release.

Fixes #3242
  • Loading branch information
AlexProgrammerDE committed May 15, 2024
1 parent b7d0a66 commit f390e3f
Show file tree
Hide file tree
Showing 4 changed files with 83 additions and 28 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2017-2023 VMware, Inc. or its affiliates, All Rights Reserved.
* Copyright (c) 2017-2024 VMware, Inc. or its affiliates, All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -63,7 +63,7 @@ public static ProxyProvider.TypeSpec builder() {

final String username;
final Function<? super String, ? extends String> password;
final Supplier<? extends InetSocketAddress> address;
final Supplier<? extends SocketAddress> address;
final Predicate<SocketAddress> nonProxyHostPredicate;
final Supplier<? extends HttpHeaders> httpHeaders;
final Proxy type;
Expand Down Expand Up @@ -102,8 +102,20 @@ public final Proxy getType() {
* The supplier for the address to connect to.
*
* @return The supplier for the address to connect to.
* @deprecated as of 1.2.0. Prefer using {@link #getSocketAddress()}.
* This method will be removed in 1.3.0.
*/
@Deprecated
public final Supplier<? extends InetSocketAddress> getAddress() {
return () -> (InetSocketAddress) address.get();
}

/**
* The supplier for the address to connect to.
*
* @return The supplier for the address to connect to.
*/
public final Supplier<? extends SocketAddress> getSocketAddress() {
return this.address;
}

Expand All @@ -125,7 +137,7 @@ public final Predicate<SocketAddress> getNonProxyHostsPredicate() {
* @return a new eventual {@link ProxyHandler}
*/
public final ProxyHandler newProxyHandler() {
InetSocketAddress proxyAddr = this.address.get();
SocketAddress proxyAddr = this.address.get();

final boolean b = Objects.nonNull(username) && Objects.nonNull(password);

Expand Down Expand Up @@ -212,7 +224,7 @@ public boolean equals(Object o) {
ProxyProvider that = (ProxyProvider) o;
return Objects.equals(username, that.username) &&
Objects.equals(getPasswordValue(), that.getPasswordValue()) &&
Objects.equals(getAddress().get(), that.getAddress().get()) &&
Objects.equals(getSocketAddress().get(), that.getSocketAddress().get()) &&
getNonProxyHostsValue() == that.getNonProxyHostsValue() &&
Objects.equals(httpHeaders.get(), that.httpHeaders.get()) &&
getType() == that.getType() &&
Expand All @@ -224,7 +236,7 @@ public int hashCode() {
int result = 1;
result = 31 * result + Objects.hashCode(username);
result = 31 * result + Objects.hashCode(getPasswordValue());
result = 31 * result + Objects.hashCode(getAddress().get());
result = 31 * result + Objects.hashCode(getSocketAddress().get());
result = 31 * result + Boolean.hashCode(getNonProxyHostsValue());
result = 31 * result + Objects.hashCode(httpHeaders.get());
result = 31 * result + Objects.hashCode(getType());
Expand All @@ -233,7 +245,7 @@ public int hashCode() {
}

private boolean getNonProxyHostsValue() {
return nonProxyHostPredicate.test(getAddress().get());
return nonProxyHostPredicate.test(getSocketAddress().get());
}

@Nullable
Expand Down Expand Up @@ -385,7 +397,7 @@ static final class Build implements TypeSpec, AddressSpec, Builder {
Function<? super String, ? extends String> password;
String host;
int port;
Supplier<? extends InetSocketAddress> address;
Supplier<? extends SocketAddress> address;
Predicate<SocketAddress> nonProxyHostPredicate = ALWAYS_PROXY;
Supplier<? extends HttpHeaders> httpHeaders = NO_HTTP_HEADERS;
Proxy type;
Expand All @@ -412,21 +424,38 @@ public final Builder host(String host) {
return this;
}

@Override
public final Builder address(InetSocketAddress address) {
return socketAddress(address);
}

@Override
public final Builder port(int port) {
this.port = port;
return this;
}

@Override
public final Builder address(InetSocketAddress address) {
public final Builder socketAddress(SocketAddress address) {
Objects.requireNonNull(address, "address");
this.address = () -> AddressUtils.replaceWithResolved(address);
this.address = () -> {
if (address instanceof InetSocketAddress) {
return AddressUtils.replaceWithResolved((InetSocketAddress) address);
}
else {
return address;
}
};
return this;
}

@Override
public final Builder address(Supplier<? extends InetSocketAddress> addressSupplier) {
return socketAddress(addressSupplier);
}

@Override
public final Builder socketAddress(Supplier<? extends SocketAddress> addressSupplier) {
this.address = Objects.requireNonNull(addressSupplier, "addressSupplier");
return this;
}
Expand Down Expand Up @@ -583,16 +612,42 @@ public interface AddressSpec {
*
* @param address The address to connect to.
* @return {@code this}
* @deprecated as of 1.2.0. Prefer using {@link #socketAddress(SocketAddress)}.
* This method will be removed in 1.3.0.
*/
@Deprecated
Builder address(InetSocketAddress address);

/**
* The address to connect to.
*
* @param address The address to connect to.
* @return {@code this}
*/
default Builder socketAddress(SocketAddress address) {
throw new UnsupportedOperationException();
}

/**
* The supplier for the address to connect to.
*
* @param addressSupplier The supplier for the address to connect to.
* @return {@code this}
* @deprecated as of 1.2.0. Prefer using {@link #socketAddress(SocketAddress)}.
* This method will be removed in 1.3.0.
*/
@Deprecated
Builder address(Supplier<? extends InetSocketAddress> addressSupplier);

/**
* The supplier for the address to connect to.
*
* @param addressSupplier The supplier for the address to connect to.
* @return {@code this}
*/
default Builder socketAddress(Supplier<? extends SocketAddress> addressSupplier) {
throw new UnsupportedOperationException();
}
}

public interface Builder {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2019-2022 VMware, Inc. or its affiliates, All Rights Reserved.
* Copyright (c) 2019-2024 VMware, Inc. or its affiliates, All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -106,7 +106,7 @@ void connectTimeoutWithNonPositiveValue() {
void connectTimeoutWithDefault() {
ProxyProvider provider = ProxyProvider.builder()
.type(ProxyProvider.Proxy.SOCKS5)
.address(ADDRESS_1)
.socketAddress(ADDRESS_1)
.build();
assertThat(provider.connectTimeoutMillis).isEqualTo(10000);
}
Expand Down Expand Up @@ -227,7 +227,7 @@ void proxyFromSystemProperties_proxyProviderIsNotNullWhenHttpHostSet() {

assertThat(provider).isNotNull();
assertThat(provider.getType()).isEqualTo(ProxyProvider.Proxy.HTTP);
assertThat(provider.getAddress().get().getHostString()).isEqualTo("host");
assertThat(((InetSocketAddress) provider.getSocketAddress().get()).getHostString()).isEqualTo("host");
}

@Test
Expand All @@ -238,7 +238,7 @@ void proxyFromSystemProperties_port80SetByDefaultForHttpProxy() {
ProxyProvider provider = ProxyProvider.createFrom(properties);

assertThat(provider).isNotNull();
assertThat(provider.getAddress().get().getPort()).isEqualTo(80);
assertThat(((InetSocketAddress) provider.getSocketAddress().get()).getPort()).isEqualTo(80);
}

@Test
Expand All @@ -250,7 +250,7 @@ void proxyFromSystemProperties_parseHttpPortFromSystemProperties() {
ProxyProvider provider = ProxyProvider.createFrom(properties);

assertThat(provider).isNotNull();
assertThat(provider.getAddress().get().getPort()).isEqualTo(8080);
assertThat(((InetSocketAddress) provider.getSocketAddress().get()).getPort()).isEqualTo(8080);
}

@Test
Expand All @@ -262,7 +262,7 @@ void proxyFromSystemProperties_proxySettingsIsNotNullWhenHttpSHostSet() {

assertThat(provider).isNotNull();
assertThat(provider.getType()).isEqualTo(ProxyProvider.Proxy.HTTP);
assertThat(provider.getAddress().get().getHostString()).isEqualTo("host");
assertThat(((InetSocketAddress) provider.getSocketAddress().get()).getHostString()).isEqualTo("host");
}

@Test
Expand All @@ -273,7 +273,7 @@ void proxyFromSystemProperties_port443SetByDefaultForHttpProxy() {
ProxyProvider provider = ProxyProvider.createFrom(properties);

assertThat(provider).isNotNull();
assertThat(provider.getAddress().get().getPort()).isEqualTo(443);
assertThat(((InetSocketAddress) provider.getSocketAddress().get()).getPort()).isEqualTo(443);
}

@Test
Expand All @@ -285,7 +285,7 @@ void proxyFromSystemProperties_parseHttpsPortFromSystemProperties() {
ProxyProvider provider = ProxyProvider.createFrom(properties);

assertThat(provider).isNotNull();
assertThat(provider.getAddress().get().getPort()).isEqualTo(8443);
assertThat(((InetSocketAddress) provider.getSocketAddress().get()).getPort()).isEqualTo(8443);
}

@Test
Expand Down Expand Up @@ -319,7 +319,7 @@ void proxyFromSystemProperties_httpsProxyOverHttpProxy() {
ProxyProvider provider = ProxyProvider.createFrom(properties);

assertThat(provider).isNotNull();
assertThat(provider.getAddress().get().getHostString()).isEqualTo("https");
assertThat(((InetSocketAddress) provider.getSocketAddress().get()).getHostString()).isEqualTo("https");
}

@Test
Expand Down Expand Up @@ -439,7 +439,7 @@ void proxyFromSystemProperties_socksProxy5SetWhenSocksSystemPropertySet() {

assertThat(provider).isNotNull();
assertThat(provider.getType()).isEqualTo(ProxyProvider.Proxy.SOCKS5);
assertThat(provider.getAddress().get().getHostString()).isEqualTo("host");
assertThat(((InetSocketAddress) provider.getSocketAddress().get()).getHostString()).isEqualTo("host");
}

@Test
Expand Down Expand Up @@ -474,7 +474,7 @@ void proxyFromSystemProperties_defaultSocksPort() {
ProxyProvider provider = ProxyProvider.createFrom(properties);

assertThat(provider).isNotNull();
assertThat(provider.getAddress().get().getPort()).isEqualTo(1080);
assertThat(((InetSocketAddress) provider.getSocketAddress().get()).getPort()).isEqualTo(1080);
}

@Test
Expand All @@ -486,7 +486,7 @@ void proxyFromSystemProperties_overrideSocksPortWithCustomProperty() {
ProxyProvider provider = ProxyProvider.createFrom(properties);

assertThat(provider).isNotNull();
assertThat(provider.getAddress().get().getPort()).isEqualTo(2080);
assertThat(((InetSocketAddress) provider.getSocketAddress().get()).getPort()).isEqualTo(2080);
}

@Test
Expand Down Expand Up @@ -587,7 +587,7 @@ void proxyFromSystemProperties_errorWhenSocksVersionInvalid() {
private ProxyProvider createProxy(InetSocketAddress address, Function<String, String> passwordFunc) {
return ProxyProvider.builder()
.type(ProxyProvider.Proxy.SOCKS5)
.address(address)
.socketAddress(address)
.username("netty")
.password(passwordFunc)
.nonProxyHosts(NON_PROXY_HOSTS)
Expand All @@ -597,31 +597,31 @@ private ProxyProvider createProxy(InetSocketAddress address, Function<String, St
private ProxyProvider createNoAuthProxy(InetSocketAddress address) {
return ProxyProvider.builder()
.type(ProxyProvider.Proxy.SOCKS5)
.address(address)
.socketAddress(address)
.nonProxyHosts(NON_PROXY_HOSTS)
.build();
}

private ProxyProvider createHeaderProxy(InetSocketAddress address, Consumer<HttpHeaders> authHeader) {
return ProxyProvider.builder()
.type(ProxyProvider.Proxy.HTTP)
.address(address)
.socketAddress(address)
.httpHeaders(authHeader)
.build();
}

private ProxyProvider createConnectTimeoutProxy(long connectTimeoutMillis) {
return ProxyProvider.builder()
.type(ProxyProvider.Proxy.SOCKS5)
.address(ADDRESS_1)
.socketAddress(ADDRESS_1)
.connectTimeoutMillis(connectTimeoutMillis)
.build();
}

private ProxyProvider createNonProxyHostsProxy(String nonProxyHosts) {
return ProxyProvider.builder()
.type(ProxyProvider.Proxy.HTTP)
.address(ADDRESS_1)
.socketAddress(ADDRESS_1)
.nonProxyHosts(NON_PROXY_HOSTS)
.nonProxyHosts(nonProxyHosts)
.build();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ protected CoreSubscriber<PooledRef<Connection>> createDisposableAcquire(
boolean acceptGzip = false;
ChannelMetricsRecorder metricsRecorder = config.metricsRecorder() != null ? config.metricsRecorder().get() : null;
SocketAddress proxyAddress = ((ClientTransportConfig<?>) config).proxyProvider() != null ?
((ClientTransportConfig<?>) config).proxyProvider().getAddress().get() : null;
((ClientTransportConfig<?>) config).proxyProvider().getSocketAddress().get() : null;
Function<String, String> uriTagValue = null;
if (config instanceof HttpClientConfig) {
acceptGzip = ((HttpClientConfig) config).acceptGzip;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -983,7 +983,7 @@ static final class HttpClientChannelInitializer implements ChannelPipelineConfig
this.metricsRecorder = config.metricsRecorderInternal();
this.opsFactory = config.channelOperationsProvider();
this.protocols = config._protocols;
this.proxyAddress = config.proxyProvider() != null ? config.proxyProvider().getAddress().get() : null;
this.proxyAddress = config.proxyProvider() != null ? config.proxyProvider().getSocketAddress().get() : null;
this.sslProvider = config.sslProvider;
this.uriTagValue = config.uriTagValue;
}
Expand Down

0 comments on commit f390e3f

Please sign in to comment.