f.smali
.class public abstract Lcom/subgraph/orchid/socks/f;
.super Ljava/lang/Object;
.source "SocksRequest.java"
# static fields
.field private static final logger:Ljava/util/logging/Logger;
# instance fields
.field private final bBr:Lcom/subgraph/orchid/TorConfig;
.field bCT:Lcom/subgraph/orchid/d/d;
.field private bKC:[B
.field private bKD:J
.field hostname:Ljava/lang/String;
.field port:I
.field private final socket:Ljava/net/Socket;
# direct methods
.method static constructor <clinit>()V
.registers 1
.prologue
.line 11
const-class v0, Lcom/subgraph/orchid/socks/f;
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/f;->logger:Ljava/util/logging/Logger;
return-void
.end method
.method protected constructor <init>(Lcom/subgraph/orchid/TorConfig;Ljava/net/Socket;)V
.registers 5
.prologue
.line 23
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 21
const-wide/16 v0, 0x0
iput-wide v0, p0, Lcom/subgraph/orchid/socks/f;->bKD:J
.line 24
iput-object p1, p0, Lcom/subgraph/orchid/socks/f;->bBr:Lcom/subgraph/orchid/TorConfig;
.line 25
iput-object p2, p0, Lcom/subgraph/orchid/socks/f;->socket:Ljava/net/Socket;
.line 26
return-void
.end method
# virtual methods
.method protected final HC()I
.registers 3
.prologue
.line 145
:try_start_0
iget-object v0, p0, Lcom/subgraph/orchid/socks/f;->socket:Ljava/net/Socket;
invoke-virtual {v0}, Ljava/net/Socket;->getInputStream()Ljava/io/InputStream;
move-result-object v0
invoke-virtual {v0}, Ljava/io/InputStream;->read()I
move-result v0
.line 146
const/4 v1, -0x1
if-ne v0, v1, :cond_1a
.line 147
new-instance v0, Lcom/subgraph/orchid/socks/SocksRequestException;
invoke-direct {v0}, Lcom/subgraph/orchid/socks/SocksRequestException;-><init>()V
throw v0
:try_end_13
.catch Ljava/io/IOException; {:try_start_0 .. :try_end_13} :catch_13
.line 149
:catch_13
move-exception v0
.line 150
new-instance v1, Lcom/subgraph/orchid/socks/SocksRequestException;
invoke-direct {v1, v0}, Lcom/subgraph/orchid/socks/SocksRequestException;-><init>(Ljava/lang/Throwable;)V
throw v1
.line 148
:cond_1a
return v0
.end method
.method public abstract Oa()Z
.end method
.method public abstract Ob()I
.end method
.method abstract Oc()V
.end method
.method abstract Od()V
.end method
.method public abstract Oe()V
.end method
.method protected final Of()[B
.registers 4
.prologue
const/4 v2, 0x2
.line 109
new-array v0, v2, [B
.line 110
const/4 v1, 0x0
invoke-virtual {p0, v0, v1, v2}, Lcom/subgraph/orchid/socks/f;->o([BII)V
.line 111
return-object v0
.end method
.method protected final Og()[B
.registers 2
.prologue
.line 115
const/4 v0, 0x4
new-array v0, v0, [B
.line 116
invoke-virtual {p0, v0}, Lcom/subgraph/orchid/socks/f;->au([B)V
.line 117
return-object v0
.end method
.method protected final Oh()Ljava/lang/String;
.registers 4
.prologue
.line 128
:try_start_0
new-instance v0, Ljava/lang/StringBuilder;
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
.line 130
:goto_5
iget-object v1, p0, Lcom/subgraph/orchid/socks/f;->socket:Ljava/net/Socket;
invoke-virtual {v1}, Ljava/net/Socket;->getInputStream()Ljava/io/InputStream;
move-result-object v1
invoke-virtual {v1}, Ljava/io/InputStream;->read()I
move-result v1
.line 131
const/4 v2, -0x1
if-ne v1, v2, :cond_1f
.line 132
new-instance v0, Lcom/subgraph/orchid/socks/SocksRequestException;
invoke-direct {v0}, Lcom/subgraph/orchid/socks/SocksRequestException;-><init>()V
throw v0
:try_end_18
.catch Ljava/io/IOException; {:try_start_0 .. :try_end_18} :catch_18
.line 138
:catch_18
move-exception v0
.line 139
new-instance v1, Lcom/subgraph/orchid/socks/SocksRequestException;
invoke-direct {v1, v0}, Lcom/subgraph/orchid/socks/SocksRequestException;-><init>(Ljava/lang/Throwable;)V
throw v1
.line 133
:cond_1f
if-nez v1, :cond_26
.line 134
:try_start_21
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
return-object v0
.line 135
:cond_26
int-to-char v1, v1
.line 136
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder;
:try_end_2a
.catch Ljava/io/IOException; {:try_start_21 .. :try_end_2a} :catch_18
goto :goto_5
.end method
.method final au([B)V
.registers 4
.prologue
.line 155
const/4 v0, 0x0
array-length v1, p1
invoke-virtual {p0, p1, v0, v1}, Lcom/subgraph/orchid/socks/f;->o([BII)V
.line 156
return-void
.end method
.method protected final av([B)V
.registers 4
.prologue
.line 63
array-length v0, p1
const/4 v1, 0x2
if-eq v0, v1, :cond_a
.line 64
new-instance v0, Lcom/subgraph/orchid/socks/SocksRequestException;
invoke-direct {v0}, Lcom/subgraph/orchid/socks/SocksRequestException;-><init>()V
throw v0
.line 65
:cond_a
const/4 v0, 0x0
aget-byte v0, p1, v0
and-int/lit16 v0, v0, 0xff
shl-int/lit8 v0, v0, 0x8
const/4 v1, 0x1
aget-byte v1, p1, v1
and-int/lit16 v1, v1, 0xff
or-int/2addr v0, v1
iput v0, p0, Lcom/subgraph/orchid/socks/f;->port:I
.line 66
return-void
.end method
.method protected final aw([B)V
.registers 8
.prologue
const/4 v0, 0x0
.line 69
.line 1091
iget-object v1, p0, Lcom/subgraph/orchid/socks/f;->bBr:Lcom/subgraph/orchid/TorConfig;
invoke-interface {v1}, Lcom/subgraph/orchid/TorConfig;->Kn()Z
move-result v1
if-nez v1, :cond_11
iget-object v1, p0, Lcom/subgraph/orchid/socks/f;->bBr:Lcom/subgraph/orchid/TorConfig;
invoke-interface {v1}, Lcom/subgraph/orchid/TorConfig;->Kl()Z
move-result v1
if-eqz v1, :cond_2b
.line 2084
:cond_11
invoke-static {}, Ljava/lang/System;->currentTimeMillis()J
move-result-wide v2
.line 2085
iget-wide v4, p0, Lcom/subgraph/orchid/socks/f;->bKD:J
sub-long v4, v2, v4
.line 2086
iput-wide v2, p0, Lcom/subgraph/orchid/socks/f;->bKD:J
.line 2087
const-wide/16 v2, 0x1388
cmp-long v1, v4, v2
if-lez v1, :cond_3b
const/4 v1, 0x1
.line 1091
:goto_22
if-eqz v1, :cond_2b
.line 1092
sget-object v1, Lcom/subgraph/orchid/socks/f;->logger:Ljava/util/logging/Logger;
const-string v2, "Your application is giving Orchid only an IP address. Applications that do DNS resolves themselves may leak information. Consider using Socks4a (e.g. via privoxy or socat) instead. For more information please see https://wiki.torproject.org/TheOnionRouter/TorFAQ#SOCKSAndDNS"
invoke-virtual {v1, v2}, Ljava/util/logging/Logger;->warning(Ljava/lang/String;)V
.line 1099
:cond_2b
iget-object v1, p0, Lcom/subgraph/orchid/socks/f;->bBr:Lcom/subgraph/orchid/TorConfig;
invoke-interface {v1}, Lcom/subgraph/orchid/TorConfig;->Kl()Z
move-result v1
if-eqz v1, :cond_3d
.line 1100
new-instance v0, Lcom/subgraph/orchid/socks/SocksRequestException;
const-string v1, "Rejecting unsafe SOCKS request"
invoke-direct {v0, v1}, Lcom/subgraph/orchid/socks/SocksRequestException;-><init>(Ljava/lang/String;)V
throw v0
:cond_3b
move v1, v0
.line 2087
goto :goto_22
.line 71
:cond_3d
array-length v1, p1
const/4 v2, 0x4
if-eq v1, v2, :cond_47
.line 72
new-instance v0, Lcom/subgraph/orchid/socks/SocksRequestException;
invoke-direct {v0}, Lcom/subgraph/orchid/socks/SocksRequestException;-><init>()V
throw v0
.line 73
:cond_47
iput-object p1, p0, Lcom/subgraph/orchid/socks/f;->bKC:[B
.line 76
iget-object v2, p0, Lcom/subgraph/orchid/socks/f;->bKC:[B
array-length v3, v2
move v1, v0
:goto_4d
if-ge v0, v3, :cond_59
aget-byte v4, v2, v0
.line 77
shl-int/lit8 v1, v1, 0x8
.line 78
and-int/lit16 v4, v4, 0xff
or-int/2addr v1, v4
.line 76
add-int/lit8 v0, v0, 0x1
goto :goto_4d
.line 80
:cond_59
new-instance v0, Lcom/subgraph/orchid/d/d;
invoke-direct {v0, v1}, Lcom/subgraph/orchid/d/d;-><init>(I)V
iput-object v0, p0, Lcom/subgraph/orchid/socks/f;->bCT:Lcom/subgraph/orchid/d/d;
.line 81
return-void
.end method
.method protected final ax([B)V
.registers 4
.prologue
.line 174
:try_start_0
iget-object v0, p0, Lcom/subgraph/orchid/socks/f;->socket:Ljava/net/Socket;
invoke-virtual {v0}, Ljava/net/Socket;->getOutputStream()Ljava/io/OutputStream;
move-result-object v0
invoke-virtual {v0, p1}, Ljava/io/OutputStream;->write([B)V
:try_end_9
.catch Ljava/io/IOException; {:try_start_0 .. :try_end_9} :catch_a
.line 177
return-void
.line 175
:catch_a
move-exception v0
.line 176
new-instance v1, Lcom/subgraph/orchid/socks/SocksRequestException;
invoke-direct {v1, v0}, Lcom/subgraph/orchid/socks/SocksRequestException;-><init>(Ljava/lang/Throwable;)V
throw v1
.end method
.method abstract bk(Z)V
.end method
.method public final getTarget()Ljava/lang/String;
.registers 3
.prologue
.line 52
iget-object v0, p0, Lcom/subgraph/orchid/socks/f;->bBr:Lcom/subgraph/orchid/TorConfig;
invoke-interface {v0}, Lcom/subgraph/orchid/TorConfig;->Km()Z
move-result v0
if-eqz v0, :cond_1a
.line 53
new-instance v0, Ljava/lang/StringBuilder;
const-string v1, "[scrubbed]:"
invoke-direct {v0, v1}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
iget v1, p0, Lcom/subgraph/orchid/socks/f;->port:I
invoke-virtual {v0, v1}, 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
.line 58
:goto_19
return-object v0
.line 55
:cond_1a
iget-object v0, p0, Lcom/subgraph/orchid/socks/f;->hostname:Ljava/lang/String;
if-eqz v0, :cond_3a
.line 56
new-instance v0, Ljava/lang/StringBuilder;
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
iget-object v1, p0, Lcom/subgraph/orchid/socks/f;->hostname:Ljava/lang/String;
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
iget v1, p0, Lcom/subgraph/orchid/socks/f;->port:I
invoke-virtual {v0, v1}, 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
goto :goto_19
.line 58
:cond_3a
new-instance v0, Ljava/lang/StringBuilder;
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
iget-object v1, p0, Lcom/subgraph/orchid/socks/f;->bCT:Lcom/subgraph/orchid/d/d;
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)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
iget v1, p0, Lcom/subgraph/orchid/socks/f;->port:I
invoke-virtual {v0, v1}, 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
goto :goto_19
.end method
.method protected final o([BII)V
.registers 6
.prologue
.line 160
:goto_0
if-lez p3, :cond_1f
.line 161
:try_start_2
iget-object v0, p0, Lcom/subgraph/orchid/socks/f;->socket:Ljava/net/Socket;
invoke-virtual {v0}, Ljava/net/Socket;->getInputStream()Ljava/io/InputStream;
move-result-object v0
invoke-virtual {v0, p1, p2, p3}, Ljava/io/InputStream;->read([BII)I
move-result v0
.line 162
const/4 v1, -0x1
if-ne v0, v1, :cond_1c
.line 163
new-instance v0, Lcom/subgraph/orchid/socks/SocksRequestException;
invoke-direct {v0}, Lcom/subgraph/orchid/socks/SocksRequestException;-><init>()V
throw v0
:try_end_15
.catch Ljava/io/IOException; {:try_start_2 .. :try_end_15} :catch_15
.line 167
:catch_15
move-exception v0
.line 168
new-instance v1, Lcom/subgraph/orchid/socks/SocksRequestException;
invoke-direct {v1, v0}, Lcom/subgraph/orchid/socks/SocksRequestException;-><init>(Ljava/lang/Throwable;)V
throw v1
.line 164
:cond_1c
add-int/2addr p2, v0
.line 165
sub-int/2addr p3, v0
.line 166
goto :goto_0
.line 169
:cond_1f
return-void
.end method