Add a utility that checks if the a SslProvider supports ALPN (#9693)
Motivation: We have a public utility `OpenSsl.isAlpnSupported()` that helps users to check if ALPN is available for `SslProvider.OPENSSL`. However, we do not provide a similar utility for `SslProvider.JDK`. Therefore, users who configured ALPN with `SslProvider.JDK` will get a runtime exception at the time when a new connection will be created. Modifications: - Add public `SslProvider.isAlpnSupported(SslProvider)` utility method that returns `true` if the `SslProvider` supports ALPN; - Deprecate `OpenSsl.isAlpnSupported()`; Result: Users can verify if their environment supports ALPN with `SslProvider` upfront (at bootstrap), instead of failing with runtime exception when a new connection will be created.
This commit is contained in:
parent
247a4db470
commit
b3fb2eb27f
@ -148,4 +148,8 @@ public final class JdkAlpnApplicationProtocolNegotiator extends JdkBaseApplicati
|
|||||||
static boolean jdkAlpnSupported() {
|
static boolean jdkAlpnSupported() {
|
||||||
return PlatformDependent.javaVersion() >= 9 && Java9SslUtils.supportsAlpn();
|
return PlatformDependent.javaVersion() >= 9 && Java9SslUtils.supportsAlpn();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static boolean isAlpnSupported() {
|
||||||
|
return AVAILABLE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -432,7 +432,10 @@ public final class OpenSsl {
|
|||||||
/**
|
/**
|
||||||
* Returns {@code true} if the used version of openssl supports
|
* Returns {@code true} if the used version of openssl supports
|
||||||
* <a href="https://tools.ietf.org/html/rfc7301">ALPN</a>.
|
* <a href="https://tools.ietf.org/html/rfc7301">ALPN</a>.
|
||||||
|
*
|
||||||
|
* @deprecated use {@link SslProvider#isAlpnSupported(SslProvider)} with {@link SslProvider#OPENSSL}.
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
public static boolean isAlpnSupported() {
|
public static boolean isAlpnSupported() {
|
||||||
return version() >= 0x10002000L;
|
return version() >= 0x10002000L;
|
||||||
}
|
}
|
||||||
|
@ -35,5 +35,21 @@ public enum SslProvider {
|
|||||||
* OpenSSL-based implementation which does not have finalizers and instead implements {@link ReferenceCounted}.
|
* OpenSSL-based implementation which does not have finalizers and instead implements {@link ReferenceCounted}.
|
||||||
*/
|
*/
|
||||||
@UnstableApi
|
@UnstableApi
|
||||||
OPENSSL_REFCNT
|
OPENSSL_REFCNT;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns {@code true} if the specified {@link SslProvider} supports
|
||||||
|
* <a href="https://tools.ietf.org/html/rfc7301#section-6">TLS ALPN Extension</a>, {@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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user