v.smali
.class public final Lcom/subgraph/orchid/circuits/v;
.super Ljava/io/InputStream;
.source "TorInputStream.java"
# static fields
.field private static final bDp:Lcom/subgraph/orchid/t;
.field private static final bDq:Ljava/nio/ByteBuffer;
# instance fields
.field JW:I
.field private final bCW:Lcom/subgraph/orchid/aa;
.field bCb:Z
.field final bDr:Ljava/util/Queue;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/Queue",
"<",
"Lcom/subgraph/orchid/t;",
">;"
}
.end annotation
.end field
.field bDs:J
.field private bDt:Ljava/nio/ByteBuffer;
.field private bDu:Z
.field final lock:Ljava/lang/Object;
# direct methods
.method static constructor <clinit>()V
.registers 3
.prologue
const/4 v2, 0x0
.line 18
new-instance v0, Lcom/subgraph/orchid/circuits/a/b;
const/4 v1, 0x0
invoke-direct {v0, v1, v2, v2, v2}, Lcom/subgraph/orchid/circuits/a/b;-><init>(Lcom/subgraph/orchid/f;III)V
sput-object v0, Lcom/subgraph/orchid/circuits/v;->bDp:Lcom/subgraph/orchid/t;
.line 19
invoke-static {v2}, Ljava/nio/ByteBuffer;->allocate(I)Ljava/nio/ByteBuffer;
move-result-object v0
sput-object v0, Lcom/subgraph/orchid/circuits/v;->bDq:Ljava/nio/ByteBuffer;
return-void
.end method
.method constructor <init>(Lcom/subgraph/orchid/aa;)V
.registers 3
.prologue
.line 43
invoke-direct {p0}, Ljava/io/InputStream;-><init>()V
.line 23
new-instance v0, Ljava/lang/Object;
invoke-direct {v0}, Ljava/lang/Object;-><init>()V
iput-object v0, p0, Lcom/subgraph/orchid/circuits/v;->lock:Ljava/lang/Object;
.line 44
iput-object p1, p0, Lcom/subgraph/orchid/circuits/v;->bCW:Lcom/subgraph/orchid/aa;
.line 45
new-instance v0, Ljava/util/LinkedList;
invoke-direct {v0}, Ljava/util/LinkedList;-><init>()V
iput-object v0, p0, Lcom/subgraph/orchid/circuits/v;->bDr:Ljava/util/Queue;
.line 46
sget-object v0, Lcom/subgraph/orchid/circuits/v;->bDq:Ljava/nio/ByteBuffer;
iput-object v0, p0, Lcom/subgraph/orchid/circuits/v;->bDt:Ljava/nio/ByteBuffer;
.line 47
return-void
.end method
.method private Li()V
.registers 5
.prologue
.line 169
iget-boolean v0, p0, Lcom/subgraph/orchid/circuits/v;->bDu:Z
if-nez v0, :cond_c
.line 170
iget-object v0, p0, Lcom/subgraph/orchid/circuits/v;->bDt:Ljava/nio/ByteBuffer;
invoke-virtual {v0}, Ljava/nio/ByteBuffer;->hasRemaining()Z
move-result v0
if-eqz v0, :cond_d
.line 175
:cond_c
:goto_c
return-void
.line 2180
:cond_d
invoke-direct {p0}, Lcom/subgraph/orchid/circuits/v;->Lj()Lcom/subgraph/orchid/t;
move-result-object v0
.line 2189
iget-boolean v1, p0, Lcom/subgraph/orchid/circuits/v;->bCb:Z
if-nez v1, :cond_19
sget-object v1, Lcom/subgraph/orchid/circuits/v;->bDp:Lcom/subgraph/orchid/t;
if-ne v0, v1, :cond_21
.line 2190
:cond_19
new-instance v0, Ljava/io/IOException;
const-string v1, "Input stream closed"
invoke-direct {v0, v1}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
throw v0
.line 2193
:cond_21
invoke-interface {v0}, Lcom/subgraph/orchid/t;->Jw()I
move-result v1
packed-switch v1, :pswitch_data_5c
.line 2202
new-instance v1, Ljava/io/IOException;
new-instance v2, Ljava/lang/StringBuilder;
const-string v3, "Unexpected RelayCell command type in TorInputStream queue: "
invoke-direct {v2, v3}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-interface {v0}, Lcom/subgraph/orchid/t;->Jw()I
move-result v0
invoke-virtual {v2, 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-direct {v1, v0}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
throw v1
.line 2195
:pswitch_41
invoke-interface {v0}, Lcom/subgraph/orchid/t;->Jy()Ljava/nio/ByteBuffer;
move-result-object v0
iput-object v0, p0, Lcom/subgraph/orchid/circuits/v;->bDt:Ljava/nio/ByteBuffer;
.line 2181
:goto_47
iget-boolean v0, p0, Lcom/subgraph/orchid/circuits/v;->bDu:Z
if-nez v0, :cond_c
iget-object v0, p0, Lcom/subgraph/orchid/circuits/v;->bDt:Ljava/nio/ByteBuffer;
invoke-virtual {v0}, Ljava/nio/ByteBuffer;->hasRemaining()Z
move-result v0
if-eqz v0, :cond_d
goto :goto_c
.line 2198
:pswitch_54
sget-object v0, Lcom/subgraph/orchid/circuits/v;->bDq:Ljava/nio/ByteBuffer;
iput-object v0, p0, Lcom/subgraph/orchid/circuits/v;->bDt:Ljava/nio/ByteBuffer;
.line 2199
const/4 v0, 0x1
iput-boolean v0, p0, Lcom/subgraph/orchid/circuits/v;->bDu:Z
goto :goto_47
.line 2193
:pswitch_data_5c
.packed-switch 0x2
:pswitch_41
:pswitch_54
.end packed-switch
.end method
.method private Lj()Lcom/subgraph/orchid/t;
.registers 3
.prologue
.line 209
:goto_0
:try_start_0
iget-object v0, p0, Lcom/subgraph/orchid/circuits/v;->bDr:Ljava/util/Queue;
invoke-interface {v0}, Ljava/util/Queue;->isEmpty()Z
move-result v0
if-eqz v0, :cond_1e
.line 210
iget-object v0, p0, Lcom/subgraph/orchid/circuits/v;->lock:Ljava/lang/Object;
invoke-virtual {v0}, Ljava/lang/Object;->wait()V
:try_end_d
.catch Ljava/lang/InterruptedException; {:try_start_0 .. :try_end_d} :catch_e
goto :goto_0
.line 214
:catch_e
move-exception v0
invoke-static {}, Ljava/lang/Thread;->currentThread()Ljava/lang/Thread;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/Thread;->interrupt()V
.line 215
new-instance v0, Ljava/io/IOException;
const-string v1, "Read interrupted"
invoke-direct {v0, v1}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
throw v0
.line 212
:cond_1e
:try_start_1e
iget-object v0, p0, Lcom/subgraph/orchid/circuits/v;->bDr:Ljava/util/Queue;
invoke-interface {v0}, Ljava/util/Queue;->remove()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lcom/subgraph/orchid/t;
:try_end_26
.catch Ljava/lang/InterruptedException; {:try_start_1e .. :try_end_26} :catch_e
return-object v0
.end method
# virtual methods
.method final Lh()J
.registers 5
.prologue
.line 50
iget-object v1, p0, Lcom/subgraph/orchid/circuits/v;->lock:Ljava/lang/Object;
monitor-enter v1
.line 51
:try_start_3
iget-wide v2, p0, Lcom/subgraph/orchid/circuits/v;->bDs:J
monitor-exit v1
return-wide v2
.line 52
:catchall_7
move-exception v0
monitor-exit v1
:try_end_9
.catchall {:try_start_3 .. :try_end_9} :catchall_7
throw v0
.end method
.method final Lk()I
.registers 3
.prologue
.line 220
iget-object v1, p0, Lcom/subgraph/orchid/circuits/v;->lock:Ljava/lang/Object;
monitor-enter v1
.line 221
:try_start_3
iget-object v0, p0, Lcom/subgraph/orchid/circuits/v;->bDr:Ljava/util/Queue;
invoke-interface {v0}, Ljava/util/Queue;->size()I
move-result v0
monitor-exit v1
return v0
.line 222
:catchall_b
move-exception v0
monitor-exit v1
:try_end_d
.catchall {:try_start_3 .. :try_end_d} :catchall_b
throw v0
.end method
.method public final available()I
.registers 3
.prologue
.line 126
iget-object v1, p0, Lcom/subgraph/orchid/circuits/v;->lock:Ljava/lang/Object;
monitor-enter v1
.line 127
:try_start_3
iget v0, p0, Lcom/subgraph/orchid/circuits/v;->JW:I
monitor-exit v1
return v0
.line 128
:catchall_7
move-exception v0
monitor-exit v1
:try_end_9
.catchall {:try_start_3 .. :try_end_9} :catchall_7
throw v0
.end method
.method public final close()V
.registers 4
.prologue
.line 132
iget-object v1, p0, Lcom/subgraph/orchid/circuits/v;->lock:Ljava/lang/Object;
monitor-enter v1
.line 133
:try_start_3
iget-boolean v0, p0, Lcom/subgraph/orchid/circuits/v;->bCb:Z
if-eqz v0, :cond_9
.line 134
monitor-exit v1
.line 142
:goto_8
return-void
.line 136
:cond_9
const/4 v0, 0x1
iput-boolean v0, p0, Lcom/subgraph/orchid/circuits/v;->bCb:Z
.line 138
iget-object v0, p0, Lcom/subgraph/orchid/circuits/v;->bDr:Ljava/util/Queue;
sget-object v2, Lcom/subgraph/orchid/circuits/v;->bDp:Lcom/subgraph/orchid/t;
invoke-interface {v0, v2}, Ljava/util/Queue;->add(Ljava/lang/Object;)Z
.line 139
iget-object v0, p0, Lcom/subgraph/orchid/circuits/v;->lock:Ljava/lang/Object;
invoke-virtual {v0}, Ljava/lang/Object;->notifyAll()V
.line 140
monitor-exit v1
:try_end_19
.catchall {:try_start_3 .. :try_end_19} :catchall_1f
.line 141
iget-object v0, p0, Lcom/subgraph/orchid/circuits/v;->bCW:Lcom/subgraph/orchid/aa;
invoke-interface {v0}, Lcom/subgraph/orchid/aa;->close()V
goto :goto_8
.line 140
:catchall_1f
move-exception v0
:try_start_20
monitor-exit v1
:try_end_21
.catchall {:try_start_20 .. :try_end_21} :catchall_1f
throw v0
.end method
.method public final read()I
.registers 4
.prologue
.line 57
iget-object v1, p0, Lcom/subgraph/orchid/circuits/v;->lock:Ljava/lang/Object;
monitor-enter v1
.line 58
:try_start_3
iget-boolean v0, p0, Lcom/subgraph/orchid/circuits/v;->bCb:Z
if-eqz v0, :cond_12
.line 59
new-instance v0, Ljava/io/IOException;
const-string v2, "Stream closed"
invoke-direct {v0, v2}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
throw v0
.line 67
:catchall_f
move-exception v0
monitor-exit v1
:try_end_11
.catchall {:try_start_3 .. :try_end_11} :catchall_f
throw v0
.line 61
:cond_12
:try_start_12
invoke-direct {p0}, Lcom/subgraph/orchid/circuits/v;->Li()V
.line 62
iget-boolean v0, p0, Lcom/subgraph/orchid/circuits/v;->bDu:Z
if-eqz v0, :cond_1c
.line 63
const/4 v0, -0x1
monitor-exit v1
.line 66
:goto_1b
return v0
.line 65
:cond_1c
iget v0, p0, Lcom/subgraph/orchid/circuits/v;->JW:I
add-int/lit8 v0, v0, -0x1
iput v0, p0, Lcom/subgraph/orchid/circuits/v;->JW:I
.line 66
iget-object v0, p0, Lcom/subgraph/orchid/circuits/v;->bDt:Ljava/nio/ByteBuffer;
invoke-virtual {v0}, Ljava/nio/ByteBuffer;->get()B
move-result v0
and-int/lit16 v0, v0, 0xff
monitor-exit v1
:try_end_2b
.catchall {:try_start_12 .. :try_end_2b} :catchall_f
goto :goto_1b
.end method
.method public final read([B)I
.registers 4
.prologue
.line 72
const/4 v0, 0x0
array-length v1, p1
invoke-virtual {p0, p1, v0, v1}, Lcom/subgraph/orchid/circuits/v;->read([BII)I
move-result v0
return v0
.end method
.method public final declared-synchronized read([BII)I
.registers 9
.prologue
const/4 v0, 0x0
.line 76
monitor-enter p0
:try_start_2
iget-object v2, p0, Lcom/subgraph/orchid/circuits/v;->lock:Ljava/lang/Object;
monitor-enter v2
:try_end_5
.catchall {:try_start_2 .. :try_end_5} :catchall_14
.line 77
:try_start_5
iget-boolean v1, p0, Lcom/subgraph/orchid/circuits/v;->bCb:Z
if-eqz v1, :cond_17
.line 78
new-instance v0, Ljava/io/IOException;
const-string v1, "Stream closed"
invoke-direct {v0, v1}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
throw v0
.line 104
:catchall_11
move-exception v0
monitor-exit v2
:try_end_13
.catchall {:try_start_5 .. :try_end_13} :catchall_11
:try_start_13
throw v0
:try_end_14
.catchall {:try_start_13 .. :try_end_14} :catchall_14
.line 76
:catchall_14
move-exception v0
monitor-exit p0
throw v0
.line 1116
:cond_17
if-nez p1, :cond_1f
.line 1117
:try_start_19
new-instance v0, Ljava/lang/NullPointerException;
invoke-direct {v0}, Ljava/lang/NullPointerException;-><init>()V
throw v0
.line 1119
:cond_1f
if-ltz p2, :cond_2f
array-length v1, p1
if-ge p2, v1, :cond_2f
if-ltz p3, :cond_2f
add-int v1, p2, p3
array-length v3, p1
if-gt v1, v3, :cond_2f
add-int v1, p2, p3
if-gez v1, :cond_35
.line 1121
:cond_2f
new-instance v0, Ljava/lang/IndexOutOfBoundsException;
invoke-direct {v0}, Ljava/lang/IndexOutOfBoundsException;-><init>()V
throw v0
.line 83
:cond_35
if-nez p3, :cond_3a
.line 84
monitor-exit v2
:try_end_38
.catchall {:try_start_19 .. :try_end_38} :catchall_11
.line 103
:goto_38
monitor-exit p0
return v0
.line 87
:cond_3a
:try_start_3a
invoke-direct {p0}, Lcom/subgraph/orchid/circuits/v;->Li()V
.line 88
iget-boolean v1, p0, Lcom/subgraph/orchid/circuits/v;->bDu:Z
if-eqz v1, :cond_44
.line 89
const/4 v0, -0x1
monitor-exit v2
goto :goto_38
:cond_44
move v1, p3
.line 95
:cond_45
if-lez v1, :cond_74
iget-boolean v1, p0, Lcom/subgraph/orchid/circuits/v;->bDu:Z
if-nez v1, :cond_74
.line 96
invoke-direct {p0}, Lcom/subgraph/orchid/circuits/v;->Li()V
.line 97
add-int v3, p2, v0
sub-int v1, p3, v0
.line 2109
iget-object v4, p0, Lcom/subgraph/orchid/circuits/v;->bDt:Ljava/nio/ByteBuffer;
invoke-virtual {v4}, Ljava/nio/ByteBuffer;->remaining()I
move-result v4
if-lt v4, v1, :cond_6d
.line 2110
:goto_5a
iget-object v4, p0, Lcom/subgraph/orchid/circuits/v;->bDt:Ljava/nio/ByteBuffer;
invoke-virtual {v4, p1, v3, v1}, Ljava/nio/ByteBuffer;->get([BII)Ljava/nio/ByteBuffer;
.line 2111
iget v3, p0, Lcom/subgraph/orchid/circuits/v;->JW:I
sub-int/2addr v3, v1
iput v3, p0, Lcom/subgraph/orchid/circuits/v;->JW:I
.line 97
add-int/2addr v0, v1
.line 98
sub-int v1, p3, v0
.line 99
iget v3, p0, Lcom/subgraph/orchid/circuits/v;->JW:I
if-nez v3, :cond_45
.line 100
monitor-exit v2
goto :goto_38
.line 2109
:cond_6d
iget-object v1, p0, Lcom/subgraph/orchid/circuits/v;->bDt:Ljava/nio/ByteBuffer;
invoke-virtual {v1}, Ljava/nio/ByteBuffer;->remaining()I
move-result v1
goto :goto_5a
.line 103
:cond_74
monitor-exit v2
:try_end_75
.catchall {:try_start_3a .. :try_end_75} :catchall_11
goto :goto_38
.end method
.method public final toString()Ljava/lang/String;
.registers 3
.prologue
.line 226
new-instance v0, Ljava/lang/StringBuilder;
const-string v1, "TorInputStream stream="
invoke-direct {v0, v1}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
iget-object v1, p0, Lcom/subgraph/orchid/circuits/v;->bCW:Lcom/subgraph/orchid/aa;
invoke-interface {v1}, Lcom/subgraph/orchid/aa;->getStreamId()I
move-result v1
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v0
const-string v1, " node="
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v0
iget-object v1, p0, Lcom/subgraph/orchid/circuits/v;->bCW:Lcom/subgraph/orchid/aa;
invoke-interface {v1}, Lcom/subgraph/orchid/aa;->JW()Lcom/subgraph/orchid/f;
move-result-object v1
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)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