public static Platform buildIfSupported() { // Find Jetty's ALPN extension for OpenJDK. try { String alpnClassName = "org.eclipse.jetty.alpn.ALPN"; Class<?> alpnClass = Class.forName(alpnClassName); Class<?> providerClass = Class.forName(alpnClassName + "$Provider"); Class<?> clientProviderClass = Class.forName(alpnClassName + "$ClientProvider"); Class<?> serverProviderClass = Class.forName(alpnClassName + "$ServerProvider"); Method putMethod = alpnClass.getMethod("put", SSLSocket.class, providerClass); Method getMethod = alpnClass.getMethod("get", SSLSocket.class); Method removeMethod = alpnClass.getMethod("remove", SSLSocket.class); return new Jdk8WithJettyBootPlatform( putMethod, getMethod, removeMethod, clientProviderClass, serverProviderClass); } catch (ClassNotFoundException | NoSuchMethodException ignored) { } return null; }
@Override public void configureTlsExtensions( SSLSocket sslSocket, String hostname, List<Protocol> protocols) { List<String> names = alpnProtocolNames(protocols); try { Object alpnProvider = Proxy.newProxyInstance(Platform.class.getClassLoader(), new Class[] {clientProviderClass, serverProviderClass}, new AlpnProvider(names)); putMethod.invoke(null, sslSocket, alpnProvider); } catch (InvocationTargetException | IllegalAccessException e) { throw new AssertionError("failed to set ALPN", e); } }
/** Attempt to match the host runtime to a capable Platform implementation. */ private static Platform findPlatform() { Platform android = AndroidPlatform.buildIfSupported(); if (android != null) { return android; } if (isConscryptPreferred()) { Platform conscrypt = ConscryptPlatform.buildIfSupported(); if (conscrypt != null) { return conscrypt; } } Platform jdk9 = Jdk9Platform.buildIfSupported(); if (jdk9 != null) { return jdk9; } Platform jdkWithJettyBoot = Jdk8WithJettyBootPlatform.buildIfSupported(); if (jdkWithJettyBoot != null) { return jdkWithJettyBoot; } // Probably an Oracle JDK like OpenJDK. return new Platform(); }
/** Attempt to match the host runtime to a capable Platform implementation. */ private static Platform findPlatform() { Platform android = AndroidPlatform.buildIfSupported(); if (android != null) { return android; } if (isConscryptPreferred()) { Platform conscrypt = ConscryptPlatform.buildIfSupported(); if (conscrypt != null) { return conscrypt; } } Platform jdk9 = Jdk9Platform.buildIfSupported(); if (jdk9 != null) { return jdk9; } Platform jdkWithJettyBoot = Jdk8WithJettyBootPlatform.buildIfSupported(); if (jdkWithJettyBoot != null) { return jdkWithJettyBoot; } // Probably an Oracle JDK like OpenJDK. return new Platform(); }
@Override public void configureTlsExtensions( SSLSocket sslSocket, String hostname, List<Protocol> protocols) { List<String> names = alpnProtocolNames(protocols); try { Object alpnProvider = Proxy.newProxyInstance(Platform.class.getClassLoader(), new Class[] {clientProviderClass, serverProviderClass}, new AlpnProvider(names)); putMethod.invoke(null, sslSocket, alpnProvider); } catch (InvocationTargetException | IllegalAccessException e) { throw new AssertionError("failed to set ALPN", e); } }
public static Platform buildIfSupported() { // Find Jetty's ALPN extension for OpenJDK. try { String alpnClassName = "org.eclipse.jetty.alpn.ALPN"; Class<?> alpnClass = Class.forName(alpnClassName); Class<?> providerClass = Class.forName(alpnClassName + "$Provider"); Class<?> clientProviderClass = Class.forName(alpnClassName + "$ClientProvider"); Class<?> serverProviderClass = Class.forName(alpnClassName + "$ServerProvider"); Method putMethod = alpnClass.getMethod("put", SSLSocket.class, providerClass); Method getMethod = alpnClass.getMethod("get", SSLSocket.class); Method removeMethod = alpnClass.getMethod("remove", SSLSocket.class); return new Jdk8WithJettyBootPlatform( putMethod, getMethod, removeMethod, clientProviderClass, serverProviderClass); } catch (ClassNotFoundException | NoSuchMethodException ignored) { } return null; }