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