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 7 and 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 |
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) |
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()
protected javax.net.ssl.X509TrustManager trustManager(javax.net.ssl.SSLSocketFactory sslSocketFactory)
public void configureTlsExtensions(javax.net.ssl.SSLSocket sslSocket, 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, java.lang.Throwable t)
public boolean isCleartextTrafficPermitted(java.lang.String hostname)
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)
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)