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