VoIPService$4.smali

.class Lim/tpelyyftgw/messenger/voip/VoIPService$4;
.super Ljava/lang/Object;
.source "VoIPService.java"

# interfaces
.implements Lim/tpelyyftgw/tgnet/RequestDelegate;


# annotations
.annotation system Ldalvik/annotation/EnclosingMethod;
    value = Lim/tpelyyftgw/messenger/voip/VoIPService;->startOutgoingCall()V
.end annotation

.annotation system Ldalvik/annotation/InnerClass;
    accessFlags = 0x0
    name = null
.end annotation


# instance fields
.field final synthetic this$0:Lim/tpelyyftgw/messenger/voip/VoIPService;

.field final synthetic val$messagesStorage:Lim/tpelyyftgw/messenger/MessagesStorage;


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

    return-void
.end method

.method constructor <init>(Lim/tpelyyftgw/messenger/voip/VoIPService;Lim/tpelyyftgw/messenger/MessagesStorage;)V
    .registers 3
    .param p1, "this$0"    # Lim/tpelyyftgw/messenger/voip/VoIPService;

    .line 259
    iput-object p1, p0, Lim/tpelyyftgw/messenger/voip/VoIPService$4;->this$0:Lim/tpelyyftgw/messenger/voip/VoIPService;

    iput-object p2, p0, Lim/tpelyyftgw/messenger/voip/VoIPService$4;->val$messagesStorage:Lim/tpelyyftgw/messenger/MessagesStorage;

    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    return-void
.end method


