VoIPService$7.smali

.class Lim/tpelyyftgw/messenger/voip/VoIPService$7;
.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;->acceptIncomingCall()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 494
    iput-object p1, p0, Lim/tpelyyftgw/messenger/voip/VoIPService$7;->this$0:Lim/tpelyyftgw/messenger/voip/VoIPService;

    iput-object p2, p0, Lim/tpelyyftgw/messenger/voip/VoIPService$7;->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 13
    .param p1, "response"    # Lim/tpelyyftgw/tgnet/TLObject;
    .param p2, "error"    # Lim/tpelyyftgw/tgnet/TLRPC$TL_error;

    .line 497
    if-nez p2, :cond_11b

    .line 498
    move-object v0, p1

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

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

    if-eqz v1, :cond_55

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

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

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

    move-result v1

    if-nez v1, :cond_23

    .line 503
    sget-boolean v1, Lim/tpelyyftgw/messenger/BuildVars;->LOGS_ENABLED:Z

    if-eqz v1, :cond_1d

    .line 504
    const-string/jumbo v1, "stopping VoIP service, bad prime"

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

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

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

    .line 507
    return-void

    .line 510
    :cond_23
    iget-object v1, p0, Lim/tpelyyftgw/messenger/voip/VoIPService$7;->val$messagesStorage:Lim/tpelyyftgw/messenger/MessagesStorage;

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

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

    .line 511
    iget-object v1, p0, Lim/tpelyyftgw/messenger/voip/VoIPService$7;->val$messagesStorage:Lim/tpelyyftgw/messenger/MessagesStorage;

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

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

    .line 512
    iget-object v1, p0, Lim/tpelyyftgw/messenger/voip/VoIPService$7;->val$messagesStorage:Lim/tpelyyftgw/messenger/MessagesStorage;

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

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

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

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

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

    move-result-object v1

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

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

    move-result v2

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

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

    move-result v3

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

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

    move-result-object v4

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

    .line 515
    :cond_55
    const/16 v1, 0x100

    new-array v2, v1, [B

    .line 516
    .local v2, "salt":[B
    const/4 v3, 0x0

    .local v3, "a":I
    :goto_5a
    if-ge v3, v1, :cond_73

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

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

    move-result-wide v4

    const-wide/high16 v6, 0x4070000000000000L    # 256.0

    mul-double v4, v4, v6

    double-to-int v4, v4

    int-to-byte v4, v4

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

    aget-byte v5, v5, v3

    xor-int/2addr v4, v5

    int-to-byte v4, v4

    aput-byte v4, v2, v3

    .line 516
    add-int/lit8 v3, v3, 0x1

    goto :goto_5a

    .line 519
    .end local v3    # "a":I
    :cond_73
    iget-object v3, p0, Lim/tpelyyftgw/messenger/voip/VoIPService$7;->this$0:Lim/tpelyyftgw/messenger/voip/VoIPService;

    invoke-static {v3}, Lim/tpelyyftgw/messenger/voip/VoIPService;->access$600(Lim/tpelyyftgw/messenger/voip/VoIPService;)Lim/tpelyyftgw/tgnet/TLRPC$PhoneCall;

    move-result-object v3

    if-nez v3, :cond_8a

    .line 520
    sget-boolean v1, Lim/tpelyyftgw/messenger/BuildVars;->LOGS_ENABLED:Z

    if-eqz v1, :cond_84

    .line 521
    const-string v1, "call is null"

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

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

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

    .line 524
    return-void

    .line 526
    :cond_8a
    iget-object v3, p0, Lim/tpelyyftgw/messenger/voip/VoIPService$7;->this$0:Lim/tpelyyftgw/messenger/voip/VoIPService;

    invoke-static {v3, v2}, Lim/tpelyyftgw/messenger/voip/VoIPService;->access$702(Lim/tpelyyftgw/messenger/voip/VoIPService;[B)[B

    .line 527
    iget-object v3, p0, Lim/tpelyyftgw/messenger/voip/VoIPService$7;->val$messagesStorage:Lim/tpelyyftgw/messenger/MessagesStorage;

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

    move-result v3

    int-to-long v3, v3

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

    move-result-object v3

    .line 528
    .local v3, "g_b":Ljava/math/BigInteger;
    new-instance v4, Ljava/math/BigInteger;

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

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

    move-result-object v5

    const/4 v6, 0x1

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

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

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

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

    move-result-object v3

    .line 530
    iget-object v5, p0, Lim/tpelyyftgw/messenger/voip/VoIPService$7;->this$0:Lim/tpelyyftgw/messenger/voip/VoIPService;

    invoke-static {v5}, Lim/tpelyyftgw/messenger/voip/VoIPService;->access$600(Lim/tpelyyftgw/messenger/voip/VoIPService;)Lim/tpelyyftgw/tgnet/TLRPC$PhoneCall;

    move-result-object v7

    iget-object v7, v7, Lim/tpelyyftgw/tgnet/TLRPC$PhoneCall;->g_a_hash:[B

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

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

    move-result-object v5

    .line 533
    .local v5, "g_b_bytes":[B
    array-length v7, v5

    if-le v7, v1, :cond_c8

    .line 534
    new-array v7, v1, [B

    .line 535
    .local v7, "correctedAuth":[B
    const/4 v8, 0x0

    invoke-static {v5, v6, v7, v8, v1}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V

    .line 536
    move-object v5, v7

    .line 539
    .end local v7    # "correctedAuth":[B
    :cond_c8
    new-instance v1, Lim/tpelyyftgw/tgnet/TLRPC$TL_phone_acceptCall;

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

    .line 540
    .local v1, "req":Lim/tpelyyftgw/tgnet/TLRPC$TL_phone_acceptCall;
    iput-object v5, v1, Lim/tpelyyftgw/tgnet/TLRPC$TL_phone_acceptCall;->g_b:[B

    .line 542
    new-instance v7, Lim/tpelyyftgw/tgnet/TLRPC$TL_inputPhoneCall;

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

    iput-object v7, v1, Lim/tpelyyftgw/tgnet/TLRPC$TL_phone_acceptCall;->peer:Lim/tpelyyftgw/tgnet/TLRPC$TL_inputPhoneCall;

    .line 543
    iget-object v7, v1, Lim/tpelyyftgw/tgnet/TLRPC$TL_phone_acceptCall;->peer:Lim/tpelyyftgw/tgnet/TLRPC$TL_inputPhoneCall;

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

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

    move-result-object v8

    iget-wide v8, v8, Lim/tpelyyftgw/tgnet/TLRPC$PhoneCall;->id:J

    iput-wide v8, v7, Lim/tpelyyftgw/tgnet/TLRPC$TL_inputPhoneCall;->id:J

    .line 544
    iget-object v7, v1, Lim/tpelyyftgw/tgnet/TLRPC$TL_phone_acceptCall;->peer:Lim/tpelyyftgw/tgnet/TLRPC$TL_inputPhoneCall;

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

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

    move-result-object v8

    iget-wide v8, v8, Lim/tpelyyftgw/tgnet/TLRPC$PhoneCall;->access_hash:J

    iput-wide v8, v7, Lim/tpelyyftgw/tgnet/TLRPC$TL_inputPhoneCall;->access_hash:J

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

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

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

    .line 546
    iget-object v7, v1, Lim/tpelyyftgw/tgnet/TLRPC$TL_phone_acceptCall;->protocol:Lim/tpelyyftgw/tgnet/TLRPC$TL_phoneCallProtocol;

    iget-object v8, v1, Lim/tpelyyftgw/tgnet/TLRPC$TL_phone_acceptCall;->protocol:Lim/tpelyyftgw/tgnet/TLRPC$TL_phoneCallProtocol;

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

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

    .line 547
    iget-object v6, v1, Lim/tpelyyftgw/tgnet/TLRPC$TL_phone_acceptCall;->protocol:Lim/tpelyyftgw/tgnet/TLRPC$TL_phoneCallProtocol;

    const/16 v7, 0x41

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

    .line 548
    iget-object v6, v1, Lim/tpelyyftgw/tgnet/TLRPC$TL_phone_acceptCall;->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 549
    iget-object v6, p0, Lim/tpelyyftgw/messenger/voip/VoIPService$7;->this$0:Lim/tpelyyftgw/messenger/voip/VoIPService;

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

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

    move-result-object v6

    new-instance v7, Lim/tpelyyftgw/messenger/voip/VoIPService$7$1;

    invoke-direct {v7, p0}, Lim/tpelyyftgw/messenger/voip/VoIPService$7$1;-><init>(Lim/tpelyyftgw/messenger/voip/VoIPService$7;)V

    const/4 v8, 0x2

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

    .line 575
    .end local v0    # "res":Lim/tpelyyftgw/tgnet/TLRPC$messages_DhConfig;
    .end local v1    # "req":Lim/tpelyyftgw/tgnet/TLRPC$TL_phone_acceptCall;
    .end local v2    # "salt":[B
    .end local v3    # "g_b":Ljava/math/BigInteger;
    .end local v4    # "p":Ljava/math/BigInteger;
    .end local v5    # "g_b_bytes":[B
    goto :goto_120

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

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

    .line 579
    :goto_120
    return-void
.end method