DohResolver.smali

.class public Lcom/qiniu/android/dns/dns/DohResolver;
.super Lcom/qiniu/android/dns/dns/DnsResolver;
.source "DohResolver.java"


# direct methods
.method static constructor <clinit>()V
    .registers 1

    return-void
.end method

.method public constructor <init>(Ljava/lang/String;)V
    .registers 2
    .param p1, "server"    # Ljava/lang/String;

    .line 17
    invoke-direct {p0, p1}, Lcom/qiniu/android/dns/dns/DnsResolver;-><init>(Ljava/lang/String;)V

    .line 18
    return-void
.end method

.method public constructor <init>(Ljava/lang/String;I)V
    .registers 3
    .param p1, "server"    # Ljava/lang/String;
    .param p2, "timeout"    # I

    .line 21
    invoke-direct {p0, p1, p2}, Lcom/qiniu/android/dns/dns/DnsResolver;-><init>(Ljava/lang/String;I)V

    .line 22
    return-void
.end method

.method public constructor <init>(Ljava/lang/String;II)V
    .registers 4
    .param p1, "server"    # Ljava/lang/String;
    .param p2, "recordType"    # I
    .param p3, "timeout"    # I

    .line 25
    invoke-direct {p0, p1, p2, p3}, Lcom/qiniu/android/dns/dns/DnsResolver;-><init>(Ljava/lang/String;II)V

    .line 26
    return-void
.end method

