From 9e66e9637408a61b199e576564ceb33d7de589bd Mon Sep 17 00:00:00 2001 From: Eric Gribkoff Date: Wed, 22 Nov 2017 12:12:08 -0800 Subject: [PATCH 1/2] core,okhttp: handle unresolved proxy addresses --- .../io/grpc/internal/ProxyDetectorImpl.java | 3 ++- .../io/grpc/okhttp/OkHttpClientTransport.java | 8 +++++- .../okhttp/OkHttpClientTransportTest.java | 27 +++++++++++++++++++ 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/io/grpc/internal/ProxyDetectorImpl.java b/core/src/main/java/io/grpc/internal/ProxyDetectorImpl.java index fe38d8ad0c0..48172ebc3db 100644 --- a/core/src/main/java/io/grpc/internal/ProxyDetectorImpl.java +++ b/core/src/main/java/io/grpc/internal/ProxyDetectorImpl.java @@ -184,7 +184,8 @@ private static InetSocketAddress overrideProxy(String proxyHostPort) { + "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); + // Return an unresolved InetSocketAddress to avoid DNS lookup + return InetSocketAddress.createUnresolved(parts[0], port); } /** diff --git a/okhttp/src/main/java/io/grpc/okhttp/OkHttpClientTransport.java b/okhttp/src/main/java/io/grpc/okhttp/OkHttpClientTransport.java index f9b62d9b241..6e504d0a9f6 100644 --- a/okhttp/src/main/java/io/grpc/okhttp/OkHttpClientTransport.java +++ b/okhttp/src/main/java/io/grpc/okhttp/OkHttpClientTransport.java @@ -472,7 +472,13 @@ sslSocketFactory, hostnameVerifier, sock, getOverridenHost(), getOverridenPort() private Socket createHttpProxySocket(InetSocketAddress address, InetSocketAddress proxyAddress, String proxyUsername, String proxyPassword) throws IOException, StatusException { try { - Socket sock = new Socket(proxyAddress.getAddress(), proxyAddress.getPort()); + Socket sock; + // The proxy address may not be resolved + if (proxyAddress.getAddress() != null) { + sock = new Socket(proxyAddress.getAddress(), proxyAddress.getPort()); + } else { + sock = new Socket(proxyAddress.getHostName(), proxyAddress.getPort()); + } sock.setTcpNoDelay(true); Source source = Okio.source(sock); diff --git a/okhttp/src/test/java/io/grpc/okhttp/OkHttpClientTransportTest.java b/okhttp/src/test/java/io/grpc/okhttp/OkHttpClientTransportTest.java index 6a0b9b94794..5bc0ed5d37c 100644 --- a/okhttp/src/test/java/io/grpc/okhttp/OkHttpClientTransportTest.java +++ b/okhttp/src/test/java/io/grpc/okhttp/OkHttpClientTransportTest.java @@ -1569,6 +1569,33 @@ public void proxy_immediateServerClose() throws Exception { verify(transportListener, timeout(TIME_OUT_MS)).transportTerminated(); } + @Test + public void proxy_unresolvedProxyAddress() throws Exception { + clientTransport = new OkHttpClientTransport( + InetSocketAddress.createUnresolved("theservice", 80), + "authority", + "userAgent", + executor, + null, + null, + ConnectionSpec.CLEARTEXT, + DEFAULT_MAX_MESSAGE_SIZE, + InetSocketAddress.createUnresolved("unresolvedproxy", 80), + null, + null, + tooManyPingsRunnable); + clientTransport.start(transportListener); + + ArgumentCaptor captor = ArgumentCaptor.forClass(Status.class); + verify(transportListener, timeout(TIME_OUT_MS)).transportShutdown(captor.capture()); + Status error = captor.getValue(); + assertTrue("Status didn't contain proxy: " + captor.getValue(), + error.getDescription().contains("proxy")); + assertEquals("Not UNAVAILABLE: " + captor.getValue(), + Status.UNAVAILABLE.getCode(), error.getCode()); + verify(transportListener, timeout(TIME_OUT_MS)).transportTerminated(); + } + @Test public void goAway_notUtf8() throws Exception { initTransport(); From 70d42fffa1a29f263507b438f2fe72eae33312df Mon Sep 17 00:00:00 2001 From: Eric Gribkoff Date: Tue, 27 Mar 2018 13:43:42 -0700 Subject: [PATCH 2/2] core: revert ProxyDetectorImpl returns unresolved address --- core/src/main/java/io/grpc/internal/ProxyDetectorImpl.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/core/src/main/java/io/grpc/internal/ProxyDetectorImpl.java b/core/src/main/java/io/grpc/internal/ProxyDetectorImpl.java index 48172ebc3db..fe38d8ad0c0 100644 --- a/core/src/main/java/io/grpc/internal/ProxyDetectorImpl.java +++ b/core/src/main/java/io/grpc/internal/ProxyDetectorImpl.java @@ -184,8 +184,7 @@ private static InetSocketAddress overrideProxy(String proxyHostPort) { + "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 an unresolved InetSocketAddress to avoid DNS lookup - return InetSocketAddress.createUnresolved(parts[0], port); + return new InetSocketAddress(parts[0], port); } /**