diff --git a/reactor-netty-core/src/main/java/reactor/netty/transport/ProxyProvider.java b/reactor-netty-core/src/main/java/reactor/netty/transport/ProxyProvider.java index 9f34080f4..e036780de 100644 --- a/reactor-netty-core/src/main/java/reactor/netty/transport/ProxyProvider.java +++ b/reactor-netty-core/src/main/java/reactor/netty/transport/ProxyProvider.java @@ -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. @@ -63,7 +63,7 @@ public static ProxyProvider.TypeSpec builder() { final String username; final Function password; - final Supplier address; + final Supplier address; final Predicate nonProxyHostPredicate; final Supplier httpHeaders; final Proxy type; @@ -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 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 getSocketAddress() { return this.address; } @@ -125,7 +137,7 @@ public final Predicate 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); @@ -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() && @@ -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()); @@ -233,7 +245,7 @@ public int hashCode() { } private boolean getNonProxyHostsValue() { - return nonProxyHostPredicate.test(getAddress().get()); + return nonProxyHostPredicate.test(getSocketAddress().get()); } @Nullable @@ -385,7 +397,7 @@ static final class Build implements TypeSpec, AddressSpec, Builder { Function password; String host; int port; - Supplier address; + Supplier address; Predicate nonProxyHostPredicate = ALWAYS_PROXY; Supplier httpHeaders = NO_HTTP_HEADERS; Proxy type; @@ -412,6 +424,11 @@ 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; @@ -419,14 +436,26 @@ public final Builder port(int port) { } @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 addressSupplier) { + return socketAddress(addressSupplier); + } + + @Override + public final Builder socketAddress(Supplier addressSupplier) { this.address = Objects.requireNonNull(addressSupplier, "addressSupplier"); return this; } @@ -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 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 addressSupplier) { + throw new UnsupportedOperationException(); + } } public interface Builder { diff --git a/reactor-netty-core/src/test/java/reactor/netty/transport/ProxyProviderTest.java b/reactor-netty-core/src/test/java/reactor/netty/transport/ProxyProviderTest.java index b953e88b8..8a8e4d74c 100644 --- a/reactor-netty-core/src/test/java/reactor/netty/transport/ProxyProviderTest.java +++ b/reactor-netty-core/src/test/java/reactor/netty/transport/ProxyProviderTest.java @@ -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. @@ -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); } @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -587,7 +587,7 @@ void proxyFromSystemProperties_errorWhenSocksVersionInvalid() { private ProxyProvider createProxy(InetSocketAddress address, Function passwordFunc) { return ProxyProvider.builder() .type(ProxyProvider.Proxy.SOCKS5) - .address(address) + .socketAddress(address) .username("netty") .password(passwordFunc) .nonProxyHosts(NON_PROXY_HOSTS) @@ -597,7 +597,7 @@ private ProxyProvider createProxy(InetSocketAddress address, Function authHeader) { return ProxyProvider.builder() .type(ProxyProvider.Proxy.HTTP) - .address(address) + .socketAddress(address) .httpHeaders(authHeader) .build(); } @@ -613,7 +613,7 @@ private ProxyProvider createHeaderProxy(InetSocketAddress address, Consumer> 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 uriTagValue = null; if (config instanceof HttpClientConfig) { acceptGzip = ((HttpClientConfig) config).acceptGzip; diff --git a/reactor-netty-http/src/main/java/reactor/netty/http/client/HttpClientConfig.java b/reactor-netty-http/src/main/java/reactor/netty/http/client/HttpClientConfig.java index b05b1a02f..57ed331c8 100644 --- a/reactor-netty-http/src/main/java/reactor/netty/http/client/HttpClientConfig.java +++ b/reactor-netty-http/src/main/java/reactor/netty/http/client/HttpClientConfig.java @@ -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; }