h.smali
.class public Lcom/subgraph/orchid/b/h;
.super Ljava/lang/Object;
.source "ConnectionImpl.java"
# interfaces
.implements Lcom/subgraph/orchid/c/c;
.implements Lcom/subgraph/orchid/g;
# static fields
.field private static final bFB:Lcom/subgraph/orchid/b;
.field static final logger:Ljava/util/logging/Logger;
# instance fields
.field IM:Z
.field final bBr:Lcom/subgraph/orchid/TorConfig;
.field final bBt:Lcom/subgraph/orchid/circuits/u;
.field volatile bCb:Z
.field final bFC:Ljava/util/Map;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/Map",
"<",
"Ljava/lang/Integer;",
"Lcom/subgraph/orchid/c;",
">;"
}
.end annotation
.end field
.field private final bFD:Ljava/util/concurrent/BlockingQueue;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/concurrent/BlockingQueue",
"<",
"Lcom/subgraph/orchid/b;",
">;"
}
.end annotation
.end field
.field private bFE:I
.field final bFF:Ljava/lang/Thread;
.field final bFG:Ljava/util/concurrent/locks/ReentrantLock;
.field final bFH:Ljava/util/concurrent/locks/ReentrantLock;
.field private final bFI:Ljava/util/concurrent/locks/ReentrantLock;
.field private final bFJ:Ljava/util/concurrent/atomic/AtomicLong;
.field final bFu:Z
.field final bFw:Ljavax/net/ssl/SSLSocket;
.field input:Ljava/io/InputStream;
.field output:Ljava/io/OutputStream;
.field final router:Lcom/subgraph/orchid/v;
# direct methods
.method static constructor <clinit>()V
.registers 2
.prologue
const/4 v1, 0x0
.line 47
const-class v0, Lcom/subgraph/orchid/b/h;
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/b/h;->logger:Ljava/util/logging/Logger;
.line 50
invoke-static {v1, v1}, Lcom/subgraph/orchid/circuits/a/a;->aJ(II)Lcom/subgraph/orchid/circuits/a/a;
move-result-object v0
sput-object v0, Lcom/subgraph/orchid/b/h;->bFB:Lcom/subgraph/orchid/b;
return-void
.end method
.method public constructor <init>(Lcom/subgraph/orchid/TorConfig;Ljavax/net/ssl/SSLSocket;Lcom/subgraph/orchid/v;Lcom/subgraph/orchid/circuits/u;Z)V
.registers 9
.prologue
const/4 v2, 0x1
.line 72
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 62
iput v2, p0, Lcom/subgraph/orchid/b/h;->bFE:I
.line 66
const-string v0, "connect"
invoke-static {v0}, Lcom/subgraph/orchid/ab;->lock(Ljava/lang/String;)Ljava/util/concurrent/locks/ReentrantLock;
move-result-object v0
iput-object v0, p0, Lcom/subgraph/orchid/b/h;->bFG:Ljava/util/concurrent/locks/ReentrantLock;
.line 67
const-string v0, "circuits"
invoke-static {v0}, Lcom/subgraph/orchid/ab;->lock(Ljava/lang/String;)Ljava/util/concurrent/locks/ReentrantLock;
move-result-object v0
iput-object v0, p0, Lcom/subgraph/orchid/b/h;->bFH:Ljava/util/concurrent/locks/ReentrantLock;
.line 68
const-string v0, "output"
invoke-static {v0}, Lcom/subgraph/orchid/ab;->lock(Ljava/lang/String;)Ljava/util/concurrent/locks/ReentrantLock;
move-result-object v0
iput-object v0, p0, Lcom/subgraph/orchid/b/h;->bFI:Ljava/util/concurrent/locks/ReentrantLock;
.line 69
new-instance v0, Ljava/util/concurrent/atomic/AtomicLong;
invoke-direct {v0}, Ljava/util/concurrent/atomic/AtomicLong;-><init>()V
iput-object v0, p0, Lcom/subgraph/orchid/b/h;->bFJ:Ljava/util/concurrent/atomic/AtomicLong;
.line 73
iput-object p1, p0, Lcom/subgraph/orchid/b/h;->bBr:Lcom/subgraph/orchid/TorConfig;
.line 74
iput-object p2, p0, Lcom/subgraph/orchid/b/h;->bFw:Ljavax/net/ssl/SSLSocket;
.line 75
iput-object p3, p0, Lcom/subgraph/orchid/b/h;->router:Lcom/subgraph/orchid/v;
.line 76
new-instance v0, Ljava/util/HashMap;
invoke-direct {v0}, Ljava/util/HashMap;-><init>()V
iput-object v0, p0, Lcom/subgraph/orchid/b/h;->bFC:Ljava/util/Map;
.line 77
new-instance v0, Ljava/lang/Thread;
.line 1225
new-instance v1, Lcom/subgraph/orchid/b/h$1;
invoke-direct {v1, p0}, Lcom/subgraph/orchid/b/h$1;-><init>(Lcom/subgraph/orchid/b/h;)V
.line 77
invoke-direct {v0, v1}, Ljava/lang/Thread;-><init>(Ljava/lang/Runnable;)V
iput-object v0, p0, Lcom/subgraph/orchid/b/h;->bFF:Ljava/lang/Thread;
.line 78
iget-object v0, p0, Lcom/subgraph/orchid/b/h;->bFF:Ljava/lang/Thread;
invoke-virtual {v0, v2}, Ljava/lang/Thread;->setDaemon(Z)V
.line 79
new-instance v0, Ljava/util/concurrent/LinkedBlockingQueue;
invoke-direct {v0}, Ljava/util/concurrent/LinkedBlockingQueue;-><init>()V
iput-object v0, p0, Lcom/subgraph/orchid/b/h;->bFD:Ljava/util/concurrent/BlockingQueue;
.line 80
iput-object p4, p0, Lcom/subgraph/orchid/b/h;->bBt:Lcom/subgraph/orchid/circuits/u;
.line 81
iput-boolean p5, p0, Lcom/subgraph/orchid/b/h;->bFu:Z
.line 2086
new-instance v0, Lcom/subgraph/orchid/crypto/q;
invoke-direct {v0}, Lcom/subgraph/orchid/crypto/q;-><init>()V
.line 2087
const v1, 0xffff
invoke-virtual {v0, v1}, Lcom/subgraph/orchid/crypto/q;->nextInt(I)I
move-result v0
add-int/lit8 v0, v0, 0x1
iput v0, p0, Lcom/subgraph/orchid/b/h;->bFE:I
.line 83
return-void
.end method
.method private LK()V
.registers 3
.prologue
.line 113
iget v0, p0, Lcom/subgraph/orchid/b/h;->bFE:I
add-int/lit8 v0, v0, 0x1
iput v0, p0, Lcom/subgraph/orchid/b/h;->bFE:I
.line 114
iget v0, p0, Lcom/subgraph/orchid/b/h;->bFE:I
const v1, 0xffff
if-le v0, v1, :cond_10
.line 115
const/4 v0, 0x1
iput v0, p0, Lcom/subgraph/orchid/b/h;->bFE:I
.line 116
:cond_10
return-void
.end method
.method private LL()Lcom/subgraph/orchid/b;
.registers 5
.prologue
.line 200
:try_start_0
iget-object v0, p0, Lcom/subgraph/orchid/b/h;->input:Ljava/io/InputStream;
invoke-static {v0}, Lcom/subgraph/orchid/circuits/a/a;->i(Ljava/io/InputStream;)Lcom/subgraph/orchid/circuits/a/a;
:try_end_5
.catch Ljava/io/EOFException; {:try_start_0 .. :try_end_5} :catch_7
.catch Ljava/io/IOException; {:try_start_0 .. :try_end_5} :catch_11
move-result-object v0
return-object v0
.line 202
:catch_7
move-exception v0
invoke-virtual {p0}, Lcom/subgraph/orchid/b/h;->LM()V
.line 203
new-instance v0, Lcom/subgraph/orchid/ConnectionIOException;
invoke-direct {v0}, Lcom/subgraph/orchid/ConnectionIOException;-><init>()V
throw v0
.line 204
:catch_11
move-exception v0
.line 205
iget-boolean v1, p0, Lcom/subgraph/orchid/b/h;->bCb:Z
if-nez v1, :cond_3b
.line 206
sget-object v1, Lcom/subgraph/orchid/b/h;->logger:Ljava/util/logging/Logger;
new-instance v2, Ljava/lang/StringBuilder;
const-string v3, "IOException reading cell from connection "
invoke-direct {v2, v3}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v2, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
move-result-object v2
const-string v3, " : "
invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v2
invoke-virtual {v0}, Ljava/io/IOException;->getMessage()Ljava/lang/String;
move-result-object v3
invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v2
invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v2
invoke-virtual {v1, v2}, Ljava/util/logging/Logger;->fine(Ljava/lang/String;)V
.line 207
invoke-virtual {p0}, Lcom/subgraph/orchid/b/h;->LM()V
.line 209
:cond_3b
new-instance v1, Lcom/subgraph/orchid/ConnectionIOException;
new-instance v2, Ljava/lang/StringBuilder;
invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
invoke-virtual {v0}, Ljava/lang/Object;->getClass()Ljava/lang/Class;
move-result-object v3
invoke-virtual {v3}, Ljava/lang/Class;->getName()Ljava/lang/String;
move-result-object v3
invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v2
const-string v3, " "
invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v2
invoke-virtual {v0}, Ljava/io/IOException;->getMessage()Ljava/lang/String;
move-result-object v0
invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
invoke-direct {v1, v0}, Lcom/subgraph/orchid/ConnectionIOException;-><init>(Ljava/lang/String;)V
throw v1
.end method
.method static synthetic a(Lcom/subgraph/orchid/b/h;)V
.registers 6
.prologue
.line 2237
:cond_0
:goto_0
invoke-static {}, Ljava/lang/Thread;->interrupted()Z
move-result v0
if-nez v0, :cond_61
.line 2239
:try_start_6
invoke-direct {p0}, Lcom/subgraph/orchid/b/h;->LL()Lcom/subgraph/orchid/b;
move-result-object v1
.line 2264
invoke-virtual {p0}, Lcom/subgraph/orchid/b/h;->LO()V
.line 2265
invoke-interface {v1}, Lcom/subgraph/orchid/b;->Ij()I
move-result v0
.line 2267
const/4 v2, 0x3
if-ne v0, v2, :cond_8f
.line 2293
iget-object v0, p0, Lcom/subgraph/orchid/b/h;->bFH:Ljava/util/concurrent/locks/ReentrantLock;
invoke-virtual {v0}, Ljava/util/concurrent/locks/ReentrantLock;->lock()V
:try_end_19
.catch Lcom/subgraph/orchid/ConnectionIOException; {:try_start_6 .. :try_end_19} :catch_59
.catch Lcom/subgraph/orchid/TorException; {:try_start_6 .. :try_end_19} :catch_6b
.line 2295
:try_start_19
iget-object v0, p0, Lcom/subgraph/orchid/b/h;->bFC:Ljava/util/Map;
invoke-interface {v1}, Lcom/subgraph/orchid/b;->Ii()I
move-result v2
invoke-static {v2}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v2
invoke-interface {v0, v2}, Ljava/util/Map;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Lcom/subgraph/orchid/c;
.line 2296
if-nez v0, :cond_62
.line 2297
sget-object v0, Lcom/subgraph/orchid/b/h;->logger:Ljava/util/logging/Logger;
new-instance v2, Ljava/lang/StringBuilder;
const-string v3, "Could not deliver relay cell for circuit id = "
invoke-direct {v2, v3}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-interface {v1}, Lcom/subgraph/orchid/b;->Ii()I
move-result v1
invoke-virtual {v2, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v1
const-string v2, " on connection "
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
move-result-object v1
const-string v2, ". Circuit not found"
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;->warning(Ljava/lang/String;)V
:try_end_53
.catchall {:try_start_19 .. :try_end_53} :catchall_88
.line 2301
:try_start_53
iget-object v0, p0, Lcom/subgraph/orchid/b/h;->bFH:Ljava/util/concurrent/locks/ReentrantLock;
invoke-virtual {v0}, Ljava/util/concurrent/locks/ReentrantLock;->unlock()V
:try_end_58
.catch Lcom/subgraph/orchid/ConnectionIOException; {:try_start_53 .. :try_end_58} :catch_59
.catch Lcom/subgraph/orchid/TorException; {:try_start_53 .. :try_end_58} :catch_6b
goto :goto_0
.line 2241
:catch_59
move-exception v0
iget-object v0, p0, Lcom/subgraph/orchid/b/h;->bFD:Ljava/util/concurrent/BlockingQueue;
sget-object v1, Lcom/subgraph/orchid/b/h;->bFB:Lcom/subgraph/orchid/b;
invoke-interface {v0, v1}, Ljava/util/concurrent/BlockingQueue;->add(Ljava/lang/Object;)Z
.line 2243
:cond_61
return-void
.line 2301
:cond_62
:try_start_62
iget-object v2, p0, Lcom/subgraph/orchid/b/h;->bFH:Ljava/util/concurrent/locks/ReentrantLock;
invoke-virtual {v2}, Ljava/util/concurrent/locks/ReentrantLock;->unlock()V
.line 2304
invoke-interface {v0, v1}, Lcom/subgraph/orchid/c;->a(Lcom/subgraph/orchid/b;)V
:try_end_6a
.catch Lcom/subgraph/orchid/ConnectionIOException; {:try_start_62 .. :try_end_6a} :catch_59
.catch Lcom/subgraph/orchid/TorException; {:try_start_62 .. :try_end_6a} :catch_6b
goto :goto_0
.line 2244
:catch_6b
move-exception v0
.line 2245
sget-object v1, Lcom/subgraph/orchid/b/h;->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, "Unhandled Tor exception reading and processing cells: "
invoke-direct {v3, v4}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v0}, Lcom/subgraph/orchid/TorException;->getMessage()Ljava/lang/String;
move-result-object v4
invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)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
goto/16 :goto_0
.line 2301
:catchall_88
move-exception v0
:try_start_89
iget-object v1, p0, Lcom/subgraph/orchid/b/h;->bFH:Ljava/util/concurrent/locks/ReentrantLock;
invoke-virtual {v1}, Ljava/util/concurrent/locks/ReentrantLock;->unlock()V
throw v0
.line 2272
:cond_8f
sparse-switch v0, :sswitch_data_c4
goto/16 :goto_0
.line 2309
:sswitch_94
iget-object v0, p0, Lcom/subgraph/orchid/b/h;->bFH:Ljava/util/concurrent/locks/ReentrantLock;
invoke-virtual {v0}, Ljava/util/concurrent/locks/ReentrantLock;->lock()V
:try_end_99
.catch Lcom/subgraph/orchid/ConnectionIOException; {:try_start_89 .. :try_end_99} :catch_59
.catch Lcom/subgraph/orchid/TorException; {:try_start_89 .. :try_end_99} :catch_6b
.line 2311
:try_start_99
iget-object v0, p0, Lcom/subgraph/orchid/b/h;->bFC:Ljava/util/Map;
invoke-interface {v1}, Lcom/subgraph/orchid/b;->Ii()I
move-result v2
invoke-static {v2}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v2
invoke-interface {v0, v2}, Ljava/util/Map;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Lcom/subgraph/orchid/c;
:try_end_a9
.catchall {:try_start_99 .. :try_end_a9} :catchall_bc
.line 2313
:try_start_a9
iget-object v2, p0, Lcom/subgraph/orchid/b/h;->bFH:Ljava/util/concurrent/locks/ReentrantLock;
invoke-virtual {v2}, Ljava/util/concurrent/locks/ReentrantLock;->unlock()V
.line 2316
if-eqz v0, :cond_0
.line 2317
invoke-interface {v0, v1}, Lcom/subgraph/orchid/c;->b(Lcom/subgraph/orchid/b;)V
goto/16 :goto_0
.line 2277
:sswitch_b5
iget-object v0, p0, Lcom/subgraph/orchid/b/h;->bFD:Ljava/util/concurrent/BlockingQueue;
invoke-interface {v0, v1}, Ljava/util/concurrent/BlockingQueue;->add(Ljava/lang/Object;)Z
goto/16 :goto_0
.line 2313
:catchall_bc
move-exception v0
iget-object v1, p0, Lcom/subgraph/orchid/b/h;->bFH:Ljava/util/concurrent/locks/ReentrantLock;
invoke-virtual {v1}, Ljava/util/concurrent/locks/ReentrantLock;->unlock()V
throw v0
:try_end_c3
.catch Lcom/subgraph/orchid/ConnectionIOException; {:try_start_a9 .. :try_end_c3} :catch_59
.catch Lcom/subgraph/orchid/TorException; {:try_start_a9 .. :try_end_c3} :catch_6b
.line 2272
nop
:sswitch_data_c4
.sparse-switch
0x2 -> :sswitch_94
0x4 -> :sswitch_94
0x6 -> :sswitch_94
0x7 -> :sswitch_b5
0x8 -> :sswitch_b5
0x81 -> :sswitch_b5
0x82 -> :sswitch_b5
.end sparse-switch
.end method
.method static k(Lcom/subgraph/orchid/v;)Ljava/net/SocketAddress;
.registers 4
.prologue
.line 175
invoke-interface {p0}, Lcom/subgraph/orchid/v;->JC()Lcom/subgraph/orchid/d/d;
move-result-object v0
invoke-virtual {v0}, Lcom/subgraph/orchid/d/d;->Mr()Ljava/net/InetAddress;
move-result-object v0
.line 176
new-instance v1, Ljava/net/InetSocketAddress;
invoke-interface {p0}, Lcom/subgraph/orchid/v;->JD()I
move-result v2
invoke-direct {v1, v0, v2}, Ljava/net/InetSocketAddress;-><init>(Ljava/net/InetAddress;I)V
return-object v1
.end method
.method static synthetic ya()Ljava/util/logging/Logger;
.registers 1
.prologue
.line 46
sget-object v0, Lcom/subgraph/orchid/b/h;->logger:Ljava/util/logging/Logger;
return-object v0
.end method
# virtual methods
.method final LM()V
.registers 5
.prologue
.line 215
:try_start_0
sget-object v0, Lcom/subgraph/orchid/b/h;->logger:Ljava/util/logging/Logger;
new-instance v1, Ljava/lang/StringBuilder;
const-string v2, "Closing connection to "
invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v1, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)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;->fine(Ljava/lang/String;)V
.line 216
const/4 v0, 0x1
iput-boolean v0, p0, Lcom/subgraph/orchid/b/h;->bCb:Z
.line 217
iget-object v0, p0, Lcom/subgraph/orchid/b/h;->bFw:Ljavax/net/ssl/SSLSocket;
invoke-virtual {v0}, Ljavax/net/ssl/SSLSocket;->close()V
.line 218
const/4 v0, 0x0
iput-boolean v0, p0, Lcom/subgraph/orchid/b/h;->IM:Z
:try_end_1f
.catch Ljava/io/IOException; {:try_start_0 .. :try_end_1f} :catch_20
.line 222
:goto_1f
return-void
.line 219
:catch_20
move-exception v0
.line 220
sget-object v1, Lcom/subgraph/orchid/b/h;->logger:Ljava/util/logging/Logger;
new-instance v2, Ljava/lang/StringBuilder;
const-string v3, "Error closing socket: "
invoke-direct {v2, v3}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v0}, Ljava/io/IOException;->getMessage()Ljava/lang/String;
move-result-object v0
invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
invoke-virtual {v1, v0}, Ljava/util/logging/Logger;->warning(Ljava/lang/String;)V
goto :goto_1f
.end method
.method final LN()Lcom/subgraph/orchid/b;
.registers 2
.prologue
.line 256
:try_start_0
iget-object v0, p0, Lcom/subgraph/orchid/b/h;->bFD:Ljava/util/concurrent/BlockingQueue;
invoke-interface {v0}, Ljava/util/concurrent/BlockingQueue;->take()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lcom/subgraph/orchid/b;
:try_end_8
.catch Ljava/lang/InterruptedException; {:try_start_0 .. :try_end_8} :catch_9
return-object v0
.line 258
:catch_9
move-exception v0
invoke-virtual {p0}, Lcom/subgraph/orchid/b/h;->LM()V
.line 259
new-instance v0, Lcom/subgraph/orchid/ConnectionIOException;
invoke-direct {v0}, Lcom/subgraph/orchid/ConnectionIOException;-><init>()V
throw v0
.end method
.method final LO()V
.registers 5
.prologue
.line 335
iget-object v0, p0, Lcom/subgraph/orchid/b/h;->bFJ:Ljava/util/concurrent/atomic/AtomicLong;
invoke-static {}, Ljava/lang/System;->currentTimeMillis()J
move-result-wide v2
invoke-virtual {v0, v2, v3}, Ljava/util/concurrent/atomic/AtomicLong;->set(J)V
.line 336
return-void
.end method
.method final LP()J
.registers 5
.prologue
const-wide/16 v0, 0x0
.line 339
iget-object v2, p0, Lcom/subgraph/orchid/b/h;->bFJ:Ljava/util/concurrent/atomic/AtomicLong;
invoke-virtual {v2}, Ljava/util/concurrent/atomic/AtomicLong;->get()J
move-result-wide v2
cmp-long v2, v2, v0
if-nez v2, :cond_d
.line 342
:goto_c
return-wide v0
:cond_d
invoke-static {}, Ljava/lang/System;->currentTimeMillis()J
move-result-wide v0
iget-object v2, p0, Lcom/subgraph/orchid/b/h;->bFJ:Ljava/util/concurrent/atomic/AtomicLong;
invoke-virtual {v2}, Ljava/util/concurrent/atomic/AtomicLong;->get()J
move-result-wide v2
sub-long/2addr v0, v2
goto :goto_c
.end method
.method public final a(Lcom/subgraph/orchid/c/d;Ljava/io/PrintWriter;I)V
.registers 10
.prologue
.line 360
iget-object v0, p0, Lcom/subgraph/orchid/b/h;->bFH:Ljava/util/concurrent/locks/ReentrantLock;
invoke-virtual {v0}, Ljava/util/concurrent/locks/ReentrantLock;->lock()V
.line 362
:try_start_5
iget-object v0, p0, Lcom/subgraph/orchid/b/h;->bFC:Ljava/util/Map;
invoke-interface {v0}, Ljava/util/Map;->size()I
:try_end_a
.catchall {:try_start_5 .. :try_end_a} :catchall_17
move-result v0
.line 364
iget-object v1, p0, Lcom/subgraph/orchid/b/h;->bFH:Ljava/util/concurrent/locks/ReentrantLock;
invoke-virtual {v1}, Ljava/util/concurrent/locks/ReentrantLock;->unlock()V
.line 366
if-nez v0, :cond_1e
and-int/lit8 v1, p3, 0x2
if-nez v1, :cond_1e
.line 373
:goto_16
return-void
.line 364
:catchall_17
move-exception v0
iget-object v1, p0, Lcom/subgraph/orchid/b/h;->bFH:Ljava/util/concurrent/locks/ReentrantLock;
invoke-virtual {v1}, Ljava/util/concurrent/locks/ReentrantLock;->unlock()V
throw v0
.line 369
:cond_1e
new-instance v1, Ljava/lang/StringBuilder;
const-string v2, " [Connection router="
invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
iget-object v2, p0, Lcom/subgraph/orchid/b/h;->router:Lcom/subgraph/orchid/v;
invoke-interface {v2}, Lcom/subgraph/orchid/v;->JB()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
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-virtual {p2, v1}, Ljava/io/PrintWriter;->print(Ljava/lang/String;)V
.line 370
new-instance v1, Ljava/lang/StringBuilder;
const-string v2, " circuits="
invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v1, v0}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
invoke-virtual {p2, v0}, Ljava/io/PrintWriter;->print(Ljava/lang/String;)V
.line 371
new-instance v0, Ljava/lang/StringBuilder;
const-string v1, " idle="
invoke-direct {v0, v1}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {p0}, Lcom/subgraph/orchid/b/h;->LP()J
move-result-wide v2
const-wide/16 v4, 0x3e8
div-long/2addr v2, v4
invoke-virtual {v0, v2, v3}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder;
move-result-object v0
const-string v1, "s"
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
invoke-virtual {p2, v0}, Ljava/io/PrintWriter;->print(Ljava/lang/String;)V
.line 372
const-string v0, "]"
invoke-virtual {p2, v0}, Ljava/io/PrintWriter;->println(Ljava/lang/String;)V
goto :goto_16
.end method
.method public final b(Lcom/subgraph/orchid/c;)V
.registers 4
.prologue
.line 346
iget-object v0, p0, Lcom/subgraph/orchid/b/h;->bFH:Ljava/util/concurrent/locks/ReentrantLock;
invoke-virtual {v0}, Ljava/util/concurrent/locks/ReentrantLock;->lock()V
.line 348
:try_start_5
iget-object v0, p0, Lcom/subgraph/orchid/b/h;->bFC:Ljava/util/Map;
invoke-interface {p1}, Lcom/subgraph/orchid/c;->Ii()I
move-result v1
invoke-static {v1}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v1
invoke-interface {v0, v1}, Ljava/util/Map;->remove(Ljava/lang/Object;)Ljava/lang/Object;
:try_end_12
.catchall {:try_start_5 .. :try_end_12} :catchall_18
.line 350
iget-object v0, p0, Lcom/subgraph/orchid/b/h;->bFH:Ljava/util/concurrent/locks/ReentrantLock;
invoke-virtual {v0}, Ljava/util/concurrent/locks/ReentrantLock;->unlock()V
.line 351
return-void
.line 350
:catchall_18
move-exception v0
iget-object v1, p0, Lcom/subgraph/orchid/b/h;->bFH:Ljava/util/concurrent/locks/ReentrantLock;
invoke-virtual {v1}, Ljava/util/concurrent/locks/ReentrantLock;->unlock()V
throw v0
.end method
.method public final c(Lcom/subgraph/orchid/c;)I
.registers 5
.prologue
.line 99
iget-object v0, p0, Lcom/subgraph/orchid/b/h;->bFH:Ljava/util/concurrent/locks/ReentrantLock;
invoke-virtual {v0}, Ljava/util/concurrent/locks/ReentrantLock;->lock()V
.line 101
:goto_5
:try_start_5
iget-object v0, p0, Lcom/subgraph/orchid/b/h;->bFC:Ljava/util/Map;
iget v1, p0, Lcom/subgraph/orchid/b/h;->bFE:I
invoke-static {v1}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v1
invoke-interface {v0, v1}, Ljava/util/Map;->containsKey(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_1e
.line 102
invoke-direct {p0}, Lcom/subgraph/orchid/b/h;->LK()V
:try_end_16
.catchall {:try_start_5 .. :try_end_16} :catchall_17
goto :goto_5
.line 108
:catchall_17
move-exception v0
iget-object v1, p0, Lcom/subgraph/orchid/b/h;->bFH:Ljava/util/concurrent/locks/ReentrantLock;
invoke-virtual {v1}, Ljava/util/concurrent/locks/ReentrantLock;->unlock()V
throw v0
.line 103
:cond_1e
:try_start_1e
iget v0, p0, Lcom/subgraph/orchid/b/h;->bFE:I
.line 104
invoke-direct {p0}, Lcom/subgraph/orchid/b/h;->LK()V
.line 105
iget-object v1, p0, Lcom/subgraph/orchid/b/h;->bFC:Ljava/util/Map;
invoke-static {v0}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v2
invoke-interface {v1, v2, p1}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
:try_end_2c
.catchall {:try_start_1e .. :try_end_2c} :catchall_17
.line 108
iget-object v1, p0, Lcom/subgraph/orchid/b/h;->bFH:Ljava/util/concurrent/locks/ReentrantLock;
invoke-virtual {v1}, Ljava/util/concurrent/locks/ReentrantLock;->unlock()V
return v0
.end method
.method public final d(Lcom/subgraph/orchid/b;)V
.registers 6
.prologue
.line 180
iget-object v0, p0, Lcom/subgraph/orchid/b/h;->bFw:Ljavax/net/ssl/SSLSocket;
invoke-virtual {v0}, Ljavax/net/ssl/SSLSocket;->isConnected()Z
move-result v0
if-nez v0, :cond_10
.line 181
new-instance v0, Lcom/subgraph/orchid/ConnectionIOException;
const-string v1, "Cannot send cell because connection is not connected"
invoke-direct {v0, v1}, Lcom/subgraph/orchid/ConnectionIOException;-><init>(Ljava/lang/String;)V
throw v0
.line 183
:cond_10
invoke-virtual {p0}, Lcom/subgraph/orchid/b/h;->LO()V
.line 184
iget-object v0, p0, Lcom/subgraph/orchid/b/h;->bFI:Ljava/util/concurrent/locks/ReentrantLock;
invoke-virtual {v0}, Ljava/util/concurrent/locks/ReentrantLock;->lock()V
.line 187
:try_start_18
iget-object v0, p0, Lcom/subgraph/orchid/b/h;->output:Ljava/io/OutputStream;
invoke-interface {p1}, Lcom/subgraph/orchid/b;->Ip()[B
move-result-object v1
invoke-virtual {v0, v1}, Ljava/io/OutputStream;->write([B)V
:try_end_21
.catch Ljava/io/IOException; {:try_start_18 .. :try_end_21} :catch_27
.catchall {:try_start_18 .. :try_end_21} :catchall_6c
.line 194
iget-object v0, p0, Lcom/subgraph/orchid/b/h;->bFI:Ljava/util/concurrent/locks/ReentrantLock;
invoke-virtual {v0}, Ljava/util/concurrent/locks/ReentrantLock;->unlock()V
.line 195
return-void
.line 188
:catch_27
move-exception v0
.line 189
:try_start_28
sget-object v1, Lcom/subgraph/orchid/b/h;->logger:Ljava/util/logging/Logger;
new-instance v2, Ljava/lang/StringBuilder;
const-string v3, "IOException writing cell to connection "
invoke-direct {v2, v3}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v0}, Ljava/io/IOException;->getMessage()Ljava/lang/String;
move-result-object v3
invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v2
invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v2
invoke-virtual {v1, v2}, Ljava/util/logging/Logger;->fine(Ljava/lang/String;)V
.line 190
invoke-virtual {p0}, Lcom/subgraph/orchid/b/h;->LM()V
.line 191
new-instance v1, Lcom/subgraph/orchid/ConnectionIOException;
new-instance v2, Ljava/lang/StringBuilder;
invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
invoke-virtual {v0}, Ljava/lang/Object;->getClass()Ljava/lang/Class;
move-result-object v3
invoke-virtual {v3}, Ljava/lang/Class;->getName()Ljava/lang/String;
move-result-object v3
invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v2
const-string v3, " : "
invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v2
invoke-virtual {v0}, Ljava/io/IOException;->getMessage()Ljava/lang/String;
move-result-object v0
invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
invoke-direct {v1, v0}, Lcom/subgraph/orchid/ConnectionIOException;-><init>(Ljava/lang/String;)V
throw v1
:try_end_6c
.catchall {:try_start_28 .. :try_end_6c} :catchall_6c
.line 194
:catchall_6c
move-exception v0
iget-object v1, p0, Lcom/subgraph/orchid/b/h;->bFI:Ljava/util/concurrent/locks/ReentrantLock;
invoke-virtual {v1}, Ljava/util/concurrent/locks/ReentrantLock;->unlock()V
throw v0
.end method
.method public final isClosed()Z
.registers 2
.prologue
.line 95
iget-boolean v0, p0, Lcom/subgraph/orchid/b/h;->bCb:Z
return v0
.end method
.method public toString()Ljava/lang/String;
.registers 3
.prologue
.line 355
new-instance v0, Ljava/lang/StringBuilder;
const-string v1, "!"
invoke-direct {v0, v1}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
iget-object v1, p0, Lcom/subgraph/orchid/b/h;->router:Lcom/subgraph/orchid/v;
invoke-interface {v1}, Lcom/subgraph/orchid/v;->JB()Ljava/lang/String;
move-result-object v1
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v0
const-string v1, "!"
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
return-object v0
.end method