public class Platform
extends java.lang.Object
Supported on Android 2.3+.
Supported on OpenJDK 7+
Supported on Android 2.3+.
Supported on Android 4.0+.
Supported on Android 5.0+. The APIs were present in Android 4.4, but that implementation was unstable.
Supported on OpenJDK 8 via the JettyALPN-boot library.
Supported on OpenJDK 9+ via SSLParameters and SSLSocket features.
Supported on Android 2.3+ and OpenJDK 7+. There are no public APIs to recover the trust
manager that was used to create an SSLSocketFactory
.
Supported on Android 6.0+ via NetworkSecurityPolicy
.
Modifier and Type | Field and Description |
---|---|
static int |
INFO |
private static java.util.logging.Logger |
logger |
private static Platform |
PLATFORM |
static int |
WARN |
Constructor and Description |
---|
Platform() |
Modifier and Type | Method and Description |
---|---|
void |
afterHandshake(javax.net.ssl.SSLSocket sslSocket)
Called after the TLS handshake to release resources allocated by
configureTlsExtensions(javax.net.ssl.SSLSocket, java.lang.String, java.util.List<okhttp3.Protocol>) . |
static java.util.List<java.lang.String> |
alpnProtocolNames(java.util.List<Protocol> protocols) |
CertificateChainCleaner |
buildCertificateChainCleaner(javax.net.ssl.SSLSocketFactory sslSocketFactory) |
CertificateChainCleaner |
buildCertificateChainCleaner(javax.net.ssl.X509TrustManager trustManager) |
TrustRootIndex |
buildTrustRootIndex(javax.net.ssl.X509TrustManager trustManager) |
(package private) static byte[] |
concatLengthPrefixed(java.util.List<Protocol> protocols)
Returns the concatenation of 8-bit, length prefixed protocol names.
|
void |
configureSslSocketFactory(javax.net.ssl.SSLSocketFactory socketFactory) |
void |
configureTlsExtensions(javax.net.ssl.SSLSocket sslSocket,
java.lang.String hostname,
java.util.List<Protocol> protocols)
Configure TLS extensions on
sslSocket for route . |
void |
connectSocket(java.net.Socket socket,
java.net.InetSocketAddress address,
int connectTimeout) |
private static Platform |
findPlatform()
Attempt to match the host runtime to a capable Platform implementation.
|
static Platform |
get() |
java.lang.String |
getPrefix()
Prefix used on custom headers.
|
java.lang.String |
getSelectedProtocol(javax.net.ssl.SSLSocket socket)
Returns the negotiated protocol, or null if no protocol was negotiated.
|
javax.net.ssl.SSLContext |
getSSLContext() |
java.lang.Object |
getStackTraceForCloseable(java.lang.String closer)
Returns an object that holds a stack trace created at the moment this method is executed.
|
boolean |
isCleartextTrafficPermitted(java.lang.String hostname) |
static boolean |
isConscryptPreferred() |
void |
log(int level,
java.lang.String message,
java.lang.Throwable t) |
void |
logCloseableLeak(java.lang.String message,
java.lang.Object stackTrace) |
(package private) static <T> T |
readFieldOrNull(java.lang.Object instance,
java.lang.Class<T> fieldType,
java.lang.String fieldName) |
java.lang.String |
toString() |
protected javax.net.ssl.X509TrustManager |
trustManager(javax.net.ssl.SSLSocketFactory sslSocketFactory) |
private static final Platform PLATFORM
public static final int INFO
public static final int WARN
private static final java.util.logging.Logger logger
public static Platform get()
public java.lang.String getPrefix()
@Nullable protected javax.net.ssl.X509TrustManager trustManager(javax.net.ssl.SSLSocketFactory sslSocketFactory)
public void configureTlsExtensions(javax.net.ssl.SSLSocket sslSocket, @Nullable java.lang.String hostname, java.util.List<Protocol> protocols)
sslSocket
for route
.hostname
- non-null for client-side handshakes; null for server-side handshakes.public void afterHandshake(javax.net.ssl.SSLSocket sslSocket)
configureTlsExtensions(javax.net.ssl.SSLSocket, java.lang.String, java.util.List<okhttp3.Protocol>)
.@Nullable public java.lang.String getSelectedProtocol(javax.net.ssl.SSLSocket socket)
public void connectSocket(java.net.Socket socket, java.net.InetSocketAddress address, int connectTimeout) throws java.io.IOException
java.io.IOException
public void log(int level, java.lang.String message, @Nullable java.lang.Throwable t)
public boolean isCleartextTrafficPermitted(java.lang.String hostname)
@Nullable public java.lang.Object getStackTraceForCloseable(java.lang.String closer)
Closeable
objects and in conjunction with
logCloseableLeak(String, Object)
.public void logCloseableLeak(java.lang.String message, java.lang.Object stackTrace)
public static java.util.List<java.lang.String> alpnProtocolNames(java.util.List<Protocol> protocols)
public CertificateChainCleaner buildCertificateChainCleaner(javax.net.ssl.X509TrustManager trustManager)
public CertificateChainCleaner buildCertificateChainCleaner(javax.net.ssl.SSLSocketFactory sslSocketFactory)
public static boolean isConscryptPreferred()
private static Platform findPlatform()
static byte[] concatLengthPrefixed(java.util.List<Protocol> protocols)
@Nullable static <T> T readFieldOrNull(java.lang.Object instance, java.lang.Class<T> fieldType, java.lang.String fieldName)
public javax.net.ssl.SSLContext getSSLContext()
public TrustRootIndex buildTrustRootIndex(javax.net.ssl.X509TrustManager trustManager)
public void configureSslSocketFactory(javax.net.ssl.SSLSocketFactory socketFactory)
public java.lang.String toString()
toString
in class java.lang.Object