CustomSSLSocketFactory.smali
.class public Lcom/mopub/network/CustomSSLSocketFactory;
.super Ljavax/net/ssl/SSLSocketFactory;
.source "SourceFile"
# instance fields
.field private mCertificateSocketFactory:Ljavax/net/ssl/SSLSocketFactory;
# direct methods
.method private constructor <init>()V
.registers 1
.line 39
invoke-direct {p0}, Ljavax/net/ssl/SSLSocketFactory;-><init>()V
return-void
.end method
.method private doManualServerNameIdentification(Ljava/net/Socket;Ljava/lang/String;)V
.registers 5
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 161
invoke-static {p1}, Lcom/mopub/common/Preconditions;->checkNotNull(Ljava/lang/Object;)V
.line 163
iget-object v0, p0, Lcom/mopub/network/CustomSSLSocketFactory;->mCertificateSocketFactory:Ljavax/net/ssl/SSLSocketFactory;
if-eqz v0, :cond_16
.line 167
instance-of v1, p1, Ljavax/net/ssl/SSLSocket;
if-eqz v1, :cond_15
.line 168
check-cast p1, Ljavax/net/ssl/SSLSocket;
.line 169
check-cast v0, Landroid/net/SSLCertificateSocketFactory;
invoke-static {v0, p1, p2}, Lcom/mopub/network/CustomSSLSocketFactory;->setHostnameOnSocket(Landroid/net/SSLCertificateSocketFactory;Ljavax/net/ssl/SSLSocket;Ljava/lang/String;)V
.line 171
invoke-static {p1, p2}, Lcom/mopub/network/CustomSSLSocketFactory;->verifyServerName(Ljavax/net/ssl/SSLSocket;Ljava/lang/String;)V
:cond_15
return-void
.line 164
:cond_16
new-instance p1, Ljava/net/SocketException;
const-string p2, "SSLSocketFactory was null. Unable to create socket."
invoke-direct {p1, p2}, Ljava/net/SocketException;-><init>(Ljava/lang/String;)V
throw p1
.end method
.method private enableTlsIfAvailable(Ljava/net/Socket;)V
.registers 3
.line 214
instance-of v0, p1, Ljavax/net/ssl/SSLSocket;
if-eqz v0, :cond_d
.line 215
check-cast p1, Ljavax/net/ssl/SSLSocket;
.line 216
invoke-virtual {p1}, Ljavax/net/ssl/SSLSocket;->getSupportedProtocols()[Ljava/lang/String;
move-result-object v0
.line 219
invoke-virtual {p1, v0}, Ljavax/net/ssl/SSLSocket;->setEnabledProtocols([Ljava/lang/String;)V
:cond_d
return-void
.end method
.method public static getDefault(I)Lcom/mopub/network/CustomSSLSocketFactory;
.registers 3
.line 43
new-instance v0, Lcom/mopub/network/CustomSSLSocketFactory;
invoke-direct {v0}, Lcom/mopub/network/CustomSSLSocketFactory;-><init>()V
const/4 v1, 0x0
.line 44
invoke-static {p0, v1}, Landroid/net/SSLCertificateSocketFactory;->getDefault(ILandroid/net/SSLSessionCache;)Ljavax/net/ssl/SSLSocketFactory;
move-result-object p0
iput-object p0, v0, Lcom/mopub/network/CustomSSLSocketFactory;->mCertificateSocketFactory:Ljavax/net/ssl/SSLSocketFactory;
return-object v0
.end method
.method static setHostnameOnSocket(Landroid/net/SSLCertificateSocketFactory;Ljavax/net/ssl/SSLSocket;Ljava/lang/String;)V
.registers 5
.line 182
invoke-static {p0}, Lcom/mopub/common/Preconditions;->checkNotNull(Ljava/lang/Object;)V
.line 183
invoke-static {p1}, Lcom/mopub/common/Preconditions;->checkNotNull(Ljava/lang/Object;)V
.line 185
sget v0, Landroid/os/Build$VERSION;->SDK_INT:I
const/16 v1, 0x11
if-lt v0, v1, :cond_10
.line 186
invoke-virtual {p0, p1, p2}, Landroid/net/SSLCertificateSocketFactory;->setHostname(Ljava/net/Socket;Ljava/lang/String;)V
return-void
.line 189
:cond_10
:try_start_10
new-instance p0, Lcom/mopub/common/util/Reflection$MethodBuilder;
const-string v0, "setHostname"
invoke-direct {p0, p1, v0}, Lcom/mopub/common/util/Reflection$MethodBuilder;-><init>(Ljava/lang/Object;Ljava/lang/String;)V
const-class p1, Ljava/lang/String;
.line 190
invoke-virtual {p0, p1, p2}, Lcom/mopub/common/util/Reflection$MethodBuilder;->addParam(Ljava/lang/Class;Ljava/lang/Object;)Lcom/mopub/common/util/Reflection$MethodBuilder;
move-result-object p0
.line 191
invoke-virtual {p0}, Lcom/mopub/common/util/Reflection$MethodBuilder;->execute()Ljava/lang/Object;
:try_end_20
.catch Ljava/lang/Exception; {:try_start_10 .. :try_end_20} :catch_21
return-void
.line 193
:catch_21
sget-object p0, Lcom/mopub/common/logging/MoPubLog$SdkLogEvent;->CUSTOM:Lcom/mopub/common/logging/MoPubLog$SdkLogEvent;
const/4 p1, 0x1
new-array p1, p1, [Ljava/lang/Object;
const/4 p2, 0x0
const-string v0, "Unable to call setHostname() on the socket"
aput-object v0, p1, p2
invoke-static {p0, p1}, Lcom/mopub/common/logging/MoPubLog;->log(Lcom/mopub/common/logging/MoPubLog$MPLogEventType;[Ljava/lang/Object;)V
return-void
.end method
.method static verifyServerName(Ljavax/net/ssl/SSLSocket;Ljava/lang/String;)V
.registers 3
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 204
invoke-static {p0}, Lcom/mopub/common/Preconditions;->checkNotNull(Ljava/lang/Object;)V
.line 206
invoke-virtual {p0}, Ljavax/net/ssl/SSLSocket;->startHandshake()V
.line 207
invoke-static {}, Ljavax/net/ssl/HttpsURLConnection;->getDefaultHostnameVerifier()Ljavax/net/ssl/HostnameVerifier;
move-result-object v0
.line 208
invoke-virtual {p0}, Ljavax/net/ssl/SSLSocket;->getSession()Ljavax/net/ssl/SSLSession;
move-result-object p0
invoke-interface {v0, p1, p0}, Ljavax/net/ssl/HostnameVerifier;->verify(Ljava/lang/String;Ljavax/net/ssl/SSLSession;)Z
move-result p0
if-eqz p0, :cond_15
return-void
.line 209
:cond_15
new-instance p0, Ljavax/net/ssl/SSLHandshakeException;
const-string p1, "Server Name Identification failed."
invoke-direct {p0, p1}, Ljavax/net/ssl/SSLHandshakeException;-><init>(Ljava/lang/String;)V
throw p0
.end method
# virtual methods
.method public createSocket()Ljava/net/Socket;
.registers 3
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 54
iget-object v0, p0, Lcom/mopub/network/CustomSSLSocketFactory;->mCertificateSocketFactory:Ljavax/net/ssl/SSLSocketFactory;
if-eqz v0, :cond_c
.line 57
invoke-virtual {v0}, Ljavax/net/ssl/SSLSocketFactory;->createSocket()Ljava/net/Socket;
move-result-object v0
.line 58
invoke-direct {p0, v0}, Lcom/mopub/network/CustomSSLSocketFactory;->enableTlsIfAvailable(Ljava/net/Socket;)V
return-object v0
.line 55
:cond_c
new-instance v0, Ljava/net/SocketException;
const-string v1, "SSLSocketFactory was null. Unable to create socket."
invoke-direct {v0, v1}, Ljava/net/SocketException;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method public createSocket(Ljava/lang/String;I)Ljava/net/Socket;
.registers 4
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/net/UnknownHostException;
}
.end annotation
.line 64
iget-object v0, p0, Lcom/mopub/network/CustomSSLSocketFactory;->mCertificateSocketFactory:Ljavax/net/ssl/SSLSocketFactory;
if-eqz v0, :cond_c
.line 67
invoke-virtual {v0, p1, p2}, Ljavax/net/ssl/SSLSocketFactory;->createSocket(Ljava/lang/String;I)Ljava/net/Socket;
move-result-object p1
.line 68
invoke-direct {p0, p1}, Lcom/mopub/network/CustomSSLSocketFactory;->enableTlsIfAvailable(Ljava/net/Socket;)V
return-object p1
.line 65
:cond_c
new-instance p1, Ljava/net/SocketException;
const-string p2, "SSLSocketFactory was null. Unable to create socket."
invoke-direct {p1, p2}, Ljava/net/SocketException;-><init>(Ljava/lang/String;)V
throw p1
.end method
.method public createSocket(Ljava/lang/String;ILjava/net/InetAddress;I)Ljava/net/Socket;
.registers 6
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/net/UnknownHostException;
}
.end annotation
.line 74
iget-object v0, p0, Lcom/mopub/network/CustomSSLSocketFactory;->mCertificateSocketFactory:Ljavax/net/ssl/SSLSocketFactory;
if-eqz v0, :cond_c
.line 77
invoke-virtual {v0, p1, p2, p3, p4}, Ljavax/net/ssl/SSLSocketFactory;->createSocket(Ljava/lang/String;ILjava/net/InetAddress;I)Ljava/net/Socket;
move-result-object p1
.line 78
invoke-direct {p0, p1}, Lcom/mopub/network/CustomSSLSocketFactory;->enableTlsIfAvailable(Ljava/net/Socket;)V
return-object p1
.line 75
:cond_c
new-instance p1, Ljava/net/SocketException;
const-string p2, "SSLSocketFactory was null. Unable to create socket."
invoke-direct {p1, p2}, Ljava/net/SocketException;-><init>(Ljava/lang/String;)V
throw p1
.end method
.method public createSocket(Ljava/net/InetAddress;I)Ljava/net/Socket;
.registers 4
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 84
iget-object v0, p0, Lcom/mopub/network/CustomSSLSocketFactory;->mCertificateSocketFactory:Ljavax/net/ssl/SSLSocketFactory;
if-eqz v0, :cond_c
.line 87
invoke-virtual {v0, p1, p2}, Ljavax/net/ssl/SSLSocketFactory;->createSocket(Ljava/net/InetAddress;I)Ljava/net/Socket;
move-result-object p1
.line 88
invoke-direct {p0, p1}, Lcom/mopub/network/CustomSSLSocketFactory;->enableTlsIfAvailable(Ljava/net/Socket;)V
return-object p1
.line 85
:cond_c
new-instance p1, Ljava/net/SocketException;
const-string p2, "SSLSocketFactory was null. Unable to create socket."
invoke-direct {p1, p2}, Ljava/net/SocketException;-><init>(Ljava/lang/String;)V
throw p1
.end method
.method public createSocket(Ljava/net/InetAddress;ILjava/net/InetAddress;I)Ljava/net/Socket;
.registers 6
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 94
iget-object v0, p0, Lcom/mopub/network/CustomSSLSocketFactory;->mCertificateSocketFactory:Ljavax/net/ssl/SSLSocketFactory;
if-eqz v0, :cond_c
.line 97
invoke-virtual {v0, p1, p2, p3, p4}, Ljavax/net/ssl/SSLSocketFactory;->createSocket(Ljava/net/InetAddress;ILjava/net/InetAddress;I)Ljava/net/Socket;
move-result-object p1
.line 98
invoke-direct {p0, p1}, Lcom/mopub/network/CustomSSLSocketFactory;->enableTlsIfAvailable(Ljava/net/Socket;)V
return-object p1
.line 95
:cond_c
new-instance p1, Ljava/net/SocketException;
const-string p2, "SSLSocketFactory was null. Unable to create socket."
invoke-direct {p1, p2}, Ljava/net/SocketException;-><init>(Ljava/lang/String;)V
throw p1
.end method
.method public createSocket(Ljava/net/Socket;Ljava/lang/String;IZ)Ljava/net/Socket;
.registers 7
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 122
iget-object v0, p0, Lcom/mopub/network/CustomSSLSocketFactory;->mCertificateSocketFactory:Ljavax/net/ssl/SSLSocketFactory;
if-eqz v0, :cond_2c
.line 128
sget v0, Landroid/os/Build$VERSION;->SDK_INT:I
const/16 v1, 0x17
if-ge v0, v1, :cond_22
if-eqz p4, :cond_11
if-eqz p1, :cond_11
.line 132
invoke-virtual {p1}, Ljava/net/Socket;->close()V
.line 135
:cond_11
iget-object p1, p0, Lcom/mopub/network/CustomSSLSocketFactory;->mCertificateSocketFactory:Ljavax/net/ssl/SSLSocketFactory;
.line 136
invoke-static {p2}, Lcom/mopub/network/InetAddressUtils;->getInetAddressByName(Ljava/lang/String;)Ljava/net/InetAddress;
move-result-object p4
.line 135
invoke-virtual {p1, p4, p3}, Ljavax/net/ssl/SSLSocketFactory;->createSocket(Ljava/net/InetAddress;I)Ljava/net/Socket;
move-result-object p1
.line 137
invoke-direct {p0, p1}, Lcom/mopub/network/CustomSSLSocketFactory;->enableTlsIfAvailable(Ljava/net/Socket;)V
.line 138
invoke-direct {p0, p1, p2}, Lcom/mopub/network/CustomSSLSocketFactory;->doManualServerNameIdentification(Ljava/net/Socket;Ljava/lang/String;)V
return-object p1
.line 142
:cond_22
iget-object v0, p0, Lcom/mopub/network/CustomSSLSocketFactory;->mCertificateSocketFactory:Ljavax/net/ssl/SSLSocketFactory;
invoke-virtual {v0, p1, p2, p3, p4}, Ljavax/net/ssl/SSLSocketFactory;->createSocket(Ljava/net/Socket;Ljava/lang/String;IZ)Ljava/net/Socket;
move-result-object p1
.line 144
invoke-direct {p0, p1}, Lcom/mopub/network/CustomSSLSocketFactory;->enableTlsIfAvailable(Ljava/net/Socket;)V
return-object p1
.line 123
:cond_2c
new-instance p1, Ljava/net/SocketException;
const-string p2, "SSLSocketFactory was null. Unable to create socket."
invoke-direct {p1, p2}, Ljava/net/SocketException;-><init>(Ljava/lang/String;)V
throw p1
.end method
.method public getDefaultCipherSuites()[Ljava/lang/String;
.registers 2
.line 106
iget-object v0, p0, Lcom/mopub/network/CustomSSLSocketFactory;->mCertificateSocketFactory:Ljavax/net/ssl/SSLSocketFactory;
if-nez v0, :cond_8
const/4 v0, 0x0
new-array v0, v0, [Ljava/lang/String;
return-object v0
.line 109
:cond_8
invoke-virtual {v0}, Ljavax/net/ssl/SSLSocketFactory;->getDefaultCipherSuites()[Ljava/lang/String;
move-result-object v0
return-object v0
.end method
.method public getSupportedCipherSuites()[Ljava/lang/String;
.registers 2
.line 114
iget-object v0, p0, Lcom/mopub/network/CustomSSLSocketFactory;->mCertificateSocketFactory:Ljavax/net/ssl/SSLSocketFactory;
if-nez v0, :cond_8
const/4 v0, 0x0
new-array v0, v0, [Ljava/lang/String;
return-object v0
.line 117
:cond_8
invoke-virtual {v0}, Ljavax/net/ssl/SSLSocketFactory;->getSupportedCipherSuites()[Ljava/lang/String;
move-result-object v0
return-object v0
.end method
.method setCertificateSocketFactory(Ljavax/net/ssl/SSLSocketFactory;)V
.registers 2
.annotation runtime Ljava/lang/Deprecated;
.end annotation
.line 226
iput-object p1, p0, Lcom/mopub/network/CustomSSLSocketFactory;->mCertificateSocketFactory:Ljavax/net/ssl/SSLSocketFactory;
return-void
.end method