AndroidDnsServer$AndroidResolver.smali
.class Lcom/qiniu/android/dns/local/AndroidDnsServer$AndroidResolver;
.super Ljava/lang/Object;
.source "AndroidDnsServer.java"
# interfaces
.implements Lcom/qiniu/android/dns/IResolver;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/qiniu/android/dns/local/AndroidDnsServer;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x8
name = "AndroidResolver"
.end annotation
# instance fields
.field private dnsServers:Ljava/util/List;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/List<",
"Ljava/net/InetAddress;",
">;"
}
.end annotation
.end field
.field private networkCallback:Z
# direct methods
.method static constructor <clinit>()V
.registers 1
return-void
.end method
.method constructor <init>(Landroid/content/Context;)V
.registers 7
.param p1, "context" # Landroid/content/Context;
.line 40
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 36
new-instance v0, Ljava/util/ArrayList;
invoke-direct {v0}, Ljava/util/ArrayList;-><init>()V
iput-object v0, p0, Lcom/qiniu/android/dns/local/AndroidDnsServer$AndroidResolver;->dnsServers:Ljava/util/List;
.line 41
const/4 v0, 0x0
iput-boolean v0, p0, Lcom/qiniu/android/dns/local/AndroidDnsServer$AndroidResolver;->networkCallback:Z
.line 43
invoke-static {}, Lcom/qiniu/android/dns/local/AndroidDnsServer;->getByReflection()Ljava/util/List;
move-result-object v0
.line 44
.local v0, "addresses":Ljava/util/List;, "Ljava/util/List<Ljava/net/InetAddress;>;"
if-nez v0, :cond_17
.line 45
invoke-static {}, Lcom/qiniu/android/dns/local/AndroidDnsServer;->getByCommand()Ljava/util/List;
move-result-object v0
.line 48
:cond_17
if-nez v0, :cond_41
.line 51
sget v1, Landroid/os/Build$VERSION;->SDK_INT:I
const/16 v2, 0x15
if-lt v1, v2, :cond_46
.line 52
nop
.line 53
const-string v1, "connectivity"
invoke-virtual {p1, v1}, Landroid/content/Context;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;
move-result-object v1
check-cast v1, Landroid/net/ConnectivityManager;
.line 55
.local v1, "connectivityManager":Landroid/net/ConnectivityManager;
new-instance v2, Landroid/net/NetworkRequest$Builder;
invoke-direct {v2}, Landroid/net/NetworkRequest$Builder;-><init>()V
.line 56
.local v2, "builder":Landroid/net/NetworkRequest$Builder;
if-eqz v1, :cond_40
.line 58
:try_start_2f
invoke-virtual {v2}, Landroid/net/NetworkRequest$Builder;->build()Landroid/net/NetworkRequest;
move-result-object v3
new-instance v4, Lcom/qiniu/android/dns/local/AndroidDnsServer$AndroidResolver$1;
invoke-direct {v4, p0}, Lcom/qiniu/android/dns/local/AndroidDnsServer$AndroidResolver$1;-><init>(Lcom/qiniu/android/dns/local/AndroidDnsServer$AndroidResolver;)V
invoke-virtual {v1, v3, v4}, Landroid/net/ConnectivityManager;->registerNetworkCallback(Landroid/net/NetworkRequest;Landroid/net/ConnectivityManager$NetworkCallback;)V
:try_end_3b
.catch Ljava/lang/Exception; {:try_start_2f .. :try_end_3b} :catch_3c
.line 73
goto :goto_40
.line 71
:catch_3c
move-exception v3
.line 72
.local v3, "e":Ljava/lang/Exception;
invoke-virtual {v3}, Ljava/lang/Exception;->printStackTrace()V
.line 75
.end local v1 # "connectivityManager":Landroid/net/ConnectivityManager;
.end local v2 # "builder":Landroid/net/NetworkRequest$Builder;
.end local v3 # "e":Ljava/lang/Exception;
:cond_40
:goto_40
goto :goto_46
.line 78
:cond_41
iget-object v1, p0, Lcom/qiniu/android/dns/local/AndroidDnsServer$AndroidResolver;->dnsServers:Ljava/util/List;
invoke-interface {v1, v0}, Ljava/util/List;->addAll(Ljava/util/Collection;)Z
.line 80
:cond_46
:goto_46
return-void
.end method
.method static synthetic access$000(Lcom/qiniu/android/dns/local/AndroidDnsServer$AndroidResolver;)Ljava/util/List;
.registers 2
.param p0, "x0" # Lcom/qiniu/android/dns/local/AndroidDnsServer$AndroidResolver;
.line 34
iget-object v0, p0, Lcom/qiniu/android/dns/local/AndroidDnsServer$AndroidResolver;->dnsServers:Ljava/util/List;
return-object v0
.end method
.method static synthetic access$102(Lcom/qiniu/android/dns/local/AndroidDnsServer$AndroidResolver;Z)Z
.registers 2
.param p0, "x0" # Lcom/qiniu/android/dns/local/AndroidDnsServer$AndroidResolver;
.param p1, "x1" # Z
.line 34
iput-boolean p1, p0, Lcom/qiniu/android/dns/local/AndroidDnsServer$AndroidResolver;->networkCallback:Z
return p1
.end method
# virtual methods
.method public resolve(Lcom/qiniu/android/dns/Domain;Lcom/qiniu/android/dns/NetworkInfo;)[Lcom/qiniu/android/dns/Record;
.registers 12
.param p1, "domain" # Lcom/qiniu/android/dns/Domain;
.param p2, "info" # Lcom/qiniu/android/dns/NetworkInfo;
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 84
iget-object v0, p0, Lcom/qiniu/android/dns/local/AndroidDnsServer$AndroidResolver;->dnsServers:Ljava/util/List;
invoke-interface {v0}, Ljava/util/List;->isEmpty()Z
move-result v0
if-eqz v0, :cond_16
iget-boolean v0, p0, Lcom/qiniu/android/dns/local/AndroidDnsServer$AndroidResolver;->networkCallback:Z
if-nez v0, :cond_16
.line 87
const-wide/16 v0, 0x3e8
:try_start_e
invoke-static {v0, v1}, Ljava/lang/Thread;->sleep(J)V
:try_end_11
.catch Ljava/lang/InterruptedException; {:try_start_e .. :try_end_11} :catch_12
.line 90
goto :goto_16
.line 88
:catch_12
move-exception v0
.line 89
.local v0, "e":Ljava/lang/InterruptedException;
invoke-virtual {v0}, Ljava/lang/InterruptedException;->printStackTrace()V
.line 93
.end local v0 # "e":Ljava/lang/InterruptedException;
:cond_16
:goto_16
iget-object v0, p0, Lcom/qiniu/android/dns/local/AndroidDnsServer$AndroidResolver;->dnsServers:Ljava/util/List;
if-eqz v0, :cond_88
invoke-interface {v0}, Ljava/util/List;->isEmpty()Z
move-result v0
if-nez v0, :cond_88
.line 97
iget-object v0, p0, Lcom/qiniu/android/dns/local/AndroidDnsServer$AndroidResolver;->dnsServers:Ljava/util/List;
const/4 v1, 0x0
invoke-interface {v0, v1}, Ljava/util/List;->get(I)Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/net/InetAddress;
.line 99
.local v0, "dnsServer":Ljava/net/InetAddress;
new-instance v2, Lcom/qiniu/android/dns/local/HijackingDetectWrapper;
new-instance v3, Lcom/qiniu/android/dns/dns/DnsUdpResolver;
invoke-virtual {v0}, Ljava/net/InetAddress;->getHostName()Ljava/lang/String;
move-result-object v4
invoke-direct {v3, v4}, Lcom/qiniu/android/dns/dns/DnsUdpResolver;-><init>(Ljava/lang/String;)V
invoke-direct {v2, v3}, Lcom/qiniu/android/dns/local/HijackingDetectWrapper;-><init>(Lcom/qiniu/android/dns/dns/DnsUdpResolver;)V
.line 100
.local v2, "resolver":Lcom/qiniu/android/dns/IResolver;
invoke-interface {v2, p1, p2}, Lcom/qiniu/android/dns/IResolver;->resolve(Lcom/qiniu/android/dns/Domain;Lcom/qiniu/android/dns/NetworkInfo;)[Lcom/qiniu/android/dns/Record;
move-result-object v3
.line 101
.local v3, "records":[Lcom/qiniu/android/dns/Record;
iget-boolean v4, p1, Lcom/qiniu/android/dns/Domain;->hasCname:Z
if-eqz v4, :cond_60
.line 102
const/4 v4, 0x0
.line 103
.local v4, "cname":Z
array-length v5, v3
const/4 v6, 0x0
:goto_42
if-ge v6, v5, :cond_51
aget-object v7, v3, v6
.line 104
.local v7, "r":Lcom/qiniu/android/dns/Record;
invoke-virtual {v7}, Lcom/qiniu/android/dns/Record;->isCname()Z
move-result v8
if-eqz v8, :cond_4e
.line 105
const/4 v4, 0x1
.line 106
goto :goto_51
.line 103
.end local v7 # "r":Lcom/qiniu/android/dns/Record;
:cond_4e
add-int/lit8 v6, v6, 0x1
goto :goto_42
.line 109
:cond_51
:goto_51
if-eqz v4, :cond_54
goto :goto_60
.line 110
:cond_54
new-instance v1, Lcom/qiniu/android/dns/local/DnshijackingException;
iget-object v5, p1, Lcom/qiniu/android/dns/Domain;->domain:Ljava/lang/String;
.line 111
invoke-virtual {v0}, Ljava/net/InetAddress;->getHostAddress()Ljava/lang/String;
move-result-object v6
invoke-direct {v1, v5, v6}, Lcom/qiniu/android/dns/local/DnshijackingException;-><init>(Ljava/lang/String;Ljava/lang/String;)V
throw v1
.line 114
.end local v4 # "cname":Z
:cond_60
:goto_60
iget v4, p1, Lcom/qiniu/android/dns/Domain;->maxTtl:I
if-eqz v4, :cond_87
.line 115
array-length v4, v3
:goto_65
if-ge v1, v4, :cond_87
aget-object v5, v3, v1
.line 116
.local v5, "r":Lcom/qiniu/android/dns/Record;
invoke-virtual {v5}, Lcom/qiniu/android/dns/Record;->isCname()Z
move-result v6
if-nez v6, :cond_84
.line 117
iget v6, v5, Lcom/qiniu/android/dns/Record;->ttl:I
iget v7, p1, Lcom/qiniu/android/dns/Domain;->maxTtl:I
if-gt v6, v7, :cond_76
goto :goto_84
.line 118
:cond_76
new-instance v1, Lcom/qiniu/android/dns/local/DnshijackingException;
iget-object v4, p1, Lcom/qiniu/android/dns/Domain;->domain:Ljava/lang/String;
.line 119
invoke-virtual {v0}, Ljava/net/InetAddress;->getHostAddress()Ljava/lang/String;
move-result-object v6
iget v7, v5, Lcom/qiniu/android/dns/Record;->ttl:I
invoke-direct {v1, v4, v6, v7}, Lcom/qiniu/android/dns/local/DnshijackingException;-><init>(Ljava/lang/String;Ljava/lang/String;I)V
throw v1
.line 115
.end local v5 # "r":Lcom/qiniu/android/dns/Record;
:cond_84
:goto_84
add-int/lit8 v1, v1, 0x1
goto :goto_65
.line 124
:cond_87
return-object v3
.line 94
.end local v0 # "dnsServer":Ljava/net/InetAddress;
.end local v2 # "resolver":Lcom/qiniu/android/dns/IResolver;
.end local v3 # "records":[Lcom/qiniu/android/dns/Record;
:cond_88
new-instance v0, Ljava/io/IOException;
const-string v1, "cant get local dns server"
invoke-direct {v0, v1}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
goto :goto_91
:goto_90
throw v0
:goto_91
goto :goto_90
.end method