From 1b08fdc2a51735efbd4ae2e466f32b4f8cf72f5e Mon Sep 17 00:00:00 2001 From: jader Date: Thu, 30 Jun 2022 10:48:50 -0300 Subject: [PATCH 1/6] Fix for ipv6 link local with scope --- .../main/java/io/grpc/okhttp/OkHttpProtocolNegotiator.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/okhttp/src/main/java/io/grpc/okhttp/OkHttpProtocolNegotiator.java b/okhttp/src/main/java/io/grpc/okhttp/OkHttpProtocolNegotiator.java index d09d6cccedd..cd44f62fdc2 100644 --- a/okhttp/src/main/java/io/grpc/okhttp/OkHttpProtocolNegotiator.java +++ b/okhttp/src/main/java/io/grpc/okhttp/OkHttpProtocolNegotiator.java @@ -194,7 +194,7 @@ static final class AndroidNegotiator extends OkHttpProtocolNegotiator { try { setServerNamesMethod = SSLParameters.class.getMethod("setServerNames", List.class); sniHostNameConstructor = - Class.forName("javax.net.ssl.SNIHostName").getConstructor(String.class); + Class.forName("javax.net.ssl.SNIHostName").getConstructor(byte[].class); } catch (ClassNotFoundException e) { logger.log(Level.FINER, "Failed to find Android 7.0+ APIs", e); } catch (NoSuchMethodException e) { @@ -249,7 +249,7 @@ protected void configureTlsExtensions( } if (SET_SERVER_NAMES != null && SNI_HOST_NAME != null) { SET_SERVER_NAMES - .invoke(sslParams, Collections.singletonList(SNI_HOST_NAME.newInstance(hostname))); + .invoke(sslParams, Collections.singletonList(SNI_HOST_NAME.newInstance((Object) hostname.getBytes()))); } else { SET_HOSTNAME.invokeOptionalWithoutCheckedException(sslSocket, hostname); } From 875d50940a073416d96a4456f24ecc0911e0e9ea Mon Sep 17 00:00:00 2001 From: jader Date: Thu, 30 Jun 2022 11:29:25 -0300 Subject: [PATCH 2/6] adress pr checks result --- .../src/main/java/io/grpc/okhttp/OkHttpProtocolNegotiator.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/okhttp/src/main/java/io/grpc/okhttp/OkHttpProtocolNegotiator.java b/okhttp/src/main/java/io/grpc/okhttp/OkHttpProtocolNegotiator.java index cd44f62fdc2..eac6828106b 100644 --- a/okhttp/src/main/java/io/grpc/okhttp/OkHttpProtocolNegotiator.java +++ b/okhttp/src/main/java/io/grpc/okhttp/OkHttpProtocolNegotiator.java @@ -30,6 +30,7 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.Socket; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -249,7 +250,7 @@ protected void configureTlsExtensions( } if (SET_SERVER_NAMES != null && SNI_HOST_NAME != null) { SET_SERVER_NAMES - .invoke(sslParams, Collections.singletonList(SNI_HOST_NAME.newInstance((Object) hostname.getBytes()))); + .invoke(sslParams, Collections.singletonList(SNI_HOST_NAME.newInstance((Object) hostname.getBytes(StandardCharsets.UTF_8)))); } else { SET_HOSTNAME.invokeOptionalWithoutCheckedException(sslSocket, hostname); } From bfe869ff6942a8c50ae559445473e1e5bf7752bb Mon Sep 17 00:00:00 2001 From: jader Date: Thu, 30 Jun 2022 11:53:59 -0300 Subject: [PATCH 3/6] add utf8 --- .../main/java/io/grpc/okhttp/OkHttpProtocolNegotiator.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/okhttp/src/main/java/io/grpc/okhttp/OkHttpProtocolNegotiator.java b/okhttp/src/main/java/io/grpc/okhttp/OkHttpProtocolNegotiator.java index eac6828106b..5c58b8cdeca 100644 --- a/okhttp/src/main/java/io/grpc/okhttp/OkHttpProtocolNegotiator.java +++ b/okhttp/src/main/java/io/grpc/okhttp/OkHttpProtocolNegotiator.java @@ -30,7 +30,7 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.Socket; -import java.nio.charset.StandardCharsets; +import com.google.common.base.Charsets; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -250,7 +250,7 @@ protected void configureTlsExtensions( } if (SET_SERVER_NAMES != null && SNI_HOST_NAME != null) { SET_SERVER_NAMES - .invoke(sslParams, Collections.singletonList(SNI_HOST_NAME.newInstance((Object) hostname.getBytes(StandardCharsets.UTF_8)))); + .invoke(sslParams, Collections.singletonList(SNI_HOST_NAME.newInstance((Object) hostname.getBytes(Charsets.UTF_8)))); } else { SET_HOSTNAME.invokeOptionalWithoutCheckedException(sslSocket, hostname); } From 1a998acd3d5dcca0128723b72e39fb4f8eea0645 Mon Sep 17 00:00:00 2001 From: jader Date: Thu, 30 Jun 2022 12:39:44 -0300 Subject: [PATCH 4/6] fix lint check --- .../main/java/io/grpc/okhttp/OkHttpProtocolNegotiator.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/okhttp/src/main/java/io/grpc/okhttp/OkHttpProtocolNegotiator.java b/okhttp/src/main/java/io/grpc/okhttp/OkHttpProtocolNegotiator.java index 5c58b8cdeca..ff96fd10d88 100644 --- a/okhttp/src/main/java/io/grpc/okhttp/OkHttpProtocolNegotiator.java +++ b/okhttp/src/main/java/io/grpc/okhttp/OkHttpProtocolNegotiator.java @@ -19,6 +19,7 @@ import static com.google.common.base.Preconditions.checkNotNull; import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Charsets; import io.grpc.internal.GrpcUtil; import io.grpc.okhttp.internal.OptionalMethod; import io.grpc.okhttp.internal.Platform; @@ -30,7 +31,6 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.Socket; -import com.google.common.base.Charsets; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -250,7 +250,9 @@ protected void configureTlsExtensions( } if (SET_SERVER_NAMES != null && SNI_HOST_NAME != null) { SET_SERVER_NAMES - .invoke(sslParams, Collections.singletonList(SNI_HOST_NAME.newInstance((Object) hostname.getBytes(Charsets.UTF_8)))); + .invoke(sslParams, Collections.singletonList( + SNI_HOST_NAME.newInstance((Object) hostname.getBytes(Charsets.UTF_8))) + ); } else { SET_HOSTNAME.invokeOptionalWithoutCheckedException(sslSocket, hostname); } From 0dd313db57435d8190e9c1051744280b990e57e0 Mon Sep 17 00:00:00 2001 From: jader Date: Thu, 30 Jun 2022 12:53:23 -0300 Subject: [PATCH 5/6] fix identation --- .../src/main/java/io/grpc/okhttp/OkHttpProtocolNegotiator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/okhttp/src/main/java/io/grpc/okhttp/OkHttpProtocolNegotiator.java b/okhttp/src/main/java/io/grpc/okhttp/OkHttpProtocolNegotiator.java index ff96fd10d88..1899cdf5e77 100644 --- a/okhttp/src/main/java/io/grpc/okhttp/OkHttpProtocolNegotiator.java +++ b/okhttp/src/main/java/io/grpc/okhttp/OkHttpProtocolNegotiator.java @@ -252,7 +252,7 @@ protected void configureTlsExtensions( SET_SERVER_NAMES .invoke(sslParams, Collections.singletonList( SNI_HOST_NAME.newInstance((Object) hostname.getBytes(Charsets.UTF_8))) - ); + ); } else { SET_HOSTNAME.invokeOptionalWithoutCheckedException(sslSocket, hostname); } From 7d4ab3c597147d1b91c606126bb28892175691b7 Mon Sep 17 00:00:00 2001 From: jader Date: Thu, 30 Jun 2022 15:40:06 -0300 Subject: [PATCH 6/6] address pr comment --- .../io/grpc/okhttp/OkHttpProtocolNegotiator.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/okhttp/src/main/java/io/grpc/okhttp/OkHttpProtocolNegotiator.java b/okhttp/src/main/java/io/grpc/okhttp/OkHttpProtocolNegotiator.java index 1899cdf5e77..0706a39d028 100644 --- a/okhttp/src/main/java/io/grpc/okhttp/OkHttpProtocolNegotiator.java +++ b/okhttp/src/main/java/io/grpc/okhttp/OkHttpProtocolNegotiator.java @@ -19,7 +19,8 @@ import static com.google.common.base.Preconditions.checkNotNull; import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Charsets; +import com.google.common.net.HostAndPort; +import com.google.common.net.InetAddresses; import io.grpc.internal.GrpcUtil; import io.grpc.okhttp.internal.OptionalMethod; import io.grpc.okhttp.internal.Platform; @@ -195,7 +196,7 @@ static final class AndroidNegotiator extends OkHttpProtocolNegotiator { try { setServerNamesMethod = SSLParameters.class.getMethod("setServerNames", List.class); sniHostNameConstructor = - Class.forName("javax.net.ssl.SNIHostName").getConstructor(byte[].class); + Class.forName("javax.net.ssl.SNIHostName").getConstructor(String.class); } catch (ClassNotFoundException e) { logger.log(Level.FINER, "Failed to find Android 7.0+ APIs", e); } catch (NoSuchMethodException e) { @@ -248,11 +249,11 @@ protected void configureTlsExtensions( } else { SET_USE_SESSION_TICKETS.invokeOptionalWithoutCheckedException(sslSocket, true); } - if (SET_SERVER_NAMES != null && SNI_HOST_NAME != null) { + if (SET_SERVER_NAMES != null + && SNI_HOST_NAME != null + && !InetAddresses.isInetAddress(HostAndPort.fromString(hostname).getHost())) { SET_SERVER_NAMES - .invoke(sslParams, Collections.singletonList( - SNI_HOST_NAME.newInstance((Object) hostname.getBytes(Charsets.UTF_8))) - ); + .invoke(sslParams, Collections.singletonList(SNI_HOST_NAME.newInstance(hostname))); } else { SET_HOSTNAME.invokeOptionalWithoutCheckedException(sslSocket, hostname); }