TorClient.smali

.class public Lcom/subgraph/orchid/TorClient;
.super Ljava/lang/Object;
.source "TorClient.java"


# static fields
.field private static final logger:Ljava/util/logging/Logger;


# instance fields
.field private HU:Z

.field public final bBA:Ljava/util/concurrent/CountDownLatch;

.field public final bBr:Lcom/subgraph/orchid/TorConfig;

.field public final bBs:Lcom/subgraph/orchid/j;

.field private final bBt:Lcom/subgraph/orchid/circuits/u;

.field private final bBu:Lcom/subgraph/orchid/h;

.field public final bBv:Lcom/subgraph/orchid/e;

.field private final bBw:Lcom/subgraph/orchid/z;

.field private final bBx:Lcom/subgraph/orchid/directory/downloader/j;

.field private final bBy:Lcom/subgraph/orchid/c/a;

.field private bBz:Z


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

    .prologue
    .line 24
    const-class v0, Lcom/subgraph/orchid/TorClient;

    invoke-virtual {v0}, Ljava/lang/Class;->getName()Ljava/lang/String;

    move-result-object v0

    invoke-static {v0}, Ljava/util/logging/Logger;->getLogger(Ljava/lang/String;)Ljava/util/logging/Logger;

    move-result-object v0

    sput-object v0, Lcom/subgraph/orchid/TorClient;->logger:Ljava/util/logging/Logger;

    return-void
.end method

.method public constructor <init>()V
    .registers 2

    .prologue
    .line 40
    const/4 v0, 0x0

    invoke-direct {p0, v0}, Lcom/subgraph/orchid/TorClient;-><init>(B)V

    .line 41
    return-void
.end method

