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);
+ }
+ }
}