.method public constructor <init>([Ljava/lang/String;II)V
    .registers 4
    .param p1, "servers"    # [Ljava/lang/String;
    .param p2, "recordType"    # I
    .param p3, "timeout"    # I

    .line 29
    invoke-direct {p0, p1, p2, p3}, Lcom/qiniu/android/dns/dns/DnsResolver;-><init>([Ljava/lang/String;II)V

    .line 30
    return-void
.end method

.method public constructor <init>([Ljava/lang/String;IILjava/util/concurrent/ExecutorService;)V
    .registers 5
    .param p1, "servers"    # [Ljava/lang/String;
    .param p2, "recordType"    # I
    .param p3, "timeout"    # I
    .param p4, "executorService"    # Ljava/util/concurrent/ExecutorService;

    .line 33
    invoke-direct {p0, p1, p2, p3, p4}, Lcom/qiniu/android/dns/dns/DnsResolver;-><init>([Ljava/lang/String;IILjava/util/concurrent/ExecutorService;)V

    .line 34
    return-void
.end method


# virtual methods
.method request(Lcom/qiniu/android/dns/dns/DnsResolver$RequestCanceller;Ljava/lang/String;Ljava/lang/String;I)Lcom/qiniu/android/dns/dns/DnsResponse;
    .registers 25
    .param p1, "canceller"    # Lcom/qiniu/android/dns/dns/DnsResolver$RequestCanceller;
    .param p2, "server"    # Ljava/lang/String;
    .param p3, "host"    # Ljava/lang/String;
    .param p4, "recordType"    # I
    .annotation system Ldalvik/annotation/Throws;
        value = {
            Ljava/io/IOException;
        }
    .end annotation

    .line 38
    move-object/from16 v0, p0

    move-object/from16 v1, p2

    invoke-static {}, Ljava/lang/Math;->random()D

    move-result-wide v2

    .line 39
    .local v2, "d":D
    const-wide v4, 0x40efffe000000000L    # 65535.0

    mul-double v4, v4, v2

    double-to-int v4, v4

    int-to-short v4, v4

    .line 40
    .local v4, "messageId":S
    new-instance v5, Lcom/qiniu/android/dns/dns/DnsRequest;

    move-object/from16 v6, p3

    move/from16 v7, p4

    invoke-direct {v5, v4, v7, v6}, Lcom/qiniu/android/dns/dns/DnsRequest;-><init>(SILjava/lang/String;)V

    .line 41
    .local v5, "request":Lcom/qiniu/android/dns/dns/DnsRequest;
    invoke-virtual {v5}, Lcom/qiniu/android/dns/dns/DnsRequest;->toDnsQuestionData()[B

    move-result-object v8

    .line 43
    .local v8, "requestData":[B
    new-instance v9, Ljava/net/URL;

    invoke-direct {v9, v1}, Ljava/net/URL;-><init>(Ljava/lang/String;)V

    invoke-virtual {v9}, Ljava/net/URL;->openConnection()Ljava/net/URLConnection;

    move-result-object v9

    check-cast v9, Ljavax/net/ssl/HttpsURLConnection;

    .line 44
    .local v9, "httpConn":Ljavax/net/ssl/HttpsURLConnection;
    const/16 v10, 0xbb8

    invoke-virtual {v9, v10}, Ljavax/net/ssl/HttpsURLConnection;->setConnectTimeout(I)V

    .line 45
    iget v10, v0, Lcom/qiniu/android/dns/dns/DohResolver;->timeout:I

    mul-int/lit16 v10, v10, 0x3e8

    invoke-virtual {v9, v10}, Ljavax/net/ssl/HttpsURLConnection;->setReadTimeout(I)V

    .line 46
    const/4 v10, 0x1

    invoke-virtual {v9, v10}, Ljavax/net/ssl/HttpsURLConnection;->setDoOutput(Z)V

    .line 47
    const-string v10, "POST"

    invoke-virtual {v9, v10}, Ljavax/net/ssl/HttpsURLConnection;->setRequestMethod(Ljava/lang/String;)V

    .line 48
    const-string v10, "application/dns-message"

    const-string v11, "Content-Type"

    invoke-virtual {v9, v11, v10}, Ljavax/net/ssl/HttpsURLConnection;->setRequestProperty(Ljava/lang/String;Ljava/lang/String;)V

    .line 49
    const-string v11, "Accept"

    invoke-virtual {v9, v11, v10}, Ljavax/net/ssl/HttpsURLConnection;->setRequestProperty(Ljava/lang/String;Ljava/lang/String;)V

    .line 50
    const-string v10, "Accept-Encoding"

    const-string v11, ""

    invoke-virtual {v9, v10, v11}, Ljavax/net/ssl/HttpsURLConnection;->setRequestProperty(Ljava/lang/String;Ljava/lang/String;)V

    .line 51
    const-string v10, "User-Agent"

    const-string v11, "Dalvik/2.1.0"

    invoke-virtual {v9, v10, v11}, Ljavax/net/ssl/HttpsURLConnection;->setRequestProperty(Ljava/lang/String;Ljava/lang/String;)V

    .line 53
    new-instance v10, Ljava/io/DataOutputStream;

    invoke-virtual {v9}, Ljavax/net/ssl/HttpsURLConnection;->getOutputStream()Ljava/io/OutputStream;

    move-result-object v11

    invoke-direct {v10, v11}, Ljava/io/DataOutputStream;-><init>(Ljava/io/OutputStream;)V

    .line 54
    .local v10, "bodyStream":Ljava/io/DataOutputStream;
    move-object v11, v9

    .line 55
    .local v11, "finalConnection":Ljavax/net/ssl/HttpsURLConnection;
    new-instance v12, Lcom/qiniu/android/dns/dns/DohResolver$1;

    invoke-direct {v12, v0, v11, v10}, Lcom/qiniu/android/dns/dns/DohResolver$1;-><init>(Lcom/qiniu/android/dns/dns/DohResolver;Ljavax/net/ssl/HttpsURLConnection;Ljava/io/DataOutputStream;)V

    move-object/from16 v13, p1

    invoke-virtual {v13, v12}, Lcom/qiniu/android/dns/dns/DnsResolver$RequestCanceller;->addCancelAction(Ljava/lang/Runnable;)V

    .line 70
    invoke-virtual {v10, v8}, Ljava/io/DataOutputStream;->write([B)V

    .line 71
    invoke-virtual {v10}, Ljava/io/DataOutputStream;->close()V

    .line 73
    invoke-virtual {v9}, Ljavax/net/ssl/HttpsURLConnection;->getResponseCode()I

    move-result v12

    .line 74
    .local v12, "responseCode":I
    const/4 v14, 0x0

    const/16 v15, 0xc8

    if-eq v12, v15, :cond_7c

    .line 75
    return-object v14

    .line 78
    :cond_7c
    invoke-virtual {v9}, Ljavax/net/ssl/HttpsURLConnection;->getContentLength()I

    move-result v15

    .line 79
    .local v15, "length":I
    if-lez v15, :cond_a6

    const/high16 v14, 0x100000

    if-le v15, v14, :cond_8b

    move-wide/from16 v18, v2

    const/16 v16, 0x0

    goto :goto_aa

    .line 82
    :cond_8b
    invoke-virtual {v9}, Ljavax/net/ssl/HttpsURLConnection;->getInputStream()Ljava/io/InputStream;

    move-result-object v14

    .line 83
    .local v14, "is":Ljava/io/InputStream;
    new-array v0, v15, [B

    .line 84
    .local v0, "responseData":[B
    invoke-virtual {v14, v0}, Ljava/io/InputStream;->read([B)I

    move-result v17

    .line 85
    .local v17, "read":I
    invoke-virtual {v14}, Ljava/io/InputStream;->close()V

    .line 86
    if-gtz v17, :cond_9d

    .line 87
    const/16 v16, 0x0

    return-object v16

    .line 90
    :cond_9d
    move-wide/from16 v18, v2

    .end local v2    # "d":D
    .local v18, "d":D
    new-instance v2, Lcom/qiniu/android/dns/dns/DnsResponse;

    const/4 v3, 0x5

    invoke-direct {v2, v1, v3, v5, v0}, Lcom/qiniu/android/dns/dns/DnsResponse;-><init>(Ljava/lang/String;ILcom/qiniu/android/dns/dns/DnsRequest;[B)V

    return-object v2

    .line 79
    .end local v0    # "responseData":[B
    .end local v14    # "is":Ljava/io/InputStream;
    .end local v17    # "read":I
    .end local v18    # "d":D
    .restart local v2    # "d":D
    :cond_a6
    move-wide/from16 v18, v2

    move-object/from16 v16, v14

    .line 80
    .end local v2    # "d":D
    .restart local v18    # "d":D
    :goto_aa
    return-object v16
.end method