# virtual methods
.method public run(Lim/tpelyyftgw/tgnet/TLObject;Lim/tpelyyftgw/tgnet/TLRPC$TL_error;)V
    .registers 12
    .param p1, "response"    # Lim/tpelyyftgw/tgnet/TLObject;
    .param p2, "error"    # Lim/tpelyyftgw/tgnet/TLRPC$TL_error;

    .line 262
    iget-object v0, p0, Lim/tpelyyftgw/messenger/voip/VoIPService$4;->this$0:Lim/tpelyyftgw/messenger/voip/VoIPService;

    const/4 v1, 0x0

    invoke-static {v0, v1}, Lim/tpelyyftgw/messenger/voip/VoIPService;->access$202(Lim/tpelyyftgw/messenger/voip/VoIPService;I)I

    .line 263
    iget-object v0, p0, Lim/tpelyyftgw/messenger/voip/VoIPService$4;->this$0:Lim/tpelyyftgw/messenger/voip/VoIPService;

    invoke-static {v0}, Lim/tpelyyftgw/messenger/voip/VoIPService;->access$300(Lim/tpelyyftgw/messenger/voip/VoIPService;)Z

    move-result v0

    if-eqz v0, :cond_14

    .line 264
    iget-object v0, p0, Lim/tpelyyftgw/messenger/voip/VoIPService$4;->this$0:Lim/tpelyyftgw/messenger/voip/VoIPService;

    invoke-virtual {v0}, Lim/tpelyyftgw/messenger/voip/VoIPService;->callEnded()V

    .line 265
    return-void

    .line 267
    :cond_14
    if-nez p2, :cond_fc

    .line 268
    move-object v0, p1

    check-cast v0, Lim/tpelyyftgw/tgnet/TLRPC$messages_DhConfig;

    .line 269
    .local v0, "res":Lim/tpelyyftgw/tgnet/TLRPC$messages_DhConfig;
    instance-of v2, p1, Lim/tpelyyftgw/tgnet/TLRPC$TL_messages_dhConfig;

    if-eqz v2, :cond_57

    .line 270
    iget-object v2, v0, Lim/tpelyyftgw/tgnet/TLRPC$messages_DhConfig;->p:[B

    iget v3, v0, Lim/tpelyyftgw/tgnet/TLRPC$messages_DhConfig;->g:I

    invoke-static {v2, v3}, Lim/tpelyyftgw/messenger/Utilities;->isGoodPrime([BI)Z

    move-result v2

    if-nez v2, :cond_2d

    .line 271
    iget-object v1, p0, Lim/tpelyyftgw/messenger/voip/VoIPService$4;->this$0:Lim/tpelyyftgw/messenger/voip/VoIPService;

    invoke-virtual {v1}, Lim/tpelyyftgw/messenger/voip/VoIPService;->callFailed()V

    .line 272
    return-void

    .line 274
    :cond_2d
    iget-object v2, p0, Lim/tpelyyftgw/messenger/voip/VoIPService$4;->val$messagesStorage:Lim/tpelyyftgw/messenger/MessagesStorage;

    iget-object v3, v0, Lim/tpelyyftgw/tgnet/TLRPC$messages_DhConfig;->p:[B

    invoke-virtual {v2, v3}, Lim/tpelyyftgw/messenger/MessagesStorage;->setSecretPBytes([B)V

    .line 275
    iget-object v2, p0, Lim/tpelyyftgw/messenger/voip/VoIPService$4;->val$messagesStorage:Lim/tpelyyftgw/messenger/MessagesStorage;

    iget v3, v0, Lim/tpelyyftgw/tgnet/TLRPC$messages_DhConfig;->g:I

    invoke-virtual {v2, v3}, Lim/tpelyyftgw/messenger/MessagesStorage;->setSecretG(I)V

    .line 276
    iget-object v2, p0, Lim/tpelyyftgw/messenger/voip/VoIPService$4;->val$messagesStorage:Lim/tpelyyftgw/messenger/MessagesStorage;

    iget v3, v0, Lim/tpelyyftgw/tgnet/TLRPC$messages_DhConfig;->version:I

    invoke-virtual {v2, v3}, Lim/tpelyyftgw/messenger/MessagesStorage;->setLastSecretVersion(I)V

    .line 277
    iget-object v2, p0, Lim/tpelyyftgw/messenger/voip/VoIPService$4;->val$messagesStorage:Lim/tpelyyftgw/messenger/MessagesStorage;

    invoke-virtual {v2}, Lim/tpelyyftgw/messenger/MessagesStorage;->getLastSecretVersion()I

    move-result v3

    iget-object v4, p0, Lim/tpelyyftgw/messenger/voip/VoIPService$4;->val$messagesStorage:Lim/tpelyyftgw/messenger/MessagesStorage;

    invoke-virtual {v4}, Lim/tpelyyftgw/messenger/MessagesStorage;->getSecretG()I

    move-result v4

    iget-object v5, p0, Lim/tpelyyftgw/messenger/voip/VoIPService$4;->val$messagesStorage:Lim/tpelyyftgw/messenger/MessagesStorage;

    invoke-virtual {v5}, Lim/tpelyyftgw/messenger/MessagesStorage;->getSecretPBytes()[B

    move-result-object v5

    invoke-virtual {v2, v3, v4, v5}, Lim/tpelyyftgw/messenger/MessagesStorage;->saveSecretParams(II[B)V

    .line 279
    :cond_57
    const/16 v2, 0x100

    new-array v3, v2, [B

    .line 280
    .local v3, "salt":[B
    const/4 v4, 0x0

    .local v4, "a":I
    :goto_5c
    if-ge v4, v2, :cond_75

    .line 281
    sget-object v5, Lim/tpelyyftgw/messenger/Utilities;->random:Ljava/security/SecureRandom;

    invoke-virtual {v5}, Ljava/security/SecureRandom;->nextDouble()D

    move-result-wide v5

    const-wide/high16 v7, 0x4070000000000000L    # 256.0

    mul-double v5, v5, v7

    double-to-int v5, v5

    int-to-byte v5, v5

    iget-object v6, v0, Lim/tpelyyftgw/tgnet/TLRPC$messages_DhConfig;->random:[B

    aget-byte v6, v6, v4

    xor-int/2addr v5, v6

    int-to-byte v5, v5

    aput-byte v5, v3, v4

    .line 280
    add-int/lit8 v4, v4, 0x1

    goto :goto_5c

    .line 284
    .end local v4    # "a":I
    :cond_75
    iget-object v4, p0, Lim/tpelyyftgw/messenger/voip/VoIPService$4;->val$messagesStorage:Lim/tpelyyftgw/messenger/MessagesStorage;

    invoke-virtual {v4}, Lim/tpelyyftgw/messenger/MessagesStorage;->getSecretG()I

    move-result v4

    int-to-long v4, v4

    invoke-static {v4, v5}, Ljava/math/BigInteger;->valueOf(J)Ljava/math/BigInteger;

    move-result-object v4

    .line 285
    .local v4, "i_g_a":Ljava/math/BigInteger;
    new-instance v5, Ljava/math/BigInteger;

    const/4 v6, 0x1

    invoke-direct {v5, v6, v3}, Ljava/math/BigInteger;-><init>(I[B)V

    new-instance v7, Ljava/math/BigInteger;

    iget-object v8, p0, Lim/tpelyyftgw/messenger/voip/VoIPService$4;->val$messagesStorage:Lim/tpelyyftgw/messenger/MessagesStorage;

    invoke-virtual {v8}, Lim/tpelyyftgw/messenger/MessagesStorage;->getSecretPBytes()[B

    move-result-object v8

    invoke-direct {v7, v6, v8}, Ljava/math/BigInteger;-><init>(I[B)V

    invoke-virtual {v4, v5, v7}, Ljava/math/BigInteger;->modPow(Ljava/math/BigInteger;Ljava/math/BigInteger;)Ljava/math/BigInteger;

    move-result-object v4

    .line 286
    invoke-virtual {v4}, Ljava/math/BigInteger;->toByteArray()[B

    move-result-object v5

    .line 287
    .local v5, "g_a":[B
    array-length v7, v5

    if-le v7, v2, :cond_a2

    .line 288
    new-array v7, v2, [B

    .line 289
    .local v7, "correctedAuth":[B
    invoke-static {v5, v6, v7, v1, v2}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V

    .line 290
    move-object v5, v7

    .line 293
    .end local v7    # "correctedAuth":[B
    :cond_a2
    new-instance v2, Lim/tpelyyftgw/tgnet/TLRPC$TL_phone_requestCall;

    invoke-direct {v2}, Lim/tpelyyftgw/tgnet/TLRPC$TL_phone_requestCall;-><init>()V

    .line 294
    .local v2, "reqCall":Lim/tpelyyftgw/tgnet/TLRPC$TL_phone_requestCall;
    iget-object v7, p0, Lim/tpelyyftgw/messenger/voip/VoIPService$4;->this$0:Lim/tpelyyftgw/messenger/voip/VoIPService;

    iget v7, v7, Lim/tpelyyftgw/messenger/voip/VoIPService;->currentAccount:I

    invoke-static {v7}, Lim/tpelyyftgw/messenger/MessagesController;->getInstance(I)Lim/tpelyyftgw/messenger/MessagesController;

    move-result-object v7

    iget-object v8, p0, Lim/tpelyyftgw/messenger/voip/VoIPService$4;->this$0:Lim/tpelyyftgw/messenger/voip/VoIPService;

    invoke-static {v8}, Lim/tpelyyftgw/messenger/voip/VoIPService;->access$400(Lim/tpelyyftgw/messenger/voip/VoIPService;)Lim/tpelyyftgw/tgnet/TLRPC$User;

    move-result-object v8

    invoke-virtual {v7, v8}, Lim/tpelyyftgw/messenger/MessagesController;->getInputUser(Lim/tpelyyftgw/tgnet/TLRPC$User;)Lim/tpelyyftgw/tgnet/TLRPC$InputUser;

    move-result-object v7

    iput-object v7, v2, Lim/tpelyyftgw/tgnet/TLRPC$TL_phone_requestCall;->user_id:Lim/tpelyyftgw/tgnet/TLRPC$InputUser;

    .line 295
    new-instance v7, Lim/tpelyyftgw/tgnet/TLRPC$TL_phoneCallProtocol;

    invoke-direct {v7}, Lim/tpelyyftgw/tgnet/TLRPC$TL_phoneCallProtocol;-><init>()V

    iput-object v7, v2, Lim/tpelyyftgw/tgnet/TLRPC$TL_phone_requestCall;->protocol:Lim/tpelyyftgw/tgnet/TLRPC$TL_phoneCallProtocol;

    .line 296
    iget-object v7, v2, Lim/tpelyyftgw/tgnet/TLRPC$TL_phone_requestCall;->protocol:Lim/tpelyyftgw/tgnet/TLRPC$TL_phoneCallProtocol;

    iput-boolean v6, v7, Lim/tpelyyftgw/tgnet/TLRPC$TL_phoneCallProtocol;->udp_p2p:Z

    .line 297
    iget-object v7, v2, Lim/tpelyyftgw/tgnet/TLRPC$TL_phone_requestCall;->protocol:Lim/tpelyyftgw/tgnet/TLRPC$TL_phoneCallProtocol;

    iput-boolean v6, v7, Lim/tpelyyftgw/tgnet/TLRPC$TL_phoneCallProtocol;->udp_reflector:Z

    .line 298
    iget-object v6, v2, Lim/tpelyyftgw/tgnet/TLRPC$TL_phone_requestCall;->protocol:Lim/tpelyyftgw/tgnet/TLRPC$TL_phoneCallProtocol;

    const/16 v7, 0x41

    iput v7, v6, Lim/tpelyyftgw/tgnet/TLRPC$TL_phoneCallProtocol;->min_layer:I

    .line 299
    iget-object v6, v2, Lim/tpelyyftgw/tgnet/TLRPC$TL_phone_requestCall;->protocol:Lim/tpelyyftgw/tgnet/TLRPC$TL_phoneCallProtocol;

    sget v7, Lim/tpelyyftgw/messenger/voip/VoIPService;->CALL_MAX_LAYER:I

    iput v7, v6, Lim/tpelyyftgw/tgnet/TLRPC$TL_phoneCallProtocol;->max_layer:I

    .line 300
    iget-object v6, p0, Lim/tpelyyftgw/messenger/voip/VoIPService$4;->this$0:Lim/tpelyyftgw/messenger/voip/VoIPService;

    invoke-static {v6, v5}, Lim/tpelyyftgw/messenger/voip/VoIPService;->access$502(Lim/tpelyyftgw/messenger/voip/VoIPService;[B)[B

    .line 301
    array-length v6, v5

    invoke-static {v5, v1, v6}, Lim/tpelyyftgw/messenger/Utilities;->computeSHA256([BII)[B

    move-result-object v1

    iput-object v1, v2, Lim/tpelyyftgw/tgnet/TLRPC$TL_phone_requestCall;->g_a_hash:[B

    .line 302
    sget-object v1, Lim/tpelyyftgw/messenger/Utilities;->random:Ljava/security/SecureRandom;

    invoke-virtual {v1}, Ljava/security/SecureRandom;->nextInt()I

    move-result v1

    iput v1, v2, Lim/tpelyyftgw/tgnet/TLRPC$TL_phone_requestCall;->random_id:I

    .line 304
    iget-object v1, p0, Lim/tpelyyftgw/messenger/voip/VoIPService$4;->this$0:Lim/tpelyyftgw/messenger/voip/VoIPService;

    iget v1, v1, Lim/tpelyyftgw/messenger/voip/VoIPService;->currentAccount:I

    invoke-static {v1}, Lim/tpelyyftgw/tgnet/ConnectionsManager;->getInstance(I)Lim/tpelyyftgw/tgnet/ConnectionsManager;

    move-result-object v1

    new-instance v6, Lim/tpelyyftgw/messenger/voip/VoIPService$4$1;

    invoke-direct {v6, p0, v3}, Lim/tpelyyftgw/messenger/voip/VoIPService$4$1;-><init>(Lim/tpelyyftgw/messenger/voip/VoIPService$4;[B)V

    const/4 v7, 0x2

    invoke-virtual {v1, v2, v6, v7}, Lim/tpelyyftgw/tgnet/ConnectionsManager;->sendRequest(Lim/tpelyyftgw/tgnet/TLObject;Lim/tpelyyftgw/tgnet/RequestDelegate;I)I

    .line 372
    .end local v0    # "res":Lim/tpelyyftgw/tgnet/TLRPC$messages_DhConfig;
    .end local v2    # "reqCall":Lim/tpelyyftgw/tgnet/TLRPC$TL_phone_requestCall;
    .end local v3    # "salt":[B
    .end local v4    # "i_g_a":Ljava/math/BigInteger;
    .end local v5    # "g_a":[B
    goto :goto_119

    .line 373
    :cond_fc
    sget-boolean v0, Lim/tpelyyftgw/messenger/BuildVars;->LOGS_ENABLED:Z

    if-eqz v0, :cond_114

    .line 374
    new-instance v0, Ljava/lang/StringBuilder;

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

    const-string v1, "Error on getDhConfig "

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {v0, p2}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;

    invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v0

    invoke-static {v0}, Lim/tpelyyftgw/messenger/FileLog;->e(Ljava/lang/String;)V

    .line 376
    :cond_114
    iget-object v0, p0, Lim/tpelyyftgw/messenger/voip/VoIPService$4;->this$0:Lim/tpelyyftgw/messenger/voip/VoIPService;

    invoke-virtual {v0}, Lim/tpelyyftgw/messenger/voip/VoIPService;->callFailed()V

    .line 378
    :goto_119
    return-void
.end method