DnsUdpResolver.smali

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


# static fields
.field private static final DnsUdpPort:I


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

    const v0, 0x155a

    invoke-static {v0}, Lnp/NPFog;->d(I)I

    move-result v0

    sput v0, Lcom/qiniu/android/dns/dns/DnsUdpResolver;->DnsUdpPort:I

    return-void
.end method

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

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

    .line 16
    return-void
.end method

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

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

    .line 20
    return-void
.end method

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

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

    .line 24
    return-void
.end method

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

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

    .line 28
    return-void
.end method

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

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

    .line 32
    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 21
    .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 36
    move-object/from16 v1, p0

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

    move-result-wide v2

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

    mul-double v4, v4, v2

    double-to-int v0, v4

    int-to-short v4, v0

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

    move-object/from16 v5, p3

    move/from16 v6, p4

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

    move-object v7, v0

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

    move-result-object v8

    .line 41
    .local v8, "requestData":[B
    invoke-static/range {p2 .. p2}, Ljava/net/InetAddress;->getByName(Ljava/lang/String;)Ljava/net/InetAddress;

    move-result-object v9

    .line 42
    .local v9, "address":Ljava/net/InetAddress;
    const/4 v10, 0x0

    .line 44
    .local v10, "socket":Ljava/net/DatagramSocket;
    :try_start_22
    new-instance v0, Ljava/net/DatagramSocket;

    invoke-direct {v0}, Ljava/net/DatagramSocket;-><init>()V

    move-object v10, v0

    .line 45
    new-instance v0, Ljava/net/DatagramPacket;

    array-length v11, v8

    const/16 v12, 0x35

    invoke-direct {v0, v8, v11, v9, v12}, Ljava/net/DatagramPacket;-><init>([BILjava/net/InetAddress;I)V

    .line 47
    .local v0, "packet":Ljava/net/DatagramPacket;
    iget v11, v1, Lcom/qiniu/android/dns/dns/DnsUdpResolver;->timeout:I

    mul-int/lit16 v11, v11, 0x3e8

    invoke-virtual {v10, v11}, Ljava/net/DatagramSocket;->setSoTimeout(I)V

    .line 49
    move-object v11, v10

    .line 50
    .local v11, "finalSocket":Ljava/net/DatagramSocket;
    new-instance v12, Lcom/qiniu/android/dns/dns/DnsUdpResolver$1;

    invoke-direct {v12, v1, v11}, Lcom/qiniu/android/dns/dns/DnsUdpResolver$1;-><init>(Lcom/qiniu/android/dns/dns/DnsUdpResolver;Ljava/net/DatagramSocket;)V
    :try_end_3d
    .catchall {:try_start_22 .. :try_end_3d} :catchall_67

    move-object/from16 v13, p1

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

    .line 66
    invoke-virtual {v10, v0}, Ljava/net/DatagramSocket;->send(Ljava/net/DatagramPacket;)V

    .line 67
    new-instance v12, Ljava/net/DatagramPacket;

    const/16 v14, 0x5dc

    new-array v15, v14, [B

    invoke-direct {v12, v15, v14}, Ljava/net/DatagramPacket;-><init>([BI)V

    move-object v0, v12

    .line 68
    invoke-virtual {v10, v0}, Ljava/net/DatagramSocket;->receive(Ljava/net/DatagramPacket;)V

    .line 69
    new-instance v12, Lcom/qiniu/android/dns/dns/DnsResponse;

    const/4 v14, 0x4

    invoke-virtual {v0}, Ljava/net/DatagramPacket;->getData()[B

    move-result-object v15
    :try_end_59
    .catchall {:try_start_3f .. :try_end_59} :catchall_65

    move-object/from16 v1, p2

    :try_start_5b
    invoke-direct {v12, v1, v14, v7, v15}, Lcom/qiniu/android/dns/dns/DnsResponse;-><init>(Ljava/lang/String;ILcom/qiniu/android/dns/dns/DnsRequest;[B)V
    :try_end_5e
    .catchall {:try_start_5b .. :try_end_5e} :catchall_63

    .line 71
    nop

    .line 72
    invoke-virtual {v10}, Ljava/net/DatagramSocket;->close()V

    .line 69
    return-object v12

    .line 71
    .end local v0    # "packet":Ljava/net/DatagramPacket;
    .end local v11    # "finalSocket":Ljava/net/DatagramSocket;
    :catchall_63
    move-exception v0

    goto :goto_6c

    :catchall_65
    move-exception v0

    goto :goto_6a

    :catchall_67
    move-exception v0

    move-object/from16 v13, p1

    :goto_6a
    move-object/from16 v1, p2

    :goto_6c
    if-eqz v10, :cond_71

    .line 72
    invoke-virtual {v10}, Ljava/net/DatagramSocket;->close()V

    .line 74
    :cond_71
    throw v0
.end method