DnsResponse.smali
.class Lcom/qiniu/android/dns/dns/DnsResponse;
.super Lcom/qiniu/android/dns/dns/DnsMessage;
.source "DnsResponse.java"
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lcom/qiniu/android/dns/dns/DnsResponse$RecordName;,
Lcom/qiniu/android/dns/dns/DnsResponse$RecordResource;
}
.end annotation
# instance fields
.field private aa:I
.field private additionalArray:Ljava/util/List;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/List<",
"Lcom/qiniu/android/dns/Record;",
">;"
}
.end annotation
.end field
.field private answerArray:Ljava/util/List;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/List<",
"Lcom/qiniu/android/dns/Record;",
">;"
}
.end annotation
.end field
.field private authorityArray:Ljava/util/List;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/List<",
"Lcom/qiniu/android/dns/Record;",
">;"
}
.end annotation
.end field
.field private rCode:I
.field private recordData:[B
.field private request:Lcom/qiniu/android/dns/dns/DnsRequest;
.field private server:Ljava/lang/String;
.field private source:I
.field private timestamp:J
# direct methods
.method static constructor <clinit>()V
.registers 1
return-void
.end method
.method constructor <init>(Ljava/lang/String;ILcom/qiniu/android/dns/dns/DnsRequest;[B)V
.registers 9
.param p1, "server" # Ljava/lang/String;
.param p2, "source" # I
.param p3, "request" # Lcom/qiniu/android/dns/dns/DnsRequest;
.param p4, "recordData" # [B
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 26
invoke-direct {p0}, Lcom/qiniu/android/dns/dns/DnsMessage;-><init>()V
.line 27
if-eqz p4, :cond_22
array-length v0, p4
if-eqz v0, :cond_22
.line 31
iput-object p1, p0, Lcom/qiniu/android/dns/dns/DnsResponse;->server:Ljava/lang/String;
.line 32
iput p2, p0, Lcom/qiniu/android/dns/dns/DnsResponse;->source:I
.line 33
iput-object p3, p0, Lcom/qiniu/android/dns/dns/DnsResponse;->request:Lcom/qiniu/android/dns/dns/DnsRequest;
.line 34
iput-object p4, p0, Lcom/qiniu/android/dns/dns/DnsResponse;->recordData:[B
.line 35
new-instance v0, Ljava/util/Date;
invoke-direct {v0}, Ljava/util/Date;-><init>()V
invoke-virtual {v0}, Ljava/util/Date;->getTime()J
move-result-wide v0
const-wide/16 v2, 0x3e8
div-long/2addr v0, v2
iput-wide v0, p0, Lcom/qiniu/android/dns/dns/DnsResponse;->timestamp:J
.line 36
invoke-direct {p0}, Lcom/qiniu/android/dns/dns/DnsResponse;->parse()V
.line 37
return-void
.line 28
:cond_22
new-instance v0, Ljava/io/IOException;
const-string/jumbo v1, "response data is empty"
invoke-direct {v0, v1}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method private getNameFrom(I)Lcom/qiniu/android/dns/dns/DnsResponse$RecordName;
.registers 11
.param p1, "from" # I
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 145
const/4 v0, 0x0
.line 146
.local v0, "partLength":I
move v1, p1
.line 147
.local v1, "index":I
new-instance v2, Ljava/lang/StringBuilder;
invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
.line 148
.local v2, "name":Ljava/lang/StringBuilder;
new-instance v3, Lcom/qiniu/android/dns/dns/DnsResponse$RecordName;
const/4 v4, 0x0
invoke-direct {v3, v4}, Lcom/qiniu/android/dns/dns/DnsResponse$RecordName;-><init>(Lcom/qiniu/android/dns/dns/DnsResponse$1;)V
.line 150
.local v3, "recordName":Lcom/qiniu/android/dns/dns/DnsResponse$RecordName;
const/16 v5, 0x80
.line 152
.local v5, "maxLoop":I
:cond_f
invoke-direct {p0, v1}, Lcom/qiniu/android/dns/dns/DnsResponse;->readRecordDataInt8(I)I
move-result v0
.line 153
and-int/lit16 v6, v0, 0xc0
const/16 v7, 0xc0
const/4 v8, 0x1
if-ne v6, v7, :cond_33
.line 155
invoke-static {v3}, Lcom/qiniu/android/dns/dns/DnsResponse$RecordName;->access$300(Lcom/qiniu/android/dns/dns/DnsResponse$RecordName;)I
move-result v6
if-ge v6, v8, :cond_26
.line 156
add-int/lit8 v6, v1, 0x2
sub-int/2addr v6, p1
invoke-static {v3, v6}, Lcom/qiniu/android/dns/dns/DnsResponse$RecordName;->access$302(Lcom/qiniu/android/dns/dns/DnsResponse$RecordName;I)I
.line 158
:cond_26
and-int/lit8 v6, v0, 0x3f
shl-int/lit8 v6, v6, 0x8
add-int/lit8 v7, v1, 0x1
invoke-direct {p0, v7}, Lcom/qiniu/android/dns/dns/DnsResponse;->readRecordDataInt8(I)I
move-result v7
or-int v1, v6, v7
.line 159
goto :goto_5c
.line 160
:cond_33
and-int/lit16 v6, v0, 0xc0
if-lez v6, :cond_38
.line 161
return-object v4
.line 163
:cond_38
add-int/lit8 v1, v1, 0x1
.line 166
if-lez v0, :cond_5c
.line 167
invoke-virtual {v2}, Ljava/lang/StringBuilder;->length()I
move-result v6
if-lez v6, :cond_47
.line 168
const-string v6, "."
invoke-virtual {v2, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
.line 171
:cond_47
iget-object v6, p0, Lcom/qiniu/android/dns/dns/DnsResponse;->recordData:[B
add-int v7, v1, v0
invoke-static {v6, v1, v7}, Ljava/util/Arrays;->copyOfRange([BII)[B
move-result-object v6
.line 172
.local v6, "nameData":[B
new-instance v7, Ljava/lang/String;
invoke-direct {v7, v6}, Ljava/lang/String;-><init>([B)V
invoke-static {v7}, Ljava/net/IDN;->toUnicode(Ljava/lang/String;)Ljava/lang/String;
move-result-object v7
invoke-virtual {v2, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
.line 173
add-int/2addr v1, v0
.line 175
.end local v6 # "nameData":[B
:cond_5c
:goto_5c
if-lez v0, :cond_62
add-int/lit8 v5, v5, -0x1
if-gtz v5, :cond_f
.line 177
:cond_62
invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v4
invoke-static {v3, v4}, Lcom/qiniu/android/dns/dns/DnsResponse$RecordName;->access$902(Lcom/qiniu/android/dns/dns/DnsResponse$RecordName;Ljava/lang/String;)Ljava/lang/String;
.line 178
invoke-static {v3}, Lcom/qiniu/android/dns/dns/DnsResponse$RecordName;->access$300(Lcom/qiniu/android/dns/dns/DnsResponse$RecordName;)I
move-result v4
if-ge v4, v8, :cond_74
.line 179
sub-int v4, v1, p1
invoke-static {v3, v4}, Lcom/qiniu/android/dns/dns/DnsResponse$RecordName;->access$302(Lcom/qiniu/android/dns/dns/DnsResponse$RecordName;I)I
.line 181
:cond_74
return-object v3
.end method
.method private parse()V
.registers 8
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 40
iget-object v0, p0, Lcom/qiniu/android/dns/dns/DnsResponse;->recordData:[B
array-length v0, v0
const/16 v1, 0xc
if-lt v0, v1, :cond_5c
.line 45
invoke-direct {p0}, Lcom/qiniu/android/dns/dns/DnsResponse;->parseHeader()V
.line 48
invoke-direct {p0}, Lcom/qiniu/android/dns/dns/DnsResponse;->parseQuestion()I
move-result v0
.line 51
.local v0, "index":I
new-instance v1, Lcom/qiniu/android/dns/dns/DnsResponse$RecordResource;
const/4 v2, 0x6
invoke-direct {p0, v2}, Lcom/qiniu/android/dns/dns/DnsResponse;->readRecordDataInt16(I)S
move-result v2
const/4 v3, 0x0
const-string v4, "answer"
invoke-direct {v1, v4, v2, v0, v3}, Lcom/qiniu/android/dns/dns/DnsResponse$RecordResource;-><init>(Ljava/lang/String;IILcom/qiniu/android/dns/dns/DnsResponse$1;)V
.line 52
.local v1, "answer":Lcom/qiniu/android/dns/dns/DnsResponse$RecordResource;
invoke-direct {p0, v1}, Lcom/qiniu/android/dns/dns/DnsResponse;->parseResourceRecord(Lcom/qiniu/android/dns/dns/DnsResponse$RecordResource;)V
.line 53
invoke-static {v1}, Lcom/qiniu/android/dns/dns/DnsResponse$RecordResource;->access$100(Lcom/qiniu/android/dns/dns/DnsResponse$RecordResource;)Ljava/util/List;
move-result-object v2
iput-object v2, p0, Lcom/qiniu/android/dns/dns/DnsResponse;->answerArray:Ljava/util/List;
.line 54
invoke-static {v1}, Lcom/qiniu/android/dns/dns/DnsResponse$RecordResource;->access$200(Lcom/qiniu/android/dns/dns/DnsResponse$RecordResource;)I
move-result v2
add-int/2addr v0, v2
.line 57
new-instance v2, Lcom/qiniu/android/dns/dns/DnsResponse$RecordResource;
const/16 v4, 0x8
invoke-direct {p0, v4}, Lcom/qiniu/android/dns/dns/DnsResponse;->readRecordDataInt16(I)S
move-result v4
const-string v5, "authority"
invoke-direct {v2, v5, v4, v0, v3}, Lcom/qiniu/android/dns/dns/DnsResponse$RecordResource;-><init>(Ljava/lang/String;IILcom/qiniu/android/dns/dns/DnsResponse$1;)V
.line 58
.local v2, "authority":Lcom/qiniu/android/dns/dns/DnsResponse$RecordResource;
invoke-direct {p0, v2}, Lcom/qiniu/android/dns/dns/DnsResponse;->parseResourceRecord(Lcom/qiniu/android/dns/dns/DnsResponse$RecordResource;)V
.line 59
invoke-static {v2}, Lcom/qiniu/android/dns/dns/DnsResponse$RecordResource;->access$100(Lcom/qiniu/android/dns/dns/DnsResponse$RecordResource;)Ljava/util/List;
move-result-object v4
iput-object v4, p0, Lcom/qiniu/android/dns/dns/DnsResponse;->authorityArray:Ljava/util/List;
.line 60
invoke-static {v2}, Lcom/qiniu/android/dns/dns/DnsResponse$RecordResource;->access$200(Lcom/qiniu/android/dns/dns/DnsResponse$RecordResource;)I
move-result v4
add-int/2addr v0, v4
.line 63
new-instance v4, Lcom/qiniu/android/dns/dns/DnsResponse$RecordResource;
const/16 v5, 0xa
invoke-direct {p0, v5}, Lcom/qiniu/android/dns/dns/DnsResponse;->readRecordDataInt16(I)S
move-result v5
const-string v6, "additional"
invoke-direct {v4, v6, v5, v0, v3}, Lcom/qiniu/android/dns/dns/DnsResponse$RecordResource;-><init>(Ljava/lang/String;IILcom/qiniu/android/dns/dns/DnsResponse$1;)V
move-object v3, v4
.line 64
.local v3, "additional":Lcom/qiniu/android/dns/dns/DnsResponse$RecordResource;
invoke-direct {p0, v3}, Lcom/qiniu/android/dns/dns/DnsResponse;->parseResourceRecord(Lcom/qiniu/android/dns/dns/DnsResponse$RecordResource;)V
.line 65
invoke-static {v3}, Lcom/qiniu/android/dns/dns/DnsResponse$RecordResource;->access$100(Lcom/qiniu/android/dns/dns/DnsResponse$RecordResource;)Ljava/util/List;
move-result-object v4
iput-object v4, p0, Lcom/qiniu/android/dns/dns/DnsResponse;->additionalArray:Ljava/util/List;
.line 66
return-void
.line 41
.end local v0 # "index":I
.end local v1 # "answer":Lcom/qiniu/android/dns/dns/DnsResponse$RecordResource;
.end local v2 # "authority":Lcom/qiniu/android/dns/dns/DnsResponse$RecordResource;
.end local v3 # "additional":Lcom/qiniu/android/dns/dns/DnsResponse$RecordResource;
:cond_5c
new-instance v0, Ljava/io/IOException;
const-string/jumbo v1, "response data too small"
invoke-direct {v0, v1}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method private parseHeader()V
.registers 5
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 69
const/4 v0, 0x0
invoke-direct {p0, v0}, Lcom/qiniu/android/dns/dns/DnsResponse;->readRecordDataInt16(I)S
move-result v0
iput-short v0, p0, Lcom/qiniu/android/dns/dns/DnsResponse;->messageId:S
.line 72
iget-short v0, p0, Lcom/qiniu/android/dns/dns/DnsResponse;->messageId:S
iget-object v1, p0, Lcom/qiniu/android/dns/dns/DnsResponse;->request:Lcom/qiniu/android/dns/dns/DnsRequest;
iget-short v1, v1, Lcom/qiniu/android/dns/dns/DnsRequest;->messageId:S
if-ne v0, v1, :cond_44
.line 78
const/4 v0, 0x2
invoke-direct {p0, v0}, Lcom/qiniu/android/dns/dns/DnsResponse;->readRecordDataInt8(I)I
move-result v1
.line 79
.local v1, "field0":I
invoke-direct {p0, v0}, Lcom/qiniu/android/dns/dns/DnsResponse;->readRecordDataInt8(I)I
move-result v0
and-int/lit16 v0, v0, 0x80
.line 81
.local v0, "qr":I
if-eqz v0, :cond_3c
.line 85
shr-int/lit8 v2, v1, 0x3
and-int/lit8 v2, v2, 0x7
iput v2, p0, Lcom/qiniu/android/dns/dns/DnsResponse;->opCode:I
.line 86
shr-int/lit8 v2, v1, 0x2
and-int/lit8 v2, v2, 0x1
iput v2, p0, Lcom/qiniu/android/dns/dns/DnsResponse;->aa:I
.line 87
and-int/lit8 v2, v1, 0x1
iput v2, p0, Lcom/qiniu/android/dns/dns/DnsResponse;->rd:I
.line 91
const/4 v2, 0x3
invoke-direct {p0, v2}, Lcom/qiniu/android/dns/dns/DnsResponse;->readRecordDataInt8(I)I
move-result v2
.line 92
.local v2, "field1":I
shr-int/lit8 v3, v2, 0x7
and-int/lit8 v3, v3, 0x1
iput v3, p0, Lcom/qiniu/android/dns/dns/DnsResponse;->ra:I
.line 93
and-int/lit8 v3, v2, 0xf
iput v3, p0, Lcom/qiniu/android/dns/dns/DnsResponse;->rCode:I
.line 94
return-void
.line 82
.end local v2 # "field1":I
:cond_3c
new-instance v2, Ljava/io/IOException;
const-string v3, "not a response data"
invoke-direct {v2, v3}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
throw v2
.line 73
.end local v0 # "qr":I
.end local v1 # "field0":I
:cond_44
new-instance v0, Ljava/io/IOException;
const-string/jumbo v1, "question id error"
invoke-direct {v0, v1}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method private parseQuestion()I
.registers 6
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 97
const/16 v0, 0xc
.line 98
.local v0, "index":I
const/4 v1, 0x4
invoke-direct {p0, v1}, Lcom/qiniu/android/dns/dns/DnsResponse;->readRecordDataInt16(I)S
move-result v2
.line 99
.local v2, "qdCount":I
:goto_7
if-lez v2, :cond_22
.line 100
invoke-direct {p0, v0}, Lcom/qiniu/android/dns/dns/DnsResponse;->getNameFrom(I)Lcom/qiniu/android/dns/dns/DnsResponse$RecordName;
move-result-object v3
.line 101
.local v3, "recordName":Lcom/qiniu/android/dns/dns/DnsResponse$RecordName;
if-eqz v3, :cond_19
.line 105
invoke-static {v3}, Lcom/qiniu/android/dns/dns/DnsResponse$RecordName;->access$300(Lcom/qiniu/android/dns/dns/DnsResponse$RecordName;)I
move-result v4
add-int/2addr v4, v1
add-int/2addr v0, v4
.line 106
nop
.end local v3 # "recordName":Lcom/qiniu/android/dns/dns/DnsResponse$RecordName;
add-int/lit8 v2, v2, -0x1
.line 107
goto :goto_7
.line 102
.restart local v3 # "recordName":Lcom/qiniu/android/dns/dns/DnsResponse$RecordName;
:cond_19
new-instance v1, Ljava/io/IOException;
const-string/jumbo v4, "read Question error"
invoke-direct {v1, v4}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
throw v1
.line 108
.end local v3 # "recordName":Lcom/qiniu/android/dns/dns/DnsResponse$RecordName;
:cond_22
return v0
.end method
.method private parseResourceRecord(Lcom/qiniu/android/dns/dns/DnsResponse$RecordResource;)V
.registers 22
.param p1, "resource" # Lcom/qiniu/android/dns/dns/DnsResponse$RecordResource;
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 112
move-object/from16 v0, p0
move-object/from16 v1, p1
invoke-static/range {p1 .. p1}, Lcom/qiniu/android/dns/dns/DnsResponse$RecordResource;->access$400(Lcom/qiniu/android/dns/dns/DnsResponse$RecordResource;)I
move-result v2
.line 113
.local v2, "index":I
invoke-static/range {p1 .. p1}, Lcom/qiniu/android/dns/dns/DnsResponse$RecordResource;->access$500(Lcom/qiniu/android/dns/dns/DnsResponse$RecordResource;)I
move-result v3
.line 115
.local v3, "count":I
:goto_c
if-lez v3, :cond_8b
.line 116
invoke-direct {v0, v2}, Lcom/qiniu/android/dns/dns/DnsResponse;->getNameFrom(I)Lcom/qiniu/android/dns/dns/DnsResponse$RecordName;
move-result-object v4
.line 117
.local v4, "recordName":Lcom/qiniu/android/dns/dns/DnsResponse$RecordName;
if-eqz v4, :cond_6a
.line 121
invoke-static {v4}, Lcom/qiniu/android/dns/dns/DnsResponse$RecordName;->access$300(Lcom/qiniu/android/dns/dns/DnsResponse$RecordName;)I
move-result v5
add-int/2addr v2, v5
.line 123
invoke-direct {v0, v2}, Lcom/qiniu/android/dns/dns/DnsResponse;->readRecordDataInt16(I)S
move-result v13
.line 124
.local v13, "type":I
add-int/lit8 v2, v2, 0x2
.line 125
invoke-direct {v0, v2}, Lcom/qiniu/android/dns/dns/DnsResponse;->readRecordDataInt16(I)S
move-result v14
.line 126
.local v14, "clazz":I
add-int/lit8 v2, v2, 0x2
.line 127
invoke-direct {v0, v2}, Lcom/qiniu/android/dns/dns/DnsResponse;->readRecordDataInt32(I)I
move-result v15
.line 128
.local v15, "ttl":I
add-int/lit8 v2, v2, 0x4
.line 129
invoke-direct {v0, v2}, Lcom/qiniu/android/dns/dns/DnsResponse;->readRecordDataInt16(I)S
move-result v12
.line 130
.local v12, "rdLength":I
add-int/lit8 v2, v2, 0x2
.line 131
invoke-direct {v0, v13, v2, v12}, Lcom/qiniu/android/dns/dns/DnsResponse;->readData(III)Ljava/lang/String;
move-result-object v16
.line 133
.local v16, "value":Ljava/lang/String;
const/4 v5, 0x1
if-ne v14, v5, :cond_62
const/4 v5, 0x5
if-eq v13, v5, :cond_47
iget-object v5, v0, Lcom/qiniu/android/dns/dns/DnsResponse;->request:Lcom/qiniu/android/dns/dns/DnsRequest;
invoke-virtual {v5}, Lcom/qiniu/android/dns/dns/DnsRequest;->getRecordType()I
move-result v5
if-ne v13, v5, :cond_44
goto :goto_47
:cond_44
move/from16 v19, v12
goto :goto_64
.line 134
:cond_47
:goto_47
new-instance v17, Lcom/qiniu/android/dns/Record;
iget-wide v9, v0, Lcom/qiniu/android/dns/dns/DnsResponse;->timestamp:J
iget v11, v0, Lcom/qiniu/android/dns/dns/DnsResponse;->source:I
iget-object v8, v0, Lcom/qiniu/android/dns/dns/DnsResponse;->server:Ljava/lang/String;
move-object/from16 v5, v17
move-object/from16 v6, v16
move v7, v13
move-object/from16 v18, v8
move v8, v15
move/from16 v19, v12
.end local v12 # "rdLength":I
.local v19, "rdLength":I
move-object/from16 v12, v18
invoke-direct/range {v5 .. v12}, Lcom/qiniu/android/dns/Record;-><init>(Ljava/lang/String;IIJILjava/lang/String;)V
.line 135
.local v5, "record":Lcom/qiniu/android/dns/Record;
invoke-static {v1, v5}, Lcom/qiniu/android/dns/dns/DnsResponse$RecordResource;->access$700(Lcom/qiniu/android/dns/dns/DnsResponse$RecordResource;Lcom/qiniu/android/dns/Record;)V
goto :goto_64
.line 133
.end local v5 # "record":Lcom/qiniu/android/dns/Record;
.end local v19 # "rdLength":I
.restart local v12 # "rdLength":I
:cond_62
move/from16 v19, v12
.line 138
.end local v12 # "rdLength":I
.restart local v19 # "rdLength":I
:goto_64
add-int v2, v2, v19
.line 139
nop
.end local v4 # "recordName":Lcom/qiniu/android/dns/dns/DnsResponse$RecordName;
.end local v13 # "type":I
.end local v14 # "clazz":I
.end local v15 # "ttl":I
.end local v16 # "value":Ljava/lang/String;
.end local v19 # "rdLength":I
add-int/lit8 v3, v3, -0x1
.line 140
goto :goto_c
.line 118
.restart local v4 # "recordName":Lcom/qiniu/android/dns/dns/DnsResponse$RecordName;
:cond_6a
new-instance v5, Ljava/io/IOException;
new-instance v6, Ljava/lang/StringBuilder;
invoke-direct {v6}, Ljava/lang/StringBuilder;-><init>()V
const-string/jumbo v7, "read "
invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-static/range {p1 .. p1}, Lcom/qiniu/android/dns/dns/DnsResponse$RecordResource;->access$600(Lcom/qiniu/android/dns/dns/DnsResponse$RecordResource;)Ljava/lang/String;
move-result-object v7
invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
const-string v7, " error"
invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v6}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v6
invoke-direct {v5, v6}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
throw v5
.line 141
.end local v4 # "recordName":Lcom/qiniu/android/dns/dns/DnsResponse$RecordName;
:cond_8b
invoke-static/range {p1 .. p1}, Lcom/qiniu/android/dns/dns/DnsResponse$RecordResource;->access$400(Lcom/qiniu/android/dns/dns/DnsResponse$RecordResource;)I
move-result v4
sub-int v4, v2, v4
invoke-static {v1, v4}, Lcom/qiniu/android/dns/dns/DnsResponse$RecordResource;->access$202(Lcom/qiniu/android/dns/dns/DnsResponse$RecordResource;I)I
.line 142
return-void
.end method
.method private readData(III)Ljava/lang/String;
.registers 10
.param p1, "recordType" # I
.param p2, "from" # I
.param p3, "length" # I
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 185
const/4 v0, 0x0
.line 186
.local v0, "dataString":Ljava/lang/String;
const/4 v1, 0x1
if-eq p1, v1, :cond_64
const/4 v2, 0x5
if-eq p1, v2, :cond_59
const/16 v2, 0x10
if-eq p1, v2, :cond_40
const/16 v3, 0x1c
if-eq p1, v3, :cond_11
goto/16 :goto_8b
.line 200
:cond_11
if-ne p3, v2, :cond_8b
.line 201
new-instance v3, Ljava/lang/StringBuilder;
invoke-direct {v3}, Ljava/lang/StringBuilder;-><init>()V
.line 202
.local v3, "builder":Ljava/lang/StringBuilder;
const/4 v4, 0x0
.local v4, "i":I
:goto_19
if-ge v4, v2, :cond_3b
.line 203
if-lez v4, :cond_20
const-string v5, ":"
goto :goto_22
:cond_20
const-string v5, ""
:goto_22
invoke-virtual {v3, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
.line 204
add-int v5, p2, v4
invoke-direct {p0, v5}, Lcom/qiniu/android/dns/dns/DnsResponse;->readRecordDataInt8(I)I
move-result v5
invoke-virtual {v3, v5}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
.line 205
add-int v5, p2, v4
add-int/2addr v5, v1
invoke-direct {p0, v5}, Lcom/qiniu/android/dns/dns/DnsResponse;->readRecordDataInt8(I)I
move-result v5
invoke-virtual {v3, v5}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
.line 202
add-int/lit8 v4, v4, 0x2
goto :goto_19
.line 207
.end local v4 # "i":I
:cond_3b
invoke-virtual {v3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
.line 208
.end local v3 # "builder":Ljava/lang/StringBuilder;
goto :goto_8b
.line 219
:cond_40
if-lez p3, :cond_8b
add-int v1, p2, p3
iget-object v2, p0, Lcom/qiniu/android/dns/dns/DnsResponse;->recordData:[B
array-length v3, v2
if-ge v1, v3, :cond_8b
.line 220
add-int v1, p2, p3
invoke-static {v2, p2, v1}, Ljava/util/Arrays;->copyOfRange([BII)[B
move-result-object v1
.line 221
.local v1, "data":[B
new-instance v2, Ljava/lang/String;
invoke-direct {v2, v1}, Ljava/lang/String;-><init>([B)V
.line 222
.local v2, "dataValue":Ljava/lang/String;
invoke-static {v2}, Ljava/net/IDN;->toUnicode(Ljava/lang/String;)Ljava/lang/String;
move-result-object v0
.line 223
.end local v1 # "data":[B
.end local v2 # "dataValue":Ljava/lang/String;
goto :goto_8b
.line 212
:cond_59
if-le p3, v1, :cond_8b
.line 213
invoke-direct {p0, p2}, Lcom/qiniu/android/dns/dns/DnsResponse;->getNameFrom(I)Lcom/qiniu/android/dns/dns/DnsResponse$RecordName;
move-result-object v1
.line 214
.local v1, "name":Lcom/qiniu/android/dns/dns/DnsResponse$RecordName;
invoke-static {v1}, Lcom/qiniu/android/dns/dns/DnsResponse$RecordName;->access$900(Lcom/qiniu/android/dns/dns/DnsResponse$RecordName;)Ljava/lang/String;
move-result-object v0
.line 215
.end local v1 # "name":Lcom/qiniu/android/dns/dns/DnsResponse$RecordName;
goto :goto_8b
.line 188
:cond_64
const/4 v1, 0x4
if-ne p3, v1, :cond_8b
.line 189
new-instance v2, Ljava/lang/StringBuilder;
invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
.line 190
.local v2, "builder":Ljava/lang/StringBuilder;
invoke-direct {p0, p2}, Lcom/qiniu/android/dns/dns/DnsResponse;->readRecordDataInt8(I)I
move-result v3
invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
.line 191
const/4 v3, 0x1
.local v3, "i":I
:goto_74
if-ge v3, v1, :cond_87
.line 192
const-string v4, "."
invoke-virtual {v2, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
.line 193
add-int v4, p2, v3
invoke-direct {p0, v4}, Lcom/qiniu/android/dns/dns/DnsResponse;->readRecordDataInt8(I)I
move-result v4
invoke-virtual {v2, v4}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
.line 191
add-int/lit8 v3, v3, 0x1
goto :goto_74
.line 195
.end local v3 # "i":I
:cond_87
invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
.line 229
.end local v2 # "builder":Ljava/lang/StringBuilder;
:cond_8b
:goto_8b
return-object v0
.end method
.method private readRecordDataInt16(I)S
.registers 5
.param p1, "from" # I
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 240
add-int/lit8 v0, p1, 0x1
iget-object v1, p0, Lcom/qiniu/android/dns/dns/DnsResponse;->recordData:[B
array-length v2, v1
if-ge v0, v2, :cond_17
.line 243
aget-byte v0, v1, p1
and-int/lit16 v0, v0, 0xff
shl-int/lit8 v0, v0, 0x8
.line 244
.local v0, "b0":I
add-int/lit8 v2, p1, 0x1
aget-byte v1, v1, v2
and-int/lit16 v1, v1, 0xff
.line 245
.local v1, "b1":I
add-int v2, v0, v1
int-to-short v2, v2
return v2
.line 241
.end local v0 # "b0":I
.end local v1 # "b1":I
:cond_17
new-instance v0, Ljava/io/IOException;
const-string/jumbo v1, "read response data out of range"
invoke-direct {v0, v1}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method private readRecordDataInt32(I)I
.registers 7
.param p1, "from" # I
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 249
add-int/lit8 v0, p1, 0x3
iget-object v1, p0, Lcom/qiniu/android/dns/dns/DnsResponse;->recordData:[B
array-length v2, v1
if-ge v0, v2, :cond_28
.line 252
aget-byte v0, v1, p1
and-int/lit16 v0, v0, 0xff
shl-int/lit8 v0, v0, 0x18
.line 253
.local v0, "b0":I
add-int/lit8 v2, p1, 0x1
aget-byte v2, v1, v2
and-int/lit16 v2, v2, 0xff
shl-int/lit8 v2, v2, 0x10
.line 254
.local v2, "b1":I
add-int/lit8 v3, p1, 0x2
aget-byte v3, v1, v3
and-int/lit16 v3, v3, 0xff
shl-int/lit8 v3, v3, 0x8
.line 255
.local v3, "b2":I
add-int/lit8 v4, p1, 0x3
aget-byte v1, v1, v4
and-int/lit16 v1, v1, 0xff
.line 256
.local v1, "b3":I
add-int v4, v0, v2
add-int/2addr v4, v3
add-int/2addr v4, v1
return v4
.line 250
.end local v0 # "b0":I
.end local v1 # "b3":I
.end local v2 # "b1":I
.end local v3 # "b2":I
:cond_28
new-instance v0, Ljava/io/IOException;
const-string/jumbo v1, "read response data out of range"
invoke-direct {v0, v1}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method private readRecordDataInt8(I)I
.registers 4
.param p1, "from" # I
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 233
iget-object v0, p0, Lcom/qiniu/android/dns/dns/DnsResponse;->recordData:[B
array-length v1, v0
if-ge p1, v1, :cond_a
.line 236
aget-byte v0, v0, p1
and-int/lit16 v0, v0, 0xff
return v0
.line 234
:cond_a
new-instance v0, Ljava/io/IOException;
const-string/jumbo v1, "read response data out of range"
invoke-direct {v0, v1}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
throw v0
.end method
# virtual methods
.method getAA()I
.registers 2
.line 261
iget v0, p0, Lcom/qiniu/android/dns/dns/DnsResponse;->aa:I
return v0
.end method
.method getAdditionalArray()Ljava/util/List;
.registers 2
.annotation system Ldalvik/annotation/Signature;
value = {
"()",
"Ljava/util/List<",
"Lcom/qiniu/android/dns/Record;",
">;"
}
.end annotation
.line 273
iget-object v0, p0, Lcom/qiniu/android/dns/dns/DnsResponse;->additionalArray:Ljava/util/List;
return-object v0
.end method
.method getAnswerArray()Ljava/util/List;
.registers 2
.annotation system Ldalvik/annotation/Signature;
value = {
"()",
"Ljava/util/List<",
"Lcom/qiniu/android/dns/Record;",
">;"
}
.end annotation
.line 269
iget-object v0, p0, Lcom/qiniu/android/dns/dns/DnsResponse;->answerArray:Ljava/util/List;
return-object v0
.end method
.method getAuthorityArray()Ljava/util/List;
.registers 2
.annotation system Ldalvik/annotation/Signature;
value = {
"()",
"Ljava/util/List<",
"Lcom/qiniu/android/dns/Record;",
">;"
}
.end annotation
.line 277
iget-object v0, p0, Lcom/qiniu/android/dns/dns/DnsResponse;->authorityArray:Ljava/util/List;
return-object v0
.end method
.method getRCode()I
.registers 2
.line 265
iget v0, p0, Lcom/qiniu/android/dns/dns/DnsResponse;->rCode:I
return v0
.end method
.method public toString()Ljava/lang/String;
.registers 5
.line 282
invoke-static {}, Ljava/util/Locale;->getDefault()Ljava/util/Locale;
move-result-object v0
const/16 v1, 0xa
new-array v1, v1, [Ljava/lang/Object;
iget-short v2, p0, Lcom/qiniu/android/dns/dns/DnsResponse;->messageId:S
.line 283
invoke-static {v2}, Ljava/lang/Short;->valueOf(S)Ljava/lang/Short;
move-result-object v2
const/4 v3, 0x0
aput-object v2, v1, v3
iget v2, p0, Lcom/qiniu/android/dns/dns/DnsResponse;->rd:I
invoke-static {v2}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v2
const/4 v3, 0x1
aput-object v2, v1, v3
iget v2, p0, Lcom/qiniu/android/dns/dns/DnsResponse;->ra:I
invoke-static {v2}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v2
const/4 v3, 0x2
aput-object v2, v1, v3
iget v2, p0, Lcom/qiniu/android/dns/dns/DnsResponse;->aa:I
invoke-static {v2}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v2
const/4 v3, 0x3
aput-object v2, v1, v3
iget v2, p0, Lcom/qiniu/android/dns/dns/DnsResponse;->rCode:I
invoke-static {v2}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v2
const/4 v3, 0x4
aput-object v2, v1, v3
iget-object v2, p0, Lcom/qiniu/android/dns/dns/DnsResponse;->server:Ljava/lang/String;
const/4 v3, 0x5
aput-object v2, v1, v3
iget-object v2, p0, Lcom/qiniu/android/dns/dns/DnsResponse;->request:Lcom/qiniu/android/dns/dns/DnsRequest;
const/4 v3, 0x6
aput-object v2, v1, v3
iget-object v2, p0, Lcom/qiniu/android/dns/dns/DnsResponse;->answerArray:Ljava/util/List;
const/4 v3, 0x7
aput-object v2, v1, v3
iget-object v2, p0, Lcom/qiniu/android/dns/dns/DnsResponse;->authorityArray:Ljava/util/List;
const/16 v3, 0x8
aput-object v2, v1, v3
iget-object v2, p0, Lcom/qiniu/android/dns/dns/DnsResponse;->additionalArray:Ljava/util/List;
const/16 v3, 0x9
aput-object v2, v1, v3
.line 282
const-string/jumbo v2, "{messageId:%d, rd:%d, ra:%d, aa:%d, rCode:%d, server:%s, request:%s, answerArray:%s, authorityArray:%s, additionalArray:%s}"
invoke-static {v0, v2, v1}, Ljava/lang/String;->format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
move-result-object v0
return-object v0
.end method