g.smali
.class public Lcom/subgraph/orchid/socks/g;
.super Ljava/lang/Object;
.source "SocksStreamConnection.java"
# static fields
.field private static final logger:Ljava/util/logging/Logger;
# instance fields
.field private final bCW:Lcom/subgraph/orchid/aa;
.field private final bKE:Ljava/io/InputStream;
.field private final bKF:Ljava/io/OutputStream;
.field private final bKG:Ljava/lang/Thread;
.field private final bKH:Ljava/lang/Thread;
.field private volatile bKI:Z
.field private volatile bKJ:Z
.field private final lock:Ljava/lang/Object;
.field private final socket:Ljava/net/Socket;
# direct methods
.method static constructor <clinit>()V
.registers 1
.prologue
.line 13
const-class v0, Lcom/subgraph/orchid/socks/g;
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/socks/g;->logger:Ljava/util/logging/Logger;
return-void
.end method
.method private constructor <init>(Ljava/net/Socket;Lcom/subgraph/orchid/aa;)V
.registers 5
.prologue
.line 30
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 26
new-instance v0, Ljava/lang/Object;
invoke-direct {v0}, Ljava/lang/Object;-><init>()V
iput-object v0, p0, Lcom/subgraph/orchid/socks/g;->lock:Ljava/lang/Object;
.line 31
iput-object p1, p0, Lcom/subgraph/orchid/socks/g;->socket:Ljava/net/Socket;
.line 32
iput-object p2, p0, Lcom/subgraph/orchid/socks/g;->bCW:Lcom/subgraph/orchid/aa;
.line 33
invoke-interface {p2}, Lcom/subgraph/orchid/aa;->getInputStream()Ljava/io/InputStream;
move-result-object v0
iput-object v0, p0, Lcom/subgraph/orchid/socks/g;->bKE:Ljava/io/InputStream;
.line 34
invoke-interface {p2}, Lcom/subgraph/orchid/aa;->getOutputStream()Ljava/io/OutputStream;
move-result-object v0
iput-object v0, p0, Lcom/subgraph/orchid/socks/g;->bKF:Ljava/io/OutputStream;
.line 1064
new-instance v0, Ljava/lang/Thread;
new-instance v1, Lcom/subgraph/orchid/socks/g$1;
invoke-direct {v1, p0}, Lcom/subgraph/orchid/socks/g$1;-><init>(Lcom/subgraph/orchid/socks/g;)V
invoke-direct {v0, v1}, Ljava/lang/Thread;-><init>(Ljava/lang/Runnable;)V
.line 36
iput-object v0, p0, Lcom/subgraph/orchid/socks/g;->bKG:Ljava/lang/Thread;
.line 1079
new-instance v0, Ljava/lang/Thread;
new-instance v1, Lcom/subgraph/orchid/socks/g$2;
invoke-direct {v1, p0}, Lcom/subgraph/orchid/socks/g$2;-><init>(Lcom/subgraph/orchid/socks/g;)V
invoke-direct {v0, v1}, Ljava/lang/Thread;-><init>(Ljava/lang/Runnable;)V
.line 37
iput-object v0, p0, Lcom/subgraph/orchid/socks/g;->bKH:Ljava/lang/Thread;
.line 38
return-void
.end method
.method static synthetic Oi()Ljava/util/logging/Logger;
.registers 1
.prologue
.line 12
sget-object v0, Lcom/subgraph/orchid/socks/g;->logger:Ljava/util/logging/Logger;
return-object v0
.end method
.method static synthetic a(Lcom/subgraph/orchid/socks/g;)V
.registers 6
.prologue
.line 1094
const/16 v0, 0x1000
new-array v0, v0, [B
.line 1096
:cond_4
:goto_4
iget-object v1, p0, Lcom/subgraph/orchid/socks/g;->bKE:Ljava/io/InputStream;
invoke-virtual {v1, v0}, Ljava/io/InputStream;->read([B)I
move-result v1
.line 1097
const/4 v2, -0x1
if-ne v1, v2, :cond_29
.line 1098
sget-object v0, Lcom/subgraph/orchid/socks/g;->logger:Ljava/util/logging/Logger;
new-instance v1, Ljava/lang/StringBuilder;
const-string v2, "EOF on TOR input stream "
invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
iget-object v2, p0, Lcom/subgraph/orchid/socks/g;->bCW:Lcom/subgraph/orchid/aa;
invoke-virtual {v1, v2}, 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 1099
iget-object v0, p0, Lcom/subgraph/orchid/socks/g;->socket:Ljava/net/Socket;
invoke-virtual {v0}, Ljava/net/Socket;->shutdownOutput()V
.line 1108
:goto_28
return-void
.line 1101
:cond_29
if-lez v1, :cond_4
.line 1102
sget-object v2, Lcom/subgraph/orchid/socks/g;->logger:Ljava/util/logging/Logger;
new-instance v3, Ljava/lang/StringBuilder;
const-string v4, "Transferring "
invoke-direct {v3, v4}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v3, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v3
const-string v4, " bytes from "
invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v3
iget-object v4, p0, Lcom/subgraph/orchid/socks/g;->bCW:Lcom/subgraph/orchid/aa;
invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
move-result-object v3
const-string v4, " to SOCKS socket"
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 {v2, v3}, Ljava/util/logging/Logger;->fine(Ljava/lang/String;)V
.line 1103
iget-object v2, p0, Lcom/subgraph/orchid/socks/g;->socket:Ljava/net/Socket;
invoke-virtual {v2}, Ljava/net/Socket;->isOutputShutdown()Z
move-result v2
if-nez v2, :cond_6d
.line 1104
iget-object v2, p0, Lcom/subgraph/orchid/socks/g;->socket:Ljava/net/Socket;
invoke-virtual {v2}, Ljava/net/Socket;->getOutputStream()Ljava/io/OutputStream;
move-result-object v2
const/4 v3, 0x0
invoke-virtual {v2, v0, v3, v1}, Ljava/io/OutputStream;->write([BII)V
.line 1105
iget-object v1, p0, Lcom/subgraph/orchid/socks/g;->socket:Ljava/net/Socket;
invoke-virtual {v1}, Ljava/net/Socket;->getOutputStream()Ljava/io/OutputStream;
move-result-object v1
invoke-virtual {v1}, Ljava/io/OutputStream;->flush()V
goto :goto_4
.line 1107
:cond_6d
iget-object v0, p0, Lcom/subgraph/orchid/socks/g;->bKE:Ljava/io/InputStream;
invoke-static {v0}, Lcom/subgraph/orchid/socks/g;->c(Ljava/io/Closeable;)V
goto :goto_28
.end method
.method public static a(Ljava/net/Socket;Lcom/subgraph/orchid/aa;)V
.registers 8
.prologue
.line 16
new-instance v1, Lcom/subgraph/orchid/socks/g;
invoke-direct {v1, p0, p1}, Lcom/subgraph/orchid/socks/g;-><init>(Ljava/net/Socket;Lcom/subgraph/orchid/aa;)V
.line 1041
iget-object v0, v1, Lcom/subgraph/orchid/socks/g;->bKG:Ljava/lang/Thread;
invoke-virtual {v0}, Ljava/lang/Thread;->start()V
.line 1042
iget-object v0, v1, Lcom/subgraph/orchid/socks/g;->bKH:Ljava/lang/Thread;
invoke-virtual {v0}, Ljava/lang/Thread;->start()V
.line 1043
iget-object v2, v1, Lcom/subgraph/orchid/socks/g;->lock:Ljava/lang/Object;
monitor-enter v2
.line 1044
:goto_12
:try_start_12
iget-boolean v0, v1, Lcom/subgraph/orchid/socks/g;->bKI:Z
if-eqz v0, :cond_1a
iget-boolean v0, v1, Lcom/subgraph/orchid/socks/g;->bKJ:Z
:try_end_18
.catchall {:try_start_12 .. :try_end_18} :catchall_3b
if-nez v0, :cond_2a
.line 1046
:cond_1a
:try_start_1a
iget-object v0, v1, Lcom/subgraph/orchid/socks/g;->lock:Ljava/lang/Object;
invoke-virtual {v0}, Ljava/lang/Object;->wait()V
:try_end_1f
.catch Ljava/lang/InterruptedException; {:try_start_1a .. :try_end_1f} :catch_20
.catchall {:try_start_1a .. :try_end_1f} :catchall_3b
goto :goto_12
.line 1048
:catch_20
move-exception v0
:try_start_21
invoke-static {}, Ljava/lang/Thread;->currentThread()Ljava/lang/Thread;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/Thread;->interrupt()V
.line 1049
monitor-exit v2
:try_end_29
.catchall {:try_start_21 .. :try_end_29} :catchall_3b
.line 1060
:goto_29
return-void
.line 1054
:cond_2a
:try_start_2a
iget-object v0, v1, Lcom/subgraph/orchid/socks/g;->socket:Ljava/net/Socket;
invoke-virtual {v0}, Ljava/net/Socket;->close()V
:try_end_2f
.catch Ljava/io/IOException; {:try_start_2a .. :try_end_2f} :catch_3e
.catchall {:try_start_2a .. :try_end_2f} :catchall_3b
.line 1058
:goto_2f
:try_start_2f
iget-object v0, v1, Lcom/subgraph/orchid/socks/g;->bKE:Ljava/io/InputStream;
invoke-static {v0}, Lcom/subgraph/orchid/socks/g;->c(Ljava/io/Closeable;)V
.line 1059
iget-object v0, v1, Lcom/subgraph/orchid/socks/g;->bKF:Ljava/io/OutputStream;
invoke-static {v0}, Lcom/subgraph/orchid/socks/g;->c(Ljava/io/Closeable;)V
.line 1060
monitor-exit v2
goto :goto_29
:catchall_3b
move-exception v0
monitor-exit v2
:try_end_3d
.catchall {:try_start_2f .. :try_end_3d} :catchall_3b
throw v0
.line 1055
:catch_3e
move-exception v0
.line 1056
:try_start_3f
sget-object v3, Lcom/subgraph/orchid/socks/g;->logger:Ljava/util/logging/Logger;
new-instance v4, Ljava/lang/StringBuilder;
const-string v5, "IOException on SOCKS socket close(): "
invoke-direct {v4, v5}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v0}, Ljava/io/IOException;->getMessage()Ljava/lang/String;
move-result-object v0
invoke-virtual {v4, 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 {v3, v0}, Ljava/util/logging/Logger;->warning(Ljava/lang/String;)V
:try_end_57
.catchall {:try_start_3f .. :try_end_57} :catchall_3b
goto :goto_2f
.end method
.method static synthetic b(Lcom/subgraph/orchid/socks/g;)Lcom/subgraph/orchid/aa;
.registers 2
.prologue
.line 12
iget-object v0, p0, Lcom/subgraph/orchid/socks/g;->bCW:Lcom/subgraph/orchid/aa;
return-object v0
.end method
.method static synthetic c(Lcom/subgraph/orchid/socks/g;)Ljava/lang/Object;
.registers 2
.prologue
.line 12
iget-object v0, p0, Lcom/subgraph/orchid/socks/g;->lock:Ljava/lang/Object;
return-object v0
.end method
.method private static c(Ljava/io/Closeable;)V
.registers 5
.prologue
.line 133
:try_start_0
invoke-interface {p0}, Ljava/io/Closeable;->close()V
:try_end_3
.catch Ljava/io/IOException; {:try_start_0 .. :try_end_3} :catch_4
.line 137
:goto_3
return-void
.line 134
:catch_4
move-exception v0
.line 135
sget-object v1, Lcom/subgraph/orchid/socks/g;->logger:Ljava/util/logging/Logger;
new-instance v2, Ljava/lang/StringBuilder;
const-string v3, "Close failed on "
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 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_3
.end method
.method static synthetic d(Lcom/subgraph/orchid/socks/g;)Z
.registers 2
.prologue
.line 12
const/4 v0, 0x1
iput-boolean v0, p0, Lcom/subgraph/orchid/socks/g;->bKJ:Z
return v0
.end method
.method static synthetic e(Lcom/subgraph/orchid/socks/g;)V
.registers 6
.prologue
.line 1115
const/16 v0, 0x1000
new-array v0, v0, [B
.line 1117
:cond_4
:goto_4
iget-object v1, p0, Lcom/subgraph/orchid/socks/g;->bCW:Lcom/subgraph/orchid/aa;
invoke-interface {v1}, Lcom/subgraph/orchid/aa;->IB()V
.line 1118
iget-object v1, p0, Lcom/subgraph/orchid/socks/g;->socket:Ljava/net/Socket;
invoke-virtual {v1}, Ljava/net/Socket;->getInputStream()Ljava/io/InputStream;
move-result-object v1
invoke-virtual {v1, v0}, Ljava/io/InputStream;->read([B)I
move-result v1
.line 1119
const/4 v2, -0x1
if-ne v1, v2, :cond_32
.line 1120
iget-object v0, p0, Lcom/subgraph/orchid/socks/g;->bKF:Ljava/io/OutputStream;
invoke-virtual {v0}, Ljava/io/OutputStream;->close()V
.line 1121
sget-object v0, Lcom/subgraph/orchid/socks/g;->logger:Ljava/util/logging/Logger;
new-instance v1, Ljava/lang/StringBuilder;
const-string v2, "EOF on SOCKS socket connected to "
invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
iget-object v2, p0, Lcom/subgraph/orchid/socks/g;->bCW:Lcom/subgraph/orchid/aa;
invoke-virtual {v1, v2}, 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 1122
return-void
.line 1123
:cond_32
if-lez v1, :cond_4
.line 1124
sget-object v2, Lcom/subgraph/orchid/socks/g;->logger:Ljava/util/logging/Logger;
new-instance v3, Ljava/lang/StringBuilder;
const-string v4, "Transferring "
invoke-direct {v3, v4}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v3, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v3
const-string v4, " bytes from SOCKS socket to "
invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v3
iget-object v4, p0, Lcom/subgraph/orchid/socks/g;->bCW:Lcom/subgraph/orchid/aa;
invoke-virtual {v3, v4}, 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 {v2, v3}, Ljava/util/logging/Logger;->fine(Ljava/lang/String;)V
.line 1125
iget-object v2, p0, Lcom/subgraph/orchid/socks/g;->bKF:Ljava/io/OutputStream;
const/4 v3, 0x0
invoke-virtual {v2, v0, v3, v1}, Ljava/io/OutputStream;->write([BII)V
.line 1126
iget-object v1, p0, Lcom/subgraph/orchid/socks/g;->bKF:Ljava/io/OutputStream;
invoke-virtual {v1}, Ljava/io/OutputStream;->flush()V
goto :goto_4
.end method
.method static synthetic f(Lcom/subgraph/orchid/socks/g;)Z
.registers 2
.prologue
.line 12
const/4 v0, 0x1
iput-boolean v0, p0, Lcom/subgraph/orchid/socks/g;->bKI:Z
return v0
.end method