public static @Nullable Platform buildIfSupported() { // Attempt to find Android 5+ APIs. Class<?> sslParametersClass; Class<?> sslSocketClass; try { sslParametersClass = Class.forName("com.android.org.conscrypt.SSLParametersImpl"); sslSocketClass = Class.forName("com.android.org.conscrypt.OpenSSLSocketImpl"); } catch (ClassNotFoundException ignored) { return null; // Not an Android runtime. } if (Build.VERSION.SDK_INT >= 21) { try { Method setUseSessionTickets = sslSocketClass.getDeclaredMethod( "setUseSessionTickets", boolean.class); Method setHostname = sslSocketClass.getMethod("setHostname", String.class); Method getAlpnSelectedProtocol = sslSocketClass.getMethod("getAlpnSelectedProtocol"); Method setAlpnProtocols = sslSocketClass.getMethod("setAlpnProtocols", byte[].class); return new AndroidPlatform(sslParametersClass, setUseSessionTickets, setHostname, getAlpnSelectedProtocol, setAlpnProtocols); } catch (NoSuchMethodException ignored) { } } throw new IllegalStateException( "Expected Android API level 21+ but was " + Build.VERSION.SDK_INT); }
public static @Nullable Platform buildIfSupported() { // Attempt to find Android 5+ APIs. Class<?> sslParametersClass; Class<?> sslSocketClass; try { sslParametersClass = Class.forName("com.android.org.conscrypt.SSLParametersImpl"); sslSocketClass = Class.forName("com.android.org.conscrypt.OpenSSLSocketImpl"); } catch (ClassNotFoundException ignored) { return null; // Not an Android runtime. } if (Build.VERSION.SDK_INT >= 21) { try { Method setUseSessionTickets = sslSocketClass.getDeclaredMethod( "setUseSessionTickets", boolean.class); Method setHostname = sslSocketClass.getMethod("setHostname", String.class); Method getAlpnSelectedProtocol = sslSocketClass.getMethod("getAlpnSelectedProtocol"); Method setAlpnProtocols = sslSocketClass.getMethod("setAlpnProtocols", byte[].class); return new AndroidPlatform(sslParametersClass, sslSocketClass, setUseSessionTickets, setHostname, getAlpnSelectedProtocol, setAlpnProtocols); } catch (NoSuchMethodException ignored) { } } throw new IllegalStateException( "Expected Android API level 21+ but was " + Build.VERSION.SDK_INT); }
public static Platform buildIfSupported() { // Attempt to find Android 2.3+ APIs. try { Class<?> sslParametersClass; try { sslParametersClass = Class.forName("com.android.org.conscrypt.SSLParametersImpl"); } catch (ClassNotFoundException e) { // Older platform before being unbundled. sslParametersClass = Class.forName( "org.apache.harmony.xnet.provider.jsse.SSLParametersImpl"); } OptionalMethod<Socket> setUseSessionTickets = new OptionalMethod<>( null, "setUseSessionTickets", boolean.class); OptionalMethod<Socket> setHostname = new OptionalMethod<>( null, "setHostname", String.class); OptionalMethod<Socket> getAlpnSelectedProtocol = null; OptionalMethod<Socket> setAlpnProtocols = null; if (supportsAlpn()) { getAlpnSelectedProtocol = new OptionalMethod<>(byte[].class, "getAlpnSelectedProtocol"); setAlpnProtocols = new OptionalMethod<>(null, "setAlpnProtocols", byte[].class); } return new AndroidPlatform(sslParametersClass, setUseSessionTickets, setHostname, getAlpnSelectedProtocol, setAlpnProtocols); } catch (ClassNotFoundException ignored) { // This isn't an Android runtime. } return null; }
public static Platform buildIfSupported() { // Attempt to find Android 2.3+ APIs. try { Class<?> sslParametersClass; try { sslParametersClass = Class.forName("com.android.org.conscrypt.SSLParametersImpl"); } catch (ClassNotFoundException e) { // Older platform before being unbundled. sslParametersClass = Class.forName( "org.apache.harmony.xnet.provider.jsse.SSLParametersImpl"); } OptionalMethod<Socket> setUseSessionTickets = new OptionalMethod<>( null, "setUseSessionTickets", boolean.class); OptionalMethod<Socket> setHostname = new OptionalMethod<>( null, "setHostname", String.class); OptionalMethod<Socket> getAlpnSelectedProtocol = null; OptionalMethod<Socket> setAlpnProtocols = null; if (supportsAlpn()) { getAlpnSelectedProtocol = new OptionalMethod<>(byte[].class, "getAlpnSelectedProtocol"); setAlpnProtocols = new OptionalMethod<>(null, "setAlpnProtocols", byte[].class); } return new AndroidPlatform(sslParametersClass, setUseSessionTickets, setHostname, getAlpnSelectedProtocol, setAlpnProtocols); } catch (ClassNotFoundException ignored) { // This isn't an Android runtime. } return null; }