OkHttpProtocolNegotiator$AndroidNegotiator.smali
.class final Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator;
.super Lio/grpc/okhttp/OkHttpProtocolNegotiator;
.source "OkHttpProtocolNegotiator.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lio/grpc/okhttp/OkHttpProtocolNegotiator;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x18
name = "AndroidNegotiator"
.end annotation
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator$TlsExtensionType;
}
.end annotation
# static fields
.field private static final DEFAULT_TLS_EXTENSION_TYPE:Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator$TlsExtensionType;
.field private static final GET_ALPN_SELECTED_PROTOCOL:Lio/grpc/okhttp/internal/OptionalMethod;
.annotation system Ldalvik/annotation/Signature;
value = {
"Lio/grpc/okhttp/internal/OptionalMethod<",
"Ljava/net/Socket;",
">;"
}
.end annotation
.end field
.field private static final GET_NPN_SELECTED_PROTOCOL:Lio/grpc/okhttp/internal/OptionalMethod;
.annotation system Ldalvik/annotation/Signature;
value = {
"Lio/grpc/okhttp/internal/OptionalMethod<",
"Ljava/net/Socket;",
">;"
}
.end annotation
.end field
.field private static final SET_ALPN_PROTOCOLS:Lio/grpc/okhttp/internal/OptionalMethod;
.annotation system Ldalvik/annotation/Signature;
value = {
"Lio/grpc/okhttp/internal/OptionalMethod<",
"Ljava/net/Socket;",
">;"
}
.end annotation
.end field
.field private static final SET_HOSTNAME:Lio/grpc/okhttp/internal/OptionalMethod;
.annotation system Ldalvik/annotation/Signature;
value = {
"Lio/grpc/okhttp/internal/OptionalMethod<",
"Ljava/net/Socket;",
">;"
}
.end annotation
.end field
.field private static final SET_NPN_PROTOCOLS:Lio/grpc/okhttp/internal/OptionalMethod;
.annotation system Ldalvik/annotation/Signature;
value = {
"Lio/grpc/okhttp/internal/OptionalMethod<",
"Ljava/net/Socket;",
">;"
}
.end annotation
.end field
.field private static final SET_USE_SESSION_TICKETS:Lio/grpc/okhttp/internal/OptionalMethod;
.annotation system Ldalvik/annotation/Signature;
value = {
"Lio/grpc/okhttp/internal/OptionalMethod<",
"Ljava/net/Socket;",
">;"
}
.end annotation
.end field
# instance fields
.field private final tlsExtensionType:Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator$TlsExtensionType;
# direct methods
.method static constructor <clinit>()V
.registers 7
.line 1
new-instance v0, Lio/grpc/okhttp/internal/OptionalMethod;
const/4 v1, 0x1
new-array v2, v1, [Ljava/lang/Class;
sget-object v3, Ljava/lang/Boolean;->TYPE:Ljava/lang/Class;
const/4 v4, 0x0
aput-object v3, v2, v4
const/4 v3, 0x0
const-string v5, "setUseSessionTickets"
invoke-direct {v0, v3, v5, v2}, Lio/grpc/okhttp/internal/OptionalMethod;-><init>(Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/Class;)V
sput-object v0, Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator;->SET_USE_SESSION_TICKETS:Lio/grpc/okhttp/internal/OptionalMethod;
.line 2
new-instance v0, Lio/grpc/okhttp/internal/OptionalMethod;
new-array v2, v1, [Ljava/lang/Class;
const-class v5, Ljava/lang/String;
aput-object v5, v2, v4
const-string v5, "setHostname"
invoke-direct {v0, v3, v5, v2}, Lio/grpc/okhttp/internal/OptionalMethod;-><init>(Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/Class;)V
sput-object v0, Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator;->SET_HOSTNAME:Lio/grpc/okhttp/internal/OptionalMethod;
.line 3
new-instance v0, Lio/grpc/okhttp/internal/OptionalMethod;
const-class v2, [B
new-array v5, v4, [Ljava/lang/Class;
const-string v6, "getAlpnSelectedProtocol"
invoke-direct {v0, v2, v6, v5}, Lio/grpc/okhttp/internal/OptionalMethod;-><init>(Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/Class;)V
sput-object v0, Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator;->GET_ALPN_SELECTED_PROTOCOL:Lio/grpc/okhttp/internal/OptionalMethod;
.line 4
new-instance v0, Lio/grpc/okhttp/internal/OptionalMethod;
new-array v2, v1, [Ljava/lang/Class;
const-class v5, [B
aput-object v5, v2, v4
const-string v5, "setAlpnProtocols"
invoke-direct {v0, v3, v5, v2}, Lio/grpc/okhttp/internal/OptionalMethod;-><init>(Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/Class;)V
sput-object v0, Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator;->SET_ALPN_PROTOCOLS:Lio/grpc/okhttp/internal/OptionalMethod;
.line 5
new-instance v0, Lio/grpc/okhttp/internal/OptionalMethod;
const-class v2, [B
new-array v5, v4, [Ljava/lang/Class;
const-string v6, "getNpnSelectedProtocol"
invoke-direct {v0, v2, v6, v5}, Lio/grpc/okhttp/internal/OptionalMethod;-><init>(Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/Class;)V
sput-object v0, Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator;->GET_NPN_SELECTED_PROTOCOL:Lio/grpc/okhttp/internal/OptionalMethod;
.line 6
new-instance v0, Lio/grpc/okhttp/internal/OptionalMethod;
new-array v1, v1, [Ljava/lang/Class;
const-class v2, [B
aput-object v2, v1, v4
const-string v2, "setNpnProtocols"
invoke-direct {v0, v3, v2, v1}, Lio/grpc/okhttp/internal/OptionalMethod;-><init>(Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/Class;)V
sput-object v0, Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator;->SET_NPN_PROTOCOLS:Lio/grpc/okhttp/internal/OptionalMethod;
.line 7
const-class v0, Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator;
.line 8
invoke-virtual {v0}, Ljava/lang/Class;->getClassLoader()Ljava/lang/ClassLoader;
move-result-object v0
invoke-static {v0}, Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator;->pickTlsExtensionType(Ljava/lang/ClassLoader;)Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator$TlsExtensionType;
move-result-object v0
sput-object v0, Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator;->DEFAULT_TLS_EXTENSION_TYPE:Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator$TlsExtensionType;
return-void
.end method
.method constructor <init>(Lio/grpc/okhttp/internal/Platform;Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator$TlsExtensionType;)V
.registers 3
.line 1
invoke-direct {p0, p1}, Lio/grpc/okhttp/OkHttpProtocolNegotiator;-><init>(Lio/grpc/okhttp/internal/Platform;)V
const-string p1, "Unable to pick a TLS extension"
.line 2
invoke-static {p2, p1}, Lcom/google/common/base/r;->a(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
check-cast p2, Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator$TlsExtensionType;
iput-object p2, p0, Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator;->tlsExtensionType:Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator$TlsExtensionType;
return-void
.end method
.method static synthetic access$000()Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator$TlsExtensionType;
.registers 1
.line 1
sget-object v0, Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator;->DEFAULT_TLS_EXTENSION_TYPE:Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator$TlsExtensionType;
return-object v0
.end method
.method static pickTlsExtensionType(Ljava/lang/ClassLoader;)Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator$TlsExtensionType;
.registers 2
const-string v0, "GmsCore_OpenSSL"
.line 1
invoke-static {v0}, Ljava/security/Security;->getProvider(Ljava/lang/String;)Ljava/security/Provider;
move-result-object v0
if-eqz v0, :cond_b
.line 2
sget-object p0, Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator$TlsExtensionType;->ALPN_AND_NPN:Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator$TlsExtensionType;
return-object p0
:cond_b
:try_start_b
const-string v0, "android.net.Network"
.line 3
invoke-virtual {p0, v0}, Ljava/lang/ClassLoader;->loadClass(Ljava/lang/String;)Ljava/lang/Class;
.line 4
sget-object p0, Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator$TlsExtensionType;->ALPN_AND_NPN:Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator$TlsExtensionType;
:try_end_12
.catch Ljava/lang/ClassNotFoundException; {:try_start_b .. :try_end_12} :catch_13
return-object p0
:catch_13
:try_start_13
const-string v0, "android.app.ActivityOptions"
.line 5
invoke-virtual {p0, v0}, Ljava/lang/ClassLoader;->loadClass(Ljava/lang/String;)Ljava/lang/Class;
.line 6
sget-object p0, Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator$TlsExtensionType;->NPN:Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator$TlsExtensionType;
:try_end_1a
.catch Ljava/lang/ClassNotFoundException; {:try_start_13 .. :try_end_1a} :catch_1b
return-object p0
:catch_1b
const/4 p0, 0x0
return-object p0
.end method
# virtual methods
.method protected configureTlsExtensions(Ljavax/net/ssl/SSLSocket;Ljava/lang/String;Ljava/util/List;)V
.registers 9
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Ljavax/net/ssl/SSLSocket;",
"Ljava/lang/String;",
"Ljava/util/List<",
"Lio/grpc/okhttp/internal/Protocol;",
">;)V"
}
.end annotation
const/4 v0, 0x0
const/4 v1, 0x1
if-eqz p2, :cond_1a
.line 1
sget-object v2, Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator;->SET_USE_SESSION_TICKETS:Lio/grpc/okhttp/internal/OptionalMethod;
new-array v3, v1, [Ljava/lang/Object;
invoke-static {v1}, Ljava/lang/Boolean;->valueOf(Z)Ljava/lang/Boolean;
move-result-object v4
aput-object v4, v3, v0
invoke-virtual {v2, p1, v3}, Lio/grpc/okhttp/internal/OptionalMethod;->invokeOptionalWithoutCheckedException(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
.line 2
sget-object v2, Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator;->SET_HOSTNAME:Lio/grpc/okhttp/internal/OptionalMethod;
new-array v3, v1, [Ljava/lang/Object;
aput-object p2, v3, v0
invoke-virtual {v2, p1, v3}, Lio/grpc/okhttp/internal/OptionalMethod;->invokeOptionalWithoutCheckedException(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
.line 3
:cond_1a
new-array p2, v1, [Ljava/lang/Object;
invoke-static {p3}, Lio/grpc/okhttp/internal/Platform;->concatLengthPrefixed(Ljava/util/List;)[B
move-result-object p3
aput-object p3, p2, v0
.line 4
iget-object p3, p0, Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator;->tlsExtensionType:Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator$TlsExtensionType;
sget-object v0, Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator$TlsExtensionType;->ALPN_AND_NPN:Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator$TlsExtensionType;
if-ne p3, v0, :cond_2d
.line 5
sget-object p3, Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator;->SET_ALPN_PROTOCOLS:Lio/grpc/okhttp/internal/OptionalMethod;
invoke-virtual {p3, p1, p2}, Lio/grpc/okhttp/internal/OptionalMethod;->invokeWithoutCheckedException(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
.line 6
:cond_2d
iget-object p3, p0, Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator;->tlsExtensionType:Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator$TlsExtensionType;
if-eqz p3, :cond_37
.line 7
sget-object p3, Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator;->SET_NPN_PROTOCOLS:Lio/grpc/okhttp/internal/OptionalMethod;
invoke-virtual {p3, p1, p2}, Lio/grpc/okhttp/internal/OptionalMethod;->invokeWithoutCheckedException(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
return-void
.line 8
:cond_37
new-instance p1, Ljava/lang/RuntimeException;
const-string p2, "We can not do TLS handshake on this Android version, please install the Google Play Services Dynamic Security Provider to use TLS"
invoke-direct {p1, p2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
throw p1
.end method
.method public getSelectedProtocol(Ljavax/net/ssl/SSLSocket;)Ljava/lang/String;
.registers 6
.line 1
iget-object v0, p0, Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator;->tlsExtensionType:Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator$TlsExtensionType;
sget-object v1, Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator$TlsExtensionType;->ALPN_AND_NPN:Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator$TlsExtensionType;
const/4 v2, 0x0
if-ne v0, v1, :cond_1c
.line 2
:try_start_7
sget-object v0, Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator;->GET_ALPN_SELECTED_PROTOCOL:Lio/grpc/okhttp/internal/OptionalMethod;
new-array v1, v2, [Ljava/lang/Object;
.line 3
invoke-virtual {v0, p1, v1}, Lio/grpc/okhttp/internal/OptionalMethod;->invokeWithoutCheckedException(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, [B
if-eqz v0, :cond_1c
.line 4
new-instance v1, Ljava/lang/String;
sget-object v3, Lio/grpc/okhttp/internal/Util;->UTF_8:Ljava/nio/charset/Charset;
invoke-direct {v1, v0, v3}, Ljava/lang/String;-><init>([BLjava/nio/charset/Charset;)V
:try_end_1a
.catch Ljava/lang/Exception; {:try_start_7 .. :try_end_1a} :catch_1b
return-object v1
:catch_1b
nop
.line 5
:cond_1c
iget-object v0, p0, Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator;->tlsExtensionType:Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator$TlsExtensionType;
if-eqz v0, :cond_34
.line 6
:try_start_20
sget-object v0, Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator;->GET_NPN_SELECTED_PROTOCOL:Lio/grpc/okhttp/internal/OptionalMethod;
new-array v1, v2, [Ljava/lang/Object;
.line 7
invoke-virtual {v0, p1, v1}, Lio/grpc/okhttp/internal/OptionalMethod;->invokeWithoutCheckedException(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
move-result-object p1
check-cast p1, [B
if-eqz p1, :cond_34
.line 8
new-instance v0, Ljava/lang/String;
sget-object v1, Lio/grpc/okhttp/internal/Util;->UTF_8:Ljava/nio/charset/Charset;
invoke-direct {v0, p1, v1}, Ljava/lang/String;-><init>([BLjava/nio/charset/Charset;)V
:try_end_33
.catch Ljava/lang/Exception; {:try_start_20 .. :try_end_33} :catch_34
return-object v0
:catch_34
:cond_34
const/4 p1, 0x0
return-object p1
.end method
.method public negotiate(Ljavax/net/ssl/SSLSocket;Ljava/lang/String;Ljava/util/List;)Ljava/lang/String;
.registers 5
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Ljavax/net/ssl/SSLSocket;",
"Ljava/lang/String;",
"Ljava/util/List<",
"Lio/grpc/okhttp/internal/Protocol;",
">;)",
"Ljava/lang/String;"
}
.end annotation
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 1
invoke-virtual {p0, p1}, Lio/grpc/okhttp/OkHttpProtocolNegotiator$AndroidNegotiator;->getSelectedProtocol(Ljavax/net/ssl/SSLSocket;)Ljava/lang/String;
move-result-object v0
if-nez v0, :cond_a
.line 2
invoke-super {p0, p1, p2, p3}, Lio/grpc/okhttp/OkHttpProtocolNegotiator;->negotiate(Ljavax/net/ssl/SSLSocket;Ljava/lang/String;Ljava/util/List;)Ljava/lang/String;
move-result-object v0
:cond_a
return-object v0
.end method