Hosts.smali
.class public final Lcom/qiniu/android/dns/local/Hosts;
.super Ljava/lang/Object;
.source "Hosts.java"
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lcom/qiniu/android/dns/local/Hosts$Value;
}
.end annotation
# instance fields
.field private final hosts:Ljava/util/Map;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/Map<",
"Ljava/lang/String;",
"Ljava/util/LinkedList<",
"Lcom/qiniu/android/dns/local/Hosts$Value;",
">;>;"
}
.end annotation
.end field
# direct methods
.method static constructor <clinit>()V
.registers 1
return-void
.end method
.method public constructor <init>()V
.registers 2
.line 16
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 18
new-instance v0, Ljava/util/concurrent/ConcurrentHashMap;
invoke-direct {v0}, Ljava/util/concurrent/ConcurrentHashMap;-><init>()V
iput-object v0, p0, Lcom/qiniu/android/dns/local/Hosts;->hosts:Ljava/util/Map;
return-void
.end method
.method private filter(Ljava/util/LinkedList;Lcom/qiniu/android/dns/NetworkInfo;)Ljava/util/LinkedList;
.registers 9
.param p2, "info" # Lcom/qiniu/android/dns/NetworkInfo;
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Ljava/util/LinkedList<",
"Lcom/qiniu/android/dns/local/Hosts$Value;",
">;",
"Lcom/qiniu/android/dns/NetworkInfo;",
")",
"Ljava/util/LinkedList<",
"Lcom/qiniu/android/dns/local/Hosts$Value;",
">;"
}
.end annotation
.line 35
.local p1, "origin":Ljava/util/LinkedList;, "Ljava/util/LinkedList<Lcom/qiniu/android/dns/local/Hosts$Value;>;"
if-nez p1, :cond_4
.line 36
const/4 v0, 0x0
return-object v0
.line 39
:cond_4
new-instance v0, Ljava/util/LinkedList;
invoke-direct {v0}, Ljava/util/LinkedList;-><init>()V
.line 40
.local v0, "normal":Ljava/util/LinkedList;, "Ljava/util/LinkedList<Lcom/qiniu/android/dns/local/Hosts$Value;>;"
new-instance v1, Ljava/util/LinkedList;
invoke-direct {v1}, Ljava/util/LinkedList;-><init>()V
.line 41
.local v1, "special":Ljava/util/LinkedList;, "Ljava/util/LinkedList<Lcom/qiniu/android/dns/local/Hosts$Value;>;"
invoke-virtual {p1}, Ljava/util/LinkedList;->iterator()Ljava/util/Iterator;
move-result-object v2
:goto_12
invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z
move-result v3
if-eqz v3, :cond_30
invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v3
check-cast v3, Lcom/qiniu/android/dns/local/Hosts$Value;
.line 42
.local v3, "v":Lcom/qiniu/android/dns/local/Hosts$Value;
iget v4, v3, Lcom/qiniu/android/dns/local/Hosts$Value;->provider:I
if-nez v4, :cond_26
.line 43
invoke-virtual {v0, v3}, Ljava/util/LinkedList;->add(Ljava/lang/Object;)Z
goto :goto_2f
.line 44
:cond_26
iget v4, v3, Lcom/qiniu/android/dns/local/Hosts$Value;->provider:I
iget v5, p2, Lcom/qiniu/android/dns/NetworkInfo;->provider:I
if-ne v4, v5, :cond_2f
.line 45
invoke-virtual {v1, v3}, Ljava/util/LinkedList;->add(Ljava/lang/Object;)Z
.line 47
.end local v3 # "v":Lcom/qiniu/android/dns/local/Hosts$Value;
:cond_2f
:goto_2f
goto :goto_12
.line 49
:cond_30
invoke-virtual {v1}, Ljava/util/LinkedList;->size()I
move-result v2
if-eqz v2, :cond_37
.line 50
return-object v1
.line 52
:cond_37
return-object v0
.end method
.method private toRecords(Ljava/util/LinkedList;)[Lcom/qiniu/android/dns/Record;
.registers 7
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Ljava/util/LinkedList<",
"Lcom/qiniu/android/dns/local/Hosts$Value;",
">;)[",
"Lcom/qiniu/android/dns/Record;"
}
.end annotation
.line 56
.local p1, "vals":Ljava/util/LinkedList;, "Ljava/util/LinkedList<Lcom/qiniu/android/dns/local/Hosts$Value;>;"
if-nez p1, :cond_4
.line 57
const/4 v0, 0x0
return-object v0
.line 60
:cond_4
invoke-virtual {p1}, Ljava/util/LinkedList;->size()I
move-result v0
.line 61
.local v0, "size":I
new-instance v1, Ljava/util/ArrayList;
invoke-direct {v1}, Ljava/util/ArrayList;-><init>()V
.line 62
.local v1, "records":Ljava/util/List;, "Ljava/util/List<Lcom/qiniu/android/dns/Record;>;"
const/4 v2, 0x0
.local v2, "i":I
:goto_e
if-ge v2, v0, :cond_2a
.line 63
invoke-virtual {p1, v2}, Ljava/util/LinkedList;->get(I)Ljava/lang/Object;
move-result-object v3
check-cast v3, Lcom/qiniu/android/dns/local/Hosts$Value;
.line 64
.local v3, "v":Lcom/qiniu/android/dns/local/Hosts$Value;
if-eqz v3, :cond_27
iget-object v4, v3, Lcom/qiniu/android/dns/local/Hosts$Value;->record:Lcom/qiniu/android/dns/Record;
if-eqz v4, :cond_27
iget-object v4, v3, Lcom/qiniu/android/dns/local/Hosts$Value;->record:Lcom/qiniu/android/dns/Record;
iget-object v4, v4, Lcom/qiniu/android/dns/Record;->value:Ljava/lang/String;
if-eqz v4, :cond_27
.line 65
iget-object v4, v3, Lcom/qiniu/android/dns/local/Hosts$Value;->record:Lcom/qiniu/android/dns/Record;
invoke-interface {v1, v4}, Ljava/util/List;->add(Ljava/lang/Object;)Z
.line 62
.end local v3 # "v":Lcom/qiniu/android/dns/local/Hosts$Value;
:cond_27
add-int/lit8 v2, v2, 0x1
goto :goto_e
.line 69
.end local v2 # "i":I
:cond_2a
invoke-interface {v1}, Ljava/util/List;->size()I
move-result v2
new-array v2, v2, [Lcom/qiniu/android/dns/Record;
invoke-interface {v1, v2}, Ljava/util/List;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
move-result-object v2
check-cast v2, [Lcom/qiniu/android/dns/Record;
return-object v2
.end method
# virtual methods
.method public put(Ljava/lang/String;Lcom/qiniu/android/dns/Record;)Lcom/qiniu/android/dns/local/Hosts;
.registers 4
.param p1, "domain" # Ljava/lang/String;
.param p2, "record" # Lcom/qiniu/android/dns/Record;
.line 85
new-instance v0, Lcom/qiniu/android/dns/local/Hosts$Value;
invoke-direct {v0, p2}, Lcom/qiniu/android/dns/local/Hosts$Value;-><init>(Lcom/qiniu/android/dns/Record;)V
invoke-virtual {p0, p1, v0}, Lcom/qiniu/android/dns/local/Hosts;->put(Ljava/lang/String;Lcom/qiniu/android/dns/local/Hosts$Value;)Lcom/qiniu/android/dns/local/Hosts;
.line 86
return-object p0
.end method
.method public declared-synchronized put(Ljava/lang/String;Lcom/qiniu/android/dns/local/Hosts$Value;)Lcom/qiniu/android/dns/local/Hosts;
.registers 5
.param p1, "domain" # Ljava/lang/String;
.param p2, "val" # Lcom/qiniu/android/dns/local/Hosts$Value;
monitor-enter p0
.line 74
:try_start_1
iget-object v0, p0, Lcom/qiniu/android/dns/local/Hosts;->hosts:Ljava/util/Map;
invoke-interface {v0, p1}, Ljava/util/Map;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/util/LinkedList;
.line 75
.local v0, "vals":Ljava/util/LinkedList;, "Ljava/util/LinkedList<Lcom/qiniu/android/dns/local/Hosts$Value;>;"
if-nez v0, :cond_11
.line 76
new-instance v1, Ljava/util/LinkedList;
invoke-direct {v1}, Ljava/util/LinkedList;-><init>()V
move-object v0, v1
.line 78
.end local p0 # "this":Lcom/qiniu/android/dns/local/Hosts;
:cond_11
invoke-virtual {v0, p2}, Ljava/util/LinkedList;->add(Ljava/lang/Object;)Z
.line 79
iget-object v1, p0, Lcom/qiniu/android/dns/local/Hosts;->hosts:Ljava/util/Map;
invoke-interface {v1, p1, v0}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
:try_end_19
.catchall {:try_start_1 .. :try_end_19} :catchall_1b
.line 80
monitor-exit p0
return-object p0
.line 73
.end local v0 # "vals":Ljava/util/LinkedList;, "Ljava/util/LinkedList<Lcom/qiniu/android/dns/local/Hosts$Value;>;"
.end local p1 # "domain":Ljava/lang/String;
.end local p2 # "val":Lcom/qiniu/android/dns/local/Hosts$Value;
:catchall_1b
move-exception p1
monitor-exit p0
throw p1
.end method
.method public declared-synchronized query(Lcom/qiniu/android/dns/Domain;Lcom/qiniu/android/dns/NetworkInfo;)[Lcom/qiniu/android/dns/Record;
.registers 6
.param p1, "domain" # Lcom/qiniu/android/dns/Domain;
.param p2, "info" # Lcom/qiniu/android/dns/NetworkInfo;
monitor-enter p0
.line 21
:try_start_1
iget-object v0, p0, Lcom/qiniu/android/dns/local/Hosts;->hosts:Ljava/util/Map;
iget-object v1, p1, Lcom/qiniu/android/dns/Domain;->domain:Ljava/lang/String;
invoke-interface {v0, v1}, Ljava/util/Map;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/util/LinkedList;
.line 22
.local v0, "values":Ljava/util/LinkedList;, "Ljava/util/LinkedList<Lcom/qiniu/android/dns/local/Hosts$Value;>;"
if-eqz v0, :cond_33
invoke-virtual {v0}, Ljava/util/LinkedList;->isEmpty()Z
move-result v1
if-eqz v1, :cond_14
goto :goto_33
.line 25
:cond_14
invoke-virtual {v0}, Ljava/util/LinkedList;->size()I
move-result v1
const/4 v2, 0x1
if-le v1, v2, :cond_28
.line 26
const/4 v1, 0x0
invoke-virtual {v0, v1}, Ljava/util/LinkedList;->get(I)Ljava/lang/Object;
move-result-object v2
check-cast v2, Lcom/qiniu/android/dns/local/Hosts$Value;
.line 27
.local v2, "first":Lcom/qiniu/android/dns/local/Hosts$Value;
invoke-virtual {v0, v1}, Ljava/util/LinkedList;->remove(I)Ljava/lang/Object;
.line 28
invoke-virtual {v0, v2}, Ljava/util/LinkedList;->add(Ljava/lang/Object;)Z
.line 30
.end local v2 # "first":Lcom/qiniu/android/dns/local/Hosts$Value;
.end local p0 # "this":Lcom/qiniu/android/dns/local/Hosts;
:cond_28
invoke-direct {p0, v0, p2}, Lcom/qiniu/android/dns/local/Hosts;->filter(Ljava/util/LinkedList;Lcom/qiniu/android/dns/NetworkInfo;)Ljava/util/LinkedList;
move-result-object v1
move-object v0, v1
.line 31
invoke-direct {p0, v0}, Lcom/qiniu/android/dns/local/Hosts;->toRecords(Ljava/util/LinkedList;)[Lcom/qiniu/android/dns/Record;
move-result-object v1
:try_end_31
.catchall {:try_start_1 .. :try_end_31} :catchall_36
monitor-exit p0
return-object v1
.line 23
:cond_33
:goto_33
const/4 v1, 0x0
monitor-exit p0
return-object v1
.line 20
.end local v0 # "values":Ljava/util/LinkedList;, "Ljava/util/LinkedList<Lcom/qiniu/android/dns/local/Hosts$Value;>;"
.end local p1 # "domain":Lcom/qiniu/android/dns/Domain;
.end local p2 # "info":Lcom/qiniu/android/dns/NetworkInfo;
:catchall_36
move-exception p1
monitor-exit p0
throw p1
.end method