.method private constructor <init>(B)V
    .registers 9

    .prologue
    const/4 v6, 0x1

    const/4 v5, 0x0

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

    .line 34
    iput-boolean v5, p0, Lcom/subgraph/orchid/TorClient;->HU:Z

    .line 35
    iput-boolean v5, p0, Lcom/subgraph/orchid/TorClient;->bBz:Z

    .line 44
    invoke-static {}, Lcom/subgraph/orchid/ac;->isAndroidRuntime()Z

    move-result v0

    if-eqz v0, :cond_12

    .line 45
    invoke-static {}, Lcom/subgraph/orchid/crypto/PRNGFixes;->apply()V

    .line 47
    :cond_12
    invoke-static {}, Lcom/subgraph/orchid/ac;->Ka()Lcom/subgraph/orchid/TorConfig;

    move-result-object v0

    iput-object v0, p0, Lcom/subgraph/orchid/TorClient;->bBr:Lcom/subgraph/orchid/TorConfig;

    .line 48
    iget-object v0, p0, Lcom/subgraph/orchid/TorClient;->bBr:Lcom/subgraph/orchid/TorConfig;

    invoke-static {v0}, Lcom/subgraph/orchid/ac;->a(Lcom/subgraph/orchid/TorConfig;)Lcom/subgraph/orchid/j;

    move-result-object v0

    iput-object v0, p0, Lcom/subgraph/orchid/TorClient;->bBs:Lcom/subgraph/orchid/j;

    .line 49
    invoke-static {}, Lcom/subgraph/orchid/ac;->Kb()Lcom/subgraph/orchid/circuits/u;

    move-result-object v0

    iput-object v0, p0, Lcom/subgraph/orchid/TorClient;->bBt:Lcom/subgraph/orchid/circuits/u;

    .line 50
    iget-object v0, p0, Lcom/subgraph/orchid/TorClient;->bBt:Lcom/subgraph/orchid/circuits/u;

    .line 1175
    new-instance v1, Lcom/subgraph/orchid/TorClient$1;

    invoke-direct {v1, p0}, Lcom/subgraph/orchid/TorClient$1;-><init>(Lcom/subgraph/orchid/TorClient;)V

    .line 50
    invoke-virtual {v0, v1}, Lcom/subgraph/orchid/circuits/u;->a(Lcom/subgraph/orchid/ae;)V

    .line 51
    iget-object v0, p0, Lcom/subgraph/orchid/TorClient;->bBr:Lcom/subgraph/orchid/TorConfig;

    iget-object v1, p0, Lcom/subgraph/orchid/TorClient;->bBt:Lcom/subgraph/orchid/circuits/u;

    invoke-static {v0, v1}, Lcom/subgraph/orchid/ac;->a(Lcom/subgraph/orchid/TorConfig;Lcom/subgraph/orchid/circuits/u;)Lcom/subgraph/orchid/h;

    move-result-object v0

    iput-object v0, p0, Lcom/subgraph/orchid/TorClient;->bBu:Lcom/subgraph/orchid/h;

    .line 52
    iget-object v0, p0, Lcom/subgraph/orchid/TorClient;->bBr:Lcom/subgraph/orchid/TorConfig;

    iget-object v1, p0, Lcom/subgraph/orchid/TorClient;->bBt:Lcom/subgraph/orchid/circuits/u;

    invoke-static {v0, v1}, Lcom/subgraph/orchid/ac;->b(Lcom/subgraph/orchid/TorConfig;Lcom/subgraph/orchid/circuits/u;)Lcom/subgraph/orchid/directory/downloader/j;

    move-result-object v0

    iput-object v0, p0, Lcom/subgraph/orchid/TorClient;->bBx:Lcom/subgraph/orchid/directory/downloader/j;

    .line 53
    iget-object v0, p0, Lcom/subgraph/orchid/TorClient;->bBr:Lcom/subgraph/orchid/TorConfig;

    iget-object v1, p0, Lcom/subgraph/orchid/TorClient;->bBx:Lcom/subgraph/orchid/directory/downloader/j;

    iget-object v2, p0, Lcom/subgraph/orchid/TorClient;->bBs:Lcom/subgraph/orchid/j;

    iget-object v3, p0, Lcom/subgraph/orchid/TorClient;->bBu:Lcom/subgraph/orchid/h;

    iget-object v4, p0, Lcom/subgraph/orchid/TorClient;->bBt:Lcom/subgraph/orchid/circuits/u;

    invoke-static {v0, v1, v2, v3, v4}, Lcom/subgraph/orchid/ac;->a(Lcom/subgraph/orchid/TorConfig;Lcom/subgraph/orchid/directory/downloader/j;Lcom/subgraph/orchid/j;Lcom/subgraph/orchid/h;Lcom/subgraph/orchid/circuits/u;)Lcom/subgraph/orchid/e;

    move-result-object v0

    iput-object v0, p0, Lcom/subgraph/orchid/TorClient;->bBv:Lcom/subgraph/orchid/e;

    .line 54
    iget-object v0, p0, Lcom/subgraph/orchid/TorClient;->bBr:Lcom/subgraph/orchid/TorConfig;

    iget-object v1, p0, Lcom/subgraph/orchid/TorClient;->bBv:Lcom/subgraph/orchid/e;

    invoke-static {v0, v1}, Lcom/subgraph/orchid/ac;->a(Lcom/subgraph/orchid/TorConfig;Lcom/subgraph/orchid/e;)Lcom/subgraph/orchid/z;

    move-result-object v0

    iput-object v0, p0, Lcom/subgraph/orchid/TorClient;->bBw:Lcom/subgraph/orchid/z;

    .line 55
    new-instance v0, Ljava/util/concurrent/CountDownLatch;

    invoke-direct {v0, v6}, Ljava/util/concurrent/CountDownLatch;-><init>(I)V

    iput-object v0, p0, Lcom/subgraph/orchid/TorClient;->bBA:Ljava/util/concurrent/CountDownLatch;

    .line 56
    new-instance v0, Lcom/subgraph/orchid/c/a;

    invoke-direct {v0}, Lcom/subgraph/orchid/c/a;-><init>()V

    iput-object v0, p0, Lcom/subgraph/orchid/TorClient;->bBy:Lcom/subgraph/orchid/c/a;

    .line 57
    iget-object v0, p0, Lcom/subgraph/orchid/TorClient;->bBy:Lcom/subgraph/orchid/c/a;

    const/4 v1, 0x3

    new-array v1, v1, [Ljava/lang/Object;

    iget-object v2, p0, Lcom/subgraph/orchid/TorClient;->bBv:Lcom/subgraph/orchid/e;

    aput-object v2, v1, v5

    iget-object v2, p0, Lcom/subgraph/orchid/TorClient;->bBx:Lcom/subgraph/orchid/directory/downloader/j;

    aput-object v2, v1, v6

    const/4 v2, 0x2

    iget-object v3, p0, Lcom/subgraph/orchid/TorClient;->bBw:Lcom/subgraph/orchid/z;

    aput-object v3, v1, v2

    invoke-virtual {v0, v1}, Lcom/subgraph/orchid/c/a;->i([Ljava/lang/Object;)V

    .line 58
    return-void
.end method

.method static synthetic a(Lcom/subgraph/orchid/TorClient;)Ljava/util/concurrent/CountDownLatch;
    .registers 2

    .prologue
    .line 23
    iget-object v0, p0, Lcom/subgraph/orchid/TorClient;->bBA:Ljava/util/concurrent/CountDownLatch;

    return-object v0
.end method

.method public static main([Ljava/lang/String;)V
    .registers 4

    .prologue
    .line 184
    new-instance v0, Lcom/subgraph/orchid/TorClient;

    invoke-direct {v0}, Lcom/subgraph/orchid/TorClient;-><init>()V

    .line 2191
    new-instance v1, Lcom/subgraph/orchid/TorClient$2;

    invoke-direct {v1}, Lcom/subgraph/orchid/TorClient$2;-><init>()V

    .line 3167
    iget-object v2, v0, Lcom/subgraph/orchid/TorClient;->bBt:Lcom/subgraph/orchid/circuits/u;

    invoke-virtual {v2, v1}, Lcom/subgraph/orchid/circuits/u;->a(Lcom/subgraph/orchid/ae;)V

    .line 186
    invoke-virtual {v0}, Lcom/subgraph/orchid/TorClient;->start()V

    .line 5142
    iget-object v0, v0, Lcom/subgraph/orchid/TorClient;->bBw:Lcom/subgraph/orchid/z;

    invoke-interface {v0}, Lcom/subgraph/orchid/z;->JU()V

    .line 188
    return-void
.end method


# virtual methods
.method public final declared-synchronized Kc()V
    .registers 3

    .prologue
    .line 136
    monitor-enter p0

    :try_start_1
    iget-boolean v0, p0, Lcom/subgraph/orchid/TorClient;->HU:Z

    if-nez v0, :cond_10

    .line 137
    new-instance v0, Ljava/lang/IllegalStateException;

    const-string v1, "Must call start() first"

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

    throw v0
    :try_end_d
    .catchall {:try_start_1 .. :try_end_d} :catchall_d

    .line 136
    :catchall_d
    move-exception v0

    monitor-exit p0

    throw v0

    .line 139
    :cond_10
    monitor-exit p0

    return-void
.end method

.method public final getSocketFactory()Ljavax/net/SocketFactory;
    .registers 2

    .prologue
    .line 65
    new-instance v0, Lcom/subgraph/orchid/h/b;

    invoke-direct {v0, p0}, Lcom/subgraph/orchid/h/b;-><init>(Lcom/subgraph/orchid/TorClient;)V

    return-object v0
.end method

.method public final declared-synchronized start()V
    .registers 5

    .prologue
    .line 72
    monitor-enter p0

    :try_start_1
    iget-boolean v0, p0, Lcom/subgraph/orchid/TorClient;->HU:Z
    :try_end_3
    .catchall {:try_start_1 .. :try_end_3} :catchall_13

    if-eqz v0, :cond_7

    .line 86
    :goto_5
    monitor-exit p0

    return-void

    .line 75
    :cond_7
    :try_start_7
    iget-boolean v0, p0, Lcom/subgraph/orchid/TorClient;->bBz:Z

    if-eqz v0, :cond_16

    .line 76
    new-instance v0, Ljava/lang/IllegalStateException;

    const-string v1, "Cannot restart a TorClient instance.  Create a new instance instead."

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

    throw v0
    :try_end_13
    .catchall {:try_start_7 .. :try_end_13} :catchall_13

    .line 72
    :catchall_13
    move-exception v0

    monitor-exit p0

    throw v0

    .line 78
    :cond_16
    :try_start_16
    sget-object v0, Lcom/subgraph/orchid/TorClient;->logger:Ljava/util/logging/Logger;

    new-instance v1, Ljava/lang/StringBuilder;

    const-string v2, "Starting Orchid (version: "

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

    invoke-static {}, Lcom/subgraph/orchid/ac;->JZ()Ljava/lang/String;

    move-result-object v2

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

    move-result-object v1

    const-string v2, ")"

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

    move-result-object v1

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

    move-result-object v1

    invoke-virtual {v0, v1}, Ljava/util/logging/Logger;->info(Ljava/lang/String;)V
    :try_end_34
    .catchall {:try_start_16 .. :try_end_34} :catchall_13

    .line 1205
    :try_start_34
    const-string v0, "AES"

    invoke-static {v0}, Ljavax/crypto/Cipher;->getMaxAllowedKeyLength(Ljava/lang/String;)I

    move-result v0

    const/16 v1, 0x100

    if-ge v0, v1, :cond_65

    .line 1207
    sget-object v0, Lcom/subgraph/orchid/TorClient;->logger:Ljava/util/logging/Logger;

    const-string v1, "Unlimited Strength Jurisdiction Policy Files are required but not installed."

    invoke-virtual {v0, v1}, Ljava/util/logging/Logger;->severe(Ljava/lang/String;)V

    .line 1208
    new-instance v0, Lcom/subgraph/orchid/TorException;

    const-string v1, "Unlimited Strength Jurisdiction Policy Files are required but not installed."

    invoke-direct {v0, v1}, Lcom/subgraph/orchid/TorException;-><init>(Ljava/lang/String;)V

    throw v0
    :try_end_4d
    .catch Ljava/security/NoSuchAlgorithmException; {:try_start_34 .. :try_end_4d} :catch_4d
    .catch Ljava/lang/NoSuchMethodError; {:try_start_34 .. :try_end_4d} :catch_5d
    .catchall {:try_start_34 .. :try_end_4d} :catchall_13

    .line 1210
    :catch_4d
    move-exception v0

    .line 1211
    :try_start_4e
    sget-object v1, Lcom/subgraph/orchid/TorClient;->logger:Ljava/util/logging/Logger;

    sget-object v2, Ljava/util/logging/Level;->SEVERE:Ljava/util/logging/Level;

    const-string v3, "No AES provider found"

    invoke-virtual {v1, v2, v3}, Ljava/util/logging/Logger;->log(Ljava/util/logging/Level;Ljava/lang/String;)V

    .line 1212
    new-instance v1, Lcom/subgraph/orchid/TorException;

    invoke-direct {v1, v0}, Lcom/subgraph/orchid/TorException;-><init>(Ljava/lang/Throwable;)V

    throw v1

    .line 1214
    :catch_5d
    move-exception v0

    sget-object v0, Lcom/subgraph/orchid/TorClient;->logger:Ljava/util/logging/Logger;

    const-string v1, "Skipped check for Unlimited Strength Jurisdiction Policy Files"

    invoke-virtual {v0, v1}, Ljava/util/logging/Logger;->info(Ljava/lang/String;)V

    .line 80
    :cond_65
    iget-object v0, p0, Lcom/subgraph/orchid/TorClient;->bBx:Lcom/subgraph/orchid/directory/downloader/j;

    iget-object v1, p0, Lcom/subgraph/orchid/TorClient;->bBs:Lcom/subgraph/orchid/j;

    invoke-virtual {v0, v1}, Lcom/subgraph/orchid/directory/downloader/j;->a(Lcom/subgraph/orchid/j;)V

    .line 81
    iget-object v0, p0, Lcom/subgraph/orchid/TorClient;->bBv:Lcom/subgraph/orchid/e;

    invoke-interface {v0}, Lcom/subgraph/orchid/e;->Iv()V

    .line 82
    invoke-static {}, Lcom/subgraph/orchid/c/a;->Mo()Z

    move-result v0

    if-eqz v0, :cond_7c

    .line 83
    iget-object v0, p0, Lcom/subgraph/orchid/TorClient;->bBy:Lcom/subgraph/orchid/c/a;

    invoke-virtual {v0}, Lcom/subgraph/orchid/c/a;->startListening()V

    .line 85
    :cond_7c
    const/4 v0, 0x1

    iput-boolean v0, p0, Lcom/subgraph/orchid/TorClient;->HU:Z
    :try_end_7f
    .catchall {:try_start_4e .. :try_end_7f} :catchall_13

    goto :goto_5
.end method

.method public final declared-synchronized stop()V
    .registers 6

    .prologue
    .line 89
    monitor-enter p0

    :try_start_1
    iget-boolean v0, p0, Lcom/subgraph/orchid/TorClient;->HU:Z

    if-eqz v0, :cond_9

    iget-boolean v0, p0, Lcom/subgraph/orchid/TorClient;->bBz:Z
    :try_end_7
    .catchall {:try_start_1 .. :try_end_7} :catchall_35

    if-eqz v0, :cond_b

    .line 105
    :cond_9
    :goto_9
    monitor-exit p0

    return-void

    .line 93
    :cond_b
    :try_start_b
    iget-object v0, p0, Lcom/subgraph/orchid/TorClient;->bBw:Lcom/subgraph/orchid/z;

    invoke-interface {v0}, Lcom/subgraph/orchid/z;->stop()V

    .line 94
    iget-object v0, p0, Lcom/subgraph/orchid/TorClient;->bBy:Lcom/subgraph/orchid/c/a;

    invoke-virtual {v0}, Lcom/subgraph/orchid/c/a;->isListening()Z

    move-result v0

    if-eqz v0, :cond_1d

    .line 95
    iget-object v0, p0, Lcom/subgraph/orchid/TorClient;->bBy:Lcom/subgraph/orchid/c/a;

    invoke-virtual {v0}, Lcom/subgraph/orchid/c/a;->stopListening()V

    .line 97
    :cond_1d
    iget-object v0, p0, Lcom/subgraph/orchid/TorClient;->bBx:Lcom/subgraph/orchid/directory/downloader/j;

    invoke-virtual {v0}, Lcom/subgraph/orchid/directory/downloader/j;->stop()V

    .line 98
    iget-object v0, p0, Lcom/subgraph/orchid/TorClient;->bBv:Lcom/subgraph/orchid/e;

    invoke-interface {v0}, Lcom/subgraph/orchid/e;->Iw()V

    .line 99
    iget-object v0, p0, Lcom/subgraph/orchid/TorClient;->bBs:Lcom/subgraph/orchid/j;

    invoke-interface {v0}, Lcom/subgraph/orchid/j;->close()V

    .line 100
    iget-object v0, p0, Lcom/subgraph/orchid/TorClient;->bBu:Lcom/subgraph/orchid/h;

    invoke-interface {v0}, Lcom/subgraph/orchid/h;->close()V
    :try_end_31
    .catch Ljava/lang/Exception; {:try_start_b .. :try_end_31} :catch_38
    .catchall {:try_start_b .. :try_end_31} :catchall_53

    .line 104
    const/4 v0, 0x1

    :try_start_32
    iput-boolean v0, p0, Lcom/subgraph/orchid/TorClient;->bBz:Z
    :try_end_34
    .catchall {:try_start_32 .. :try_end_34} :catchall_35

    goto :goto_9

    .line 89
    :catchall_35
    move-exception v0

    monitor-exit p0

    throw v0

    .line 101
    :catch_38
    move-exception v0

    .line 102
    :try_start_39
    sget-object v1, Lcom/subgraph/orchid/TorClient;->logger:Ljava/util/logging/Logger;

    sget-object v2, Ljava/util/logging/Level;->WARNING:Ljava/util/logging/Level;

    new-instance v3, Ljava/lang/StringBuilder;

    const-string v4, "Unexpected exception while shutting down TorClient instance: "

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

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

    move-result-object v3

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

    move-result-object v3

    invoke-virtual {v1, v2, v3, v0}, Ljava/util/logging/Logger;->log(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Throwable;)V
    :try_end_4f
    .catchall {:try_start_39 .. :try_end_4f} :catchall_53

    .line 104
    const/4 v0, 0x1

    :try_start_50
    iput-boolean v0, p0, Lcom/subgraph/orchid/TorClient;->bBz:Z

    goto :goto_9

    :catchall_53
    move-exception v0

    const/4 v1, 0x1

    iput-boolean v1, p0, Lcom/subgraph/orchid/TorClient;->bBz:Z

    throw v0
    :try_end_58
    .catchall {:try_start_50 .. :try_end_58} :catchall_35
.end method