diff --git a/handler/src/main/java/io/netty/handler/ssl/JdkAlpnApplicationProtocolNegotiator.java b/handler/src/main/java/io/netty/handler/ssl/JdkAlpnApplicationProtocolNegotiator.java index 25f7ac8609..7b9cbfbf47 100644 --- a/handler/src/main/java/io/netty/handler/ssl/JdkAlpnApplicationProtocolNegotiator.java +++ b/handler/src/main/java/io/netty/handler/ssl/JdkAlpnApplicationProtocolNegotiator.java @@ -148,4 +148,8 @@ public final class JdkAlpnApplicationProtocolNegotiator extends JdkBaseApplicati static boolean jdkAlpnSupported() { return PlatformDependent.javaVersion() >= 9 && Java9SslUtils.supportsAlpn(); } + + static boolean isAlpnSupported() { + return AVAILABLE; + } } diff --git a/handler/src/main/java/io/netty/handler/ssl/OpenSsl.java b/handler/src/main/java/io/netty/handler/ssl/OpenSsl.java index d28f1e6ad6..16b927a72f 100644 --- a/handler/src/main/java/io/netty/handler/ssl/OpenSsl.java +++ b/handler/src/main/java/io/netty/handler/ssl/OpenSsl.java @@ -406,7 +406,10 @@ public final class OpenSsl { /** * Returns {@code true} if the used version of openssl supports * ALPN. + * + * @deprecated use {@link SslProvider#isAlpnSupported(SslProvider)} with {@link SslProvider#OPENSSL}. */ + @Deprecated public static boolean isAlpnSupported() { return version() >= 0x10002000L; } diff --git a/handler/src/main/java/io/netty/handler/ssl/SslProvider.java b/handler/src/main/java/io/netty/handler/ssl/SslProvider.java index 00fc2aac93..e72cfed8d9 100644 --- a/handler/src/main/java/io/netty/handler/ssl/SslProvider.java +++ b/handler/src/main/java/io/netty/handler/ssl/SslProvider.java @@ -35,5 +35,21 @@ public enum SslProvider { * OpenSSL-based implementation which does not have finalizers and instead implements {@link ReferenceCounted}. */ @UnstableApi - OPENSSL_REFCNT + OPENSSL_REFCNT; + + /** + * Returns {@code true} if the specified {@link SslProvider} supports + * TLS ALPN Extension, {@code false} otherwise. + */ + public static boolean isAlpnSupported(final SslProvider provider) { + switch (provider) { + case JDK: + return JdkAlpnApplicationProtocolNegotiator.isAlpnSupported(); + case OPENSSL: + case OPENSSL_REFCNT: + return OpenSsl.isAlpnSupported(); + default: + throw new Error("Unknown SslProvider: " + provider); + } + } }