Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 2 additions & 44 deletions core/src/main/java/io/grpc/internal/ProxyDetectorImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -147,18 +147,9 @@ public ProxySelector get() {
}
};

/**
* Experimental environment variable name for enabling proxy support.
*
* @deprecated Use the standard Java proxy configuration instead with flags such as:
* -Dhttps.proxyHost=HOST -Dhttps.proxyPort=PORT
*/
@Deprecated
private static final String GRPC_PROXY_ENV_VAR = "GRPC_PROXY_EXP";
// Do not hard code a ProxySelector because the global default ProxySelector can change
private final Supplier<ProxySelector> proxySelector;
private final AuthenticationProvider authenticationProvider;
private final InetSocketAddress overrideProxyAddress;

// We want an HTTPS proxy, which operates on the entire data stream (See IETF rfc2817).
static final String PROXY_SCHEME = "https";
Expand All @@ -168,21 +159,15 @@ public ProxySelector get() {
* {@link ProxyDetectorImpl.AuthenticationProvider} to detect proxy parameters.
*/
public ProxyDetectorImpl() {
this(DEFAULT_PROXY_SELECTOR, DEFAULT_AUTHENTICATOR, System.getenv(GRPC_PROXY_ENV_VAR));
this(DEFAULT_PROXY_SELECTOR, DEFAULT_AUTHENTICATOR);
}

@VisibleForTesting
ProxyDetectorImpl(
Supplier<ProxySelector> proxySelector,
AuthenticationProvider authenticationProvider,
@Nullable String proxyEnvString) {
AuthenticationProvider authenticationProvider) {
this.proxySelector = checkNotNull(proxySelector);
this.authenticationProvider = checkNotNull(authenticationProvider);
if (proxyEnvString != null) {
overrideProxyAddress = overrideProxy(proxyEnvString);
} else {
overrideProxyAddress = null;
}
}

@Nullable
Expand All @@ -191,12 +176,6 @@ public ProxiedSocketAddress proxyFor(SocketAddress targetServerAddress) throws I
if (!(targetServerAddress instanceof InetSocketAddress)) {
return null;
}
if (overrideProxyAddress != null) {
return HttpConnectProxiedSocketAddress.newBuilder()
.setProxyAddress(overrideProxyAddress)
.setTargetAddress((InetSocketAddress) targetServerAddress)
.build();
}
return detectProxy((InetSocketAddress) targetServerAddress);
}

Expand Down Expand Up @@ -272,27 +251,6 @@ private ProxiedSocketAddress detectProxy(InetSocketAddress targetAddr) throws IO
.build();
}

/**
* GRPC_PROXY_EXP is deprecated but let's maintain compatibility for now.
*/
private static InetSocketAddress overrideProxy(String proxyHostPort) {
if (proxyHostPort == null) {
return null;
}

String[] parts = proxyHostPort.split(":", 2);
int port = 80;
if (parts.length > 1) {
port = Integer.parseInt(parts[1]);
}
log.warning(
"Detected GRPC_PROXY_EXP and will honor it, but this feature will "
+ "be removed in a future release. Use the JVM flags "
+ "\"-Dhttps.proxyHost=HOST -Dhttps.proxyPort=PORT\" to set the https proxy for "
+ "this JVM.");
return new InetSocketAddress(parts[0], port);
}

/**
* This interface makes unit testing easier by avoiding direct calls to static methods.
*/
Expand Down
44 changes: 2 additions & 42 deletions core/src/test/java/io/grpc/internal/ProxyDetectorImplTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ public ProxySelector get() {
return proxySelector;
}
};
proxyDetector = new ProxyDetectorImpl(proxySelectorSupplier, authenticator, null);
proxyDetector = new ProxyDetectorImpl(proxySelectorSupplier, authenticator);
unresolvedProxy = InetSocketAddress.createUnresolved("10.0.0.1", proxyPort);
proxySocketAddress = HttpConnectProxiedSocketAddress.newBuilder()
.setTargetAddress(destination)
Expand All @@ -82,45 +82,6 @@ public ProxySelector get() {
.build();
}

@Test
public void override_hostPort() throws Exception {
final String overrideHost = "10.99.99.99";
final int overridePort = 1234;
final String overrideHostWithPort = overrideHost + ":" + overridePort;
ProxyDetectorImpl proxyDetector = new ProxyDetectorImpl(
proxySelectorSupplier,
authenticator,
overrideHostWithPort);
ProxiedSocketAddress detected = proxyDetector.proxyFor(destination);
assertNotNull(detected);
assertEquals(
HttpConnectProxiedSocketAddress.newBuilder()
.setTargetAddress(destination)
.setProxyAddress(
new InetSocketAddress(InetAddress.getByName(overrideHost), overridePort))
.build(),
detected);
}

@Test
public void override_hostOnly() throws Exception {
final String overrideHostWithoutPort = "10.99.99.99";
final int defaultPort = 80;
ProxyDetectorImpl proxyDetector = new ProxyDetectorImpl(
proxySelectorSupplier,
authenticator,
overrideHostWithoutPort);
ProxiedSocketAddress detected = proxyDetector.proxyFor(destination);
assertNotNull(detected);
assertEquals(
HttpConnectProxiedSocketAddress.newBuilder()
.setTargetAddress(destination)
.setProxyAddress(
new InetSocketAddress(InetAddress.getByName(overrideHostWithoutPort), defaultPort))
.build(),
detected);
}

@Test
public void returnNullWhenNoProxy() throws Exception {
when(proxySelector.select(any(URI.class)))
Expand Down Expand Up @@ -227,8 +188,7 @@ public ProxySelector get() {
return null;
}
},
authenticator,
null);
authenticator);
assertNull(proxyDetector.proxyFor(destination));
}
}