WebSocketReader.smali
.class final Lokhttp3/internal/ws/WebSocketReader;
.super Ljava/lang/Object;
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lokhttp3/internal/ws/WebSocketReader$FrameCallback;
}
.end annotation
# instance fields
.field closed:Z
.field frameBytesRead:J
.field final frameCallback:Lokhttp3/internal/ws/WebSocketReader$FrameCallback;
.field frameLength:J
.field final isClient:Z
.field isControlFrame:Z
.field isFinalFrame:Z
.field isMasked:Z
.field final maskBuffer:[B
.field final maskKey:[B
.field opcode:I
.field final source:Lokio/e;
# direct methods
.method constructor <init>(ZLokio/e;Lokhttp3/internal/ws/WebSocketReader$FrameCallback;)V
.registers 6
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
const/4 v0, 0x4
new-array v0, v0, [B
iput-object v0, p0, Lokhttp3/internal/ws/WebSocketReader;->maskKey:[B
const/16 v0, 0x2000
new-array v0, v0, [B
iput-object v0, p0, Lokhttp3/internal/ws/WebSocketReader;->maskBuffer:[B
if-nez p2, :cond_19
new-instance v0, Ljava/lang/NullPointerException;
const-string/jumbo v1, "source == null"
invoke-direct {v0, v1}, Ljava/lang/NullPointerException;-><init>(Ljava/lang/String;)V
throw v0
:cond_19
if-nez p3, :cond_24
new-instance v0, Ljava/lang/NullPointerException;
const-string/jumbo v1, "frameCallback == null"
invoke-direct {v0, v1}, Ljava/lang/NullPointerException;-><init>(Ljava/lang/String;)V
throw v0
:cond_24
iput-boolean p1, p0, Lokhttp3/internal/ws/WebSocketReader;->isClient:Z
iput-object p2, p0, Lokhttp3/internal/ws/WebSocketReader;->source:Lokio/e;
iput-object p3, p0, Lokhttp3/internal/ws/WebSocketReader;->frameCallback:Lokhttp3/internal/ws/WebSocketReader$FrameCallback;
return-void
.end method
.method private readControlFrame()V
.registers 10
const/4 v8, 0x0
new-instance v6, Lokio/c;
invoke-direct {v6}, Lokio/c;-><init>()V
iget-wide v0, p0, Lokhttp3/internal/ws/WebSocketReader;->frameBytesRead:J
iget-wide v2, p0, Lokhttp3/internal/ws/WebSocketReader;->frameLength:J
cmp-long v0, v0, v2
if-gez v0, :cond_19
iget-boolean v0, p0, Lokhttp3/internal/ws/WebSocketReader;->isClient:Z
if-eqz v0, :cond_53
iget-object v0, p0, Lokhttp3/internal/ws/WebSocketReader;->source:Lokio/e;
iget-wide v2, p0, Lokhttp3/internal/ws/WebSocketReader;->frameLength:J
invoke-interface {v0, v6, v2, v3}, Lokio/e;->a(Lokio/c;J)V
:cond_19
iget v0, p0, Lokhttp3/internal/ws/WebSocketReader;->opcode:I
packed-switch v0, :pswitch_data_ca
new-instance v0, Ljava/net/ProtocolException;
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
const-string/jumbo v2, "Unknown control opcode: "
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
iget v2, p0, Lokhttp3/internal/ws/WebSocketReader;->opcode:I
invoke-static {v2}, Ljava/lang/Integer;->toHexString(I)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-direct {v0, v1}, Ljava/net/ProtocolException;-><init>(Ljava/lang/String;)V
throw v0
:cond_3e
iget-object v0, p0, Lokhttp3/internal/ws/WebSocketReader;->maskBuffer:[B
int-to-long v1, v7
iget-object v3, p0, Lokhttp3/internal/ws/WebSocketReader;->maskKey:[B
iget-wide v4, p0, Lokhttp3/internal/ws/WebSocketReader;->frameBytesRead:J
invoke-static/range {v0 .. v5}, Lokhttp3/internal/ws/WebSocketProtocol;->toggleMask([BJ[BJ)V
iget-object v0, p0, Lokhttp3/internal/ws/WebSocketReader;->maskBuffer:[B
invoke-virtual {v6, v0, v8, v7}, Lokio/c;->b([BII)Lokio/c;
iget-wide v0, p0, Lokhttp3/internal/ws/WebSocketReader;->frameBytesRead:J
int-to-long v2, v7
add-long/2addr v0, v2
iput-wide v0, p0, Lokhttp3/internal/ws/WebSocketReader;->frameBytesRead:J
:cond_53
iget-wide v0, p0, Lokhttp3/internal/ws/WebSocketReader;->frameBytesRead:J
iget-wide v2, p0, Lokhttp3/internal/ws/WebSocketReader;->frameLength:J
cmp-long v0, v0, v2
if-gez v0, :cond_19
iget-wide v0, p0, Lokhttp3/internal/ws/WebSocketReader;->frameLength:J
iget-wide v2, p0, Lokhttp3/internal/ws/WebSocketReader;->frameBytesRead:J
sub-long/2addr v0, v2
iget-object v2, p0, Lokhttp3/internal/ws/WebSocketReader;->maskBuffer:[B
array-length v2, v2
int-to-long v2, v2
invoke-static {v0, v1, v2, v3}, Ljava/lang/Math;->min(JJ)J
move-result-wide v0
long-to-int v0, v0
iget-object v1, p0, Lokhttp3/internal/ws/WebSocketReader;->source:Lokio/e;
iget-object v2, p0, Lokhttp3/internal/ws/WebSocketReader;->maskBuffer:[B
invoke-interface {v1, v2, v8, v0}, Lokio/e;->a([BII)I
move-result v7
const/4 v0, -0x1
if-ne v7, v0, :cond_3e
new-instance v0, Ljava/io/EOFException;
invoke-direct {v0}, Ljava/io/EOFException;-><init>()V
throw v0
:pswitch_7a
iget-object v0, p0, Lokhttp3/internal/ws/WebSocketReader;->frameCallback:Lokhttp3/internal/ws/WebSocketReader$FrameCallback;
invoke-virtual {v6}, Lokio/c;->q()Lokio/ByteString;
move-result-object v1
invoke-interface {v0, v1}, Lokhttp3/internal/ws/WebSocketReader$FrameCallback;->onReadPing(Lokio/ByteString;)V
:goto_83
return-void
:pswitch_84
iget-object v0, p0, Lokhttp3/internal/ws/WebSocketReader;->frameCallback:Lokhttp3/internal/ws/WebSocketReader$FrameCallback;
invoke-virtual {v6}, Lokio/c;->q()Lokio/ByteString;
move-result-object v1
invoke-interface {v0, v1}, Lokhttp3/internal/ws/WebSocketReader$FrameCallback;->onReadPong(Lokio/ByteString;)V
goto :goto_83
:pswitch_8e
const/16 v1, 0x3ed
const-string/jumbo v0, ""
invoke-virtual {v6}, Lokio/c;->a()J
move-result-wide v2
const-wide/16 v4, 0x1
cmp-long v4, v2, v4
if-nez v4, :cond_a6
new-instance v0, Ljava/net/ProtocolException;
const-string/jumbo v1, "Malformed close payload length of 1."
invoke-direct {v0, v1}, Ljava/net/ProtocolException;-><init>(Ljava/lang/String;)V
throw v0
:cond_a6
const-wide/16 v4, 0x0
cmp-long v2, v2, v4
if-eqz v2, :cond_c0
invoke-virtual {v6}, Lokio/c;->j()S
move-result v1
invoke-virtual {v6}, Lokio/c;->r()Ljava/lang/String;
move-result-object v0
invoke-static {v1}, Lokhttp3/internal/ws/WebSocketProtocol;->closeCodeExceptionMessage(I)Ljava/lang/String;
move-result-object v2
if-eqz v2, :cond_c0
new-instance v0, Ljava/net/ProtocolException;
invoke-direct {v0, v2}, Ljava/net/ProtocolException;-><init>(Ljava/lang/String;)V
throw v0
:cond_c0
iget-object v2, p0, Lokhttp3/internal/ws/WebSocketReader;->frameCallback:Lokhttp3/internal/ws/WebSocketReader$FrameCallback;
invoke-interface {v2, v1, v0}, Lokhttp3/internal/ws/WebSocketReader$FrameCallback;->onReadClose(ILjava/lang/String;)V
const/4 v0, 0x1
iput-boolean v0, p0, Lokhttp3/internal/ws/WebSocketReader;->closed:Z
goto :goto_83
nop
:pswitch_data_ca
.packed-switch 0x8
:pswitch_8e
:pswitch_7a
:pswitch_84
.end packed-switch
.end method
.method private readHeader()V
.registers 11
const-wide/16 v8, 0x0
const/4 v1, 0x1
const/4 v2, 0x0
iget-boolean v0, p0, Lokhttp3/internal/ws/WebSocketReader;->closed:Z
if-eqz v0, :cond_11
new-instance v0, Ljava/io/IOException;
const-string/jumbo v1, "closed"
invoke-direct {v0, v1}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
throw v0
:cond_11
iget-object v0, p0, Lokhttp3/internal/ws/WebSocketReader;->source:Lokio/e;
invoke-interface {v0}, Lokio/e;->timeout()Lokio/r;
move-result-object v0
invoke-virtual {v0}, Lokio/r;->timeoutNanos()J
move-result-wide v4
iget-object v0, p0, Lokhttp3/internal/ws/WebSocketReader;->source:Lokio/e;
invoke-interface {v0}, Lokio/e;->timeout()Lokio/r;
move-result-object v0
invoke-virtual {v0}, Lokio/r;->clearTimeout()Lokio/r;
:try_start_24
iget-object v0, p0, Lokhttp3/internal/ws/WebSocketReader;->source:Lokio/e;
invoke-interface {v0}, Lokio/e;->i()B
:try_end_29
.catchall {:try_start_24 .. :try_end_29} :catchall_5a
move-result v0
and-int/lit16 v6, v0, 0xff
iget-object v0, p0, Lokhttp3/internal/ws/WebSocketReader;->source:Lokio/e;
invoke-interface {v0}, Lokio/e;->timeout()Lokio/r;
move-result-object v0
sget-object v3, Ljava/util/concurrent/TimeUnit;->NANOSECONDS:Ljava/util/concurrent/TimeUnit;
invoke-virtual {v0, v4, v5, v3}, Lokio/r;->timeout(JLjava/util/concurrent/TimeUnit;)Lokio/r;
and-int/lit8 v0, v6, 0xf
iput v0, p0, Lokhttp3/internal/ws/WebSocketReader;->opcode:I
and-int/lit16 v0, v6, 0x80
if-eqz v0, :cond_67
move v0, v1
:goto_40
iput-boolean v0, p0, Lokhttp3/internal/ws/WebSocketReader;->isFinalFrame:Z
and-int/lit8 v0, v6, 0x8
if-eqz v0, :cond_69
move v0, v1
:goto_47
iput-boolean v0, p0, Lokhttp3/internal/ws/WebSocketReader;->isControlFrame:Z
iget-boolean v0, p0, Lokhttp3/internal/ws/WebSocketReader;->isControlFrame:Z
if-eqz v0, :cond_6b
iget-boolean v0, p0, Lokhttp3/internal/ws/WebSocketReader;->isFinalFrame:Z
if-nez v0, :cond_6b
new-instance v0, Ljava/net/ProtocolException;
const-string/jumbo v1, "Control frames must be final."
invoke-direct {v0, v1}, Ljava/net/ProtocolException;-><init>(Ljava/lang/String;)V
throw v0
:catchall_5a
move-exception v0
iget-object v1, p0, Lokhttp3/internal/ws/WebSocketReader;->source:Lokio/e;
invoke-interface {v1}, Lokio/e;->timeout()Lokio/r;
move-result-object v1
sget-object v2, Ljava/util/concurrent/TimeUnit;->NANOSECONDS:Ljava/util/concurrent/TimeUnit;
invoke-virtual {v1, v4, v5, v2}, Lokio/r;->timeout(JLjava/util/concurrent/TimeUnit;)Lokio/r;
throw v0
:cond_67
move v0, v2
goto :goto_40
:cond_69
move v0, v2
goto :goto_47
:cond_6b
and-int/lit8 v0, v6, 0x40
if-eqz v0, :cond_89
move v4, v1
:goto_70
and-int/lit8 v0, v6, 0x20
if-eqz v0, :cond_8b
move v3, v1
:goto_75
and-int/lit8 v0, v6, 0x10
if-eqz v0, :cond_8d
move v0, v1
:goto_7a
if-nez v4, :cond_80
if-nez v3, :cond_80
if-eqz v0, :cond_8f
:cond_80
new-instance v0, Ljava/net/ProtocolException;
const-string/jumbo v1, "Reserved flags are unsupported."
invoke-direct {v0, v1}, Ljava/net/ProtocolException;-><init>(Ljava/lang/String;)V
throw v0
:cond_89
move v4, v2
goto :goto_70
:cond_8b
move v3, v2
goto :goto_75
:cond_8d
move v0, v2
goto :goto_7a
:cond_8f
iget-object v0, p0, Lokhttp3/internal/ws/WebSocketReader;->source:Lokio/e;
invoke-interface {v0}, Lokio/e;->i()B
move-result v0
and-int/lit16 v0, v0, 0xff
and-int/lit16 v3, v0, 0x80
if-eqz v3, :cond_b0
:goto_9b
iput-boolean v1, p0, Lokhttp3/internal/ws/WebSocketReader;->isMasked:Z
iget-boolean v1, p0, Lokhttp3/internal/ws/WebSocketReader;->isMasked:Z
iget-boolean v2, p0, Lokhttp3/internal/ws/WebSocketReader;->isClient:Z
if-ne v1, v2, :cond_b6
new-instance v1, Ljava/net/ProtocolException;
iget-boolean v0, p0, Lokhttp3/internal/ws/WebSocketReader;->isClient:Z
if-eqz v0, :cond_b2
const-string/jumbo v0, "Server-sent frames must not be masked."
:goto_ac
invoke-direct {v1, v0}, Ljava/net/ProtocolException;-><init>(Ljava/lang/String;)V
throw v1
:cond_b0
move v1, v2
goto :goto_9b
:cond_b2
const-string/jumbo v0, "Client-sent frames must be masked."
goto :goto_ac
:cond_b6
and-int/lit8 v0, v0, 0x7f
int-to-long v0, v0
iput-wide v0, p0, Lokhttp3/internal/ws/WebSocketReader;->frameLength:J
iget-wide v0, p0, Lokhttp3/internal/ws/WebSocketReader;->frameLength:J
const-wide/16 v2, 0x7e
cmp-long v0, v0, v2
if-nez v0, :cond_e7
iget-object v0, p0, Lokhttp3/internal/ws/WebSocketReader;->source:Lokio/e;
invoke-interface {v0}, Lokio/e;->j()S
move-result v0
int-to-long v0, v0
const-wide/32 v2, 0xffff
and-long/2addr v0, v2
iput-wide v0, p0, Lokhttp3/internal/ws/WebSocketReader;->frameLength:J
:cond_d0
iput-wide v8, p0, Lokhttp3/internal/ws/WebSocketReader;->frameBytesRead:J
iget-boolean v0, p0, Lokhttp3/internal/ws/WebSocketReader;->isControlFrame:Z
if-eqz v0, :cond_124
iget-wide v0, p0, Lokhttp3/internal/ws/WebSocketReader;->frameLength:J
const-wide/16 v2, 0x7d
cmp-long v0, v0, v2
if-lez v0, :cond_124
new-instance v0, Ljava/net/ProtocolException;
const-string/jumbo v1, "Control frame must be less than 125B."
invoke-direct {v0, v1}, Ljava/net/ProtocolException;-><init>(Ljava/lang/String;)V
throw v0
:cond_e7
iget-wide v0, p0, Lokhttp3/internal/ws/WebSocketReader;->frameLength:J
const-wide/16 v2, 0x7f
cmp-long v0, v0, v2
if-nez v0, :cond_d0
iget-object v0, p0, Lokhttp3/internal/ws/WebSocketReader;->source:Lokio/e;
invoke-interface {v0}, Lokio/e;->l()J
move-result-wide v0
iput-wide v0, p0, Lokhttp3/internal/ws/WebSocketReader;->frameLength:J
iget-wide v0, p0, Lokhttp3/internal/ws/WebSocketReader;->frameLength:J
cmp-long v0, v0, v8
if-gez v0, :cond_d0
new-instance v0, Ljava/net/ProtocolException;
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
const-string/jumbo v2, "Frame length 0x"
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
iget-wide v2, p0, Lokhttp3/internal/ws/WebSocketReader;->frameLength:J
invoke-static {v2, v3}, Ljava/lang/Long;->toHexString(J)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
const-string/jumbo v2, " > 0x7FFFFFFFFFFFFFFF"
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-direct {v0, v1}, Ljava/net/ProtocolException;-><init>(Ljava/lang/String;)V
throw v0
:cond_124
iget-boolean v0, p0, Lokhttp3/internal/ws/WebSocketReader;->isMasked:Z
if-eqz v0, :cond_12f
iget-object v0, p0, Lokhttp3/internal/ws/WebSocketReader;->source:Lokio/e;
iget-object v1, p0, Lokhttp3/internal/ws/WebSocketReader;->maskKey:[B
invoke-interface {v0, v1}, Lokio/e;->a([B)V
:cond_12f
return-void
.end method
.method private readMessage(Lokio/c;)V
.registers 12
const-wide/16 v8, -0x1
const/4 v6, 0x0
:goto_3
iget-boolean v0, p0, Lokhttp3/internal/ws/WebSocketReader;->closed:Z
if-eqz v0, :cond_10
new-instance v0, Ljava/io/IOException;
const-string/jumbo v1, "closed"
invoke-direct {v0, v1}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
throw v0
:cond_10
iget-wide v0, p0, Lokhttp3/internal/ws/WebSocketReader;->frameBytesRead:J
iget-wide v2, p0, Lokhttp3/internal/ws/WebSocketReader;->frameLength:J
cmp-long v0, v0, v2
if-nez v0, :cond_50
iget-boolean v0, p0, Lokhttp3/internal/ws/WebSocketReader;->isFinalFrame:Z
if-eqz v0, :cond_1d
:cond_1c
return-void
:cond_1d
invoke-virtual {p0}, Lokhttp3/internal/ws/WebSocketReader;->readUntilNonControlFrame()V
iget v0, p0, Lokhttp3/internal/ws/WebSocketReader;->opcode:I
if-eqz v0, :cond_44
new-instance v0, Ljava/net/ProtocolException;
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
const-string/jumbo v2, "Expected continuation opcode. Got: "
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
iget v2, p0, Lokhttp3/internal/ws/WebSocketReader;->opcode:I
invoke-static {v2}, Ljava/lang/Integer;->toHexString(I)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-direct {v0, v1}, Ljava/net/ProtocolException;-><init>(Ljava/lang/String;)V
throw v0
:cond_44
iget-boolean v0, p0, Lokhttp3/internal/ws/WebSocketReader;->isFinalFrame:Z
if-eqz v0, :cond_50
iget-wide v0, p0, Lokhttp3/internal/ws/WebSocketReader;->frameLength:J
const-wide/16 v2, 0x0
cmp-long v0, v0, v2
if-eqz v0, :cond_1c
:cond_50
iget-wide v0, p0, Lokhttp3/internal/ws/WebSocketReader;->frameLength:J
iget-wide v2, p0, Lokhttp3/internal/ws/WebSocketReader;->frameBytesRead:J
sub-long/2addr v0, v2
iget-boolean v2, p0, Lokhttp3/internal/ws/WebSocketReader;->isMasked:Z
if-eqz v2, :cond_8c
iget-object v2, p0, Lokhttp3/internal/ws/WebSocketReader;->maskBuffer:[B
array-length v2, v2
int-to-long v2, v2
invoke-static {v0, v1, v2, v3}, Ljava/lang/Math;->min(JJ)J
move-result-wide v0
iget-object v2, p0, Lokhttp3/internal/ws/WebSocketReader;->source:Lokio/e;
iget-object v3, p0, Lokhttp3/internal/ws/WebSocketReader;->maskBuffer:[B
long-to-int v0, v0
invoke-interface {v2, v3, v6, v0}, Lokio/e;->a([BII)I
move-result v0
int-to-long v1, v0
cmp-long v0, v1, v8
if-nez v0, :cond_75
new-instance v0, Ljava/io/EOFException;
invoke-direct {v0}, Ljava/io/EOFException;-><init>()V
throw v0
:cond_75
iget-object v0, p0, Lokhttp3/internal/ws/WebSocketReader;->maskBuffer:[B
iget-object v3, p0, Lokhttp3/internal/ws/WebSocketReader;->maskKey:[B
iget-wide v4, p0, Lokhttp3/internal/ws/WebSocketReader;->frameBytesRead:J
invoke-static/range {v0 .. v5}, Lokhttp3/internal/ws/WebSocketProtocol;->toggleMask([BJ[BJ)V
iget-object v0, p0, Lokhttp3/internal/ws/WebSocketReader;->maskBuffer:[B
long-to-int v3, v1
invoke-virtual {p1, v0, v6, v3}, Lokio/c;->b([BII)Lokio/c;
:cond_84
iget-wide v4, p0, Lokhttp3/internal/ws/WebSocketReader;->frameBytesRead:J
add-long v0, v4, v1
iput-wide v0, p0, Lokhttp3/internal/ws/WebSocketReader;->frameBytesRead:J
goto/16 :goto_3
:cond_8c
iget-object v2, p0, Lokhttp3/internal/ws/WebSocketReader;->source:Lokio/e;
invoke-interface {v2, p1, v0, v1}, Lokio/e;->read(Lokio/c;J)J
move-result-wide v1
cmp-long v0, v1, v8
if-nez v0, :cond_84
new-instance v0, Ljava/io/EOFException;
invoke-direct {v0}, Ljava/io/EOFException;-><init>()V
throw v0
.end method
.method private readMessageFrame()V
.registers 5
const/4 v2, 0x1
iget v0, p0, Lokhttp3/internal/ws/WebSocketReader;->opcode:I
if-eq v0, v2, :cond_26
const/4 v1, 0x2
if-eq v0, v1, :cond_26
new-instance v1, Ljava/net/ProtocolException;
new-instance v2, Ljava/lang/StringBuilder;
invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
const-string/jumbo v3, "Unknown opcode: "
invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v2
invoke-static {v0}, Ljava/lang/Integer;->toHexString(I)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}, Ljava/net/ProtocolException;-><init>(Ljava/lang/String;)V
throw v1
:cond_26
new-instance v1, Lokio/c;
invoke-direct {v1}, Lokio/c;-><init>()V
invoke-direct {p0, v1}, Lokhttp3/internal/ws/WebSocketReader;->readMessage(Lokio/c;)V
if-ne v0, v2, :cond_3a
iget-object v0, p0, Lokhttp3/internal/ws/WebSocketReader;->frameCallback:Lokhttp3/internal/ws/WebSocketReader$FrameCallback;
invoke-virtual {v1}, Lokio/c;->r()Ljava/lang/String;
move-result-object v1
invoke-interface {v0, v1}, Lokhttp3/internal/ws/WebSocketReader$FrameCallback;->onReadMessage(Ljava/lang/String;)V
:goto_39
return-void
:cond_3a
iget-object v0, p0, Lokhttp3/internal/ws/WebSocketReader;->frameCallback:Lokhttp3/internal/ws/WebSocketReader$FrameCallback;
invoke-virtual {v1}, Lokio/c;->q()Lokio/ByteString;
move-result-object v1
invoke-interface {v0, v1}, Lokhttp3/internal/ws/WebSocketReader$FrameCallback;->onReadMessage(Lokio/ByteString;)V
goto :goto_39
.end method
# virtual methods
.method processNextFrame()V
.registers 2
invoke-direct {p0}, Lokhttp3/internal/ws/WebSocketReader;->readHeader()V
iget-boolean v0, p0, Lokhttp3/internal/ws/WebSocketReader;->isControlFrame:Z
if-eqz v0, :cond_b
invoke-direct {p0}, Lokhttp3/internal/ws/WebSocketReader;->readControlFrame()V
:goto_a
return-void
:cond_b
invoke-direct {p0}, Lokhttp3/internal/ws/WebSocketReader;->readMessageFrame()V
goto :goto_a
.end method
.method readUntilNonControlFrame()V
.registers 2
:goto_0
iget-boolean v0, p0, Lokhttp3/internal/ws/WebSocketReader;->closed:Z
if-nez v0, :cond_b
invoke-direct {p0}, Lokhttp3/internal/ws/WebSocketReader;->readHeader()V
iget-boolean v0, p0, Lokhttp3/internal/ws/WebSocketReader;->isControlFrame:Z
if-nez v0, :cond_c
:cond_b
return-void
:cond_c
invoke-direct {p0}, Lokhttp3/internal/ws/WebSocketReader;->readControlFrame()V
goto :goto_0
.end method