final class okhttp3.internal.ws.WebSocketWriter
minor version: 0
major version: 59
flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
this_class: okhttp3.internal.ws.WebSocketWriter
super_class: java.lang.Object
{
final boolean isClient;
descriptor: Z
flags: (0x0010) ACC_FINAL
final java.util.Random random;
descriptor: Ljava/util/Random;
flags: (0x0010) ACC_FINAL
final okio.BufferedSink sink;
descriptor: Lokio/BufferedSink;
flags: (0x0010) ACC_FINAL
final okio.Buffer sinkBuffer;
descriptor: Lokio/Buffer;
flags: (0x0010) ACC_FINAL
boolean writerClosed;
descriptor: Z
flags: (0x0000)
final okio.Buffer buffer;
descriptor: Lokio/Buffer;
flags: (0x0010) ACC_FINAL
final okhttp3.internal.ws.WebSocketWriter$FrameSink frameSink;
descriptor: Lokhttp3/internal/ws/WebSocketWriter$FrameSink;
flags: (0x0010) ACC_FINAL
boolean activeWriter;
descriptor: Z
flags: (0x0000)
private final byte[] maskKey;
descriptor: [B
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private final okio.Buffer$UnsafeCursor maskCursor;
descriptor: Lokio/Buffer$UnsafeCursor;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
void <init>(boolean, okio.BufferedSink, java.util.Random);
descriptor: (ZLokio/BufferedSink;Ljava/util/Random;)V
flags: (0x0000)
Code:
stack=4, locals=4, args_size=4
start local 0 start local 1 start local 2 start local 3 0: aload 0
invokespecial java.lang.Object.<init>:()V
1: aload 0
new okio.Buffer
dup
invokespecial okio.Buffer.<init>:()V
putfield okhttp3.internal.ws.WebSocketWriter.buffer:Lokio/Buffer;
2: aload 0
new okhttp3.internal.ws.WebSocketWriter$FrameSink
dup
aload 0
invokespecial okhttp3.internal.ws.WebSocketWriter$FrameSink.<init>:(Lokhttp3/internal/ws/WebSocketWriter;)V
putfield okhttp3.internal.ws.WebSocketWriter.frameSink:Lokhttp3/internal/ws/WebSocketWriter$FrameSink;
3: aload 2
ifnonnull 4
new java.lang.NullPointerException
dup
ldc "sink == null"
invokespecial java.lang.NullPointerException.<init>:(Ljava/lang/String;)V
athrow
4: StackMap locals: okhttp3.internal.ws.WebSocketWriter int okio.BufferedSink java.util.Random
StackMap stack:
aload 3
ifnonnull 5
new java.lang.NullPointerException
dup
ldc "random == null"
invokespecial java.lang.NullPointerException.<init>:(Ljava/lang/String;)V
athrow
5: StackMap locals:
StackMap stack:
aload 0
iload 1
putfield okhttp3.internal.ws.WebSocketWriter.isClient:Z
6: aload 0
aload 2
putfield okhttp3.internal.ws.WebSocketWriter.sink:Lokio/BufferedSink;
7: aload 0
aload 2
invokeinterface okio.BufferedSink.buffer:()Lokio/Buffer;
putfield okhttp3.internal.ws.WebSocketWriter.sinkBuffer:Lokio/Buffer;
8: aload 0
aload 3
putfield okhttp3.internal.ws.WebSocketWriter.random:Ljava/util/Random;
9: aload 0
iload 1
ifeq 10
iconst_4
newarray 8
goto 11
StackMap locals:
StackMap stack: okhttp3.internal.ws.WebSocketWriter
10: aconst_null
StackMap locals: okhttp3.internal.ws.WebSocketWriter int okio.BufferedSink java.util.Random
StackMap stack: okhttp3.internal.ws.WebSocketWriter byte[]
11: putfield okhttp3.internal.ws.WebSocketWriter.maskKey:[B
12: aload 0
iload 1
ifeq 13
new okio.Buffer$UnsafeCursor
dup
invokespecial okio.Buffer$UnsafeCursor.<init>:()V
goto 14
StackMap locals:
StackMap stack: okhttp3.internal.ws.WebSocketWriter
13: aconst_null
StackMap locals: okhttp3.internal.ws.WebSocketWriter int okio.BufferedSink java.util.Random
StackMap stack: okhttp3.internal.ws.WebSocketWriter okio.Buffer$UnsafeCursor
14: putfield okhttp3.internal.ws.WebSocketWriter.maskCursor:Lokio/Buffer$UnsafeCursor;
15: return
end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 16 0 this Lokhttp3/internal/ws/WebSocketWriter;
0 16 1 isClient Z
0 16 2 sink Lokio/BufferedSink;
0 16 3 random Ljava/util/Random;
MethodParameters:
Name Flags
isClient
sink
random
void writePing(okio.ByteString);
descriptor: (Lokio/ByteString;)V
flags: (0x0000)
Code:
stack=3, locals=2, args_size=2
start local 0 start local 1 0: aload 0
bipush 9
aload 1
invokevirtual okhttp3.internal.ws.WebSocketWriter.writeControlFrame:(ILokio/ByteString;)V
1: return
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 2 0 this Lokhttp3/internal/ws/WebSocketWriter;
0 2 1 payload Lokio/ByteString;
Exceptions:
throws java.io.IOException
MethodParameters:
Name Flags
payload
void writePong(okio.ByteString);
descriptor: (Lokio/ByteString;)V
flags: (0x0000)
Code:
stack=3, locals=2, args_size=2
start local 0 start local 1 0: aload 0
bipush 10
aload 1
invokevirtual okhttp3.internal.ws.WebSocketWriter.writeControlFrame:(ILokio/ByteString;)V
1: return
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 2 0 this Lokhttp3/internal/ws/WebSocketWriter;
0 2 1 payload Lokio/ByteString;
Exceptions:
throws java.io.IOException
MethodParameters:
Name Flags
payload
void writeClose(int, okio.ByteString);
descriptor: (ILokio/ByteString;)V
flags: (0x0000)
Code:
stack=3, locals=5, args_size=3
start local 0 start local 1 start local 2 0: getstatic okio.ByteString.EMPTY:Lokio/ByteString;
astore 3
start local 3 1: iload 1
ifne 2
aload 2
ifnull 9
2: StackMap locals: okio.ByteString
StackMap stack:
iload 1
ifeq 4
3: iload 1
invokestatic okhttp3.internal.ws.WebSocketProtocol.validateCloseCode:(I)V
4: StackMap locals:
StackMap stack:
new okio.Buffer
dup
invokespecial okio.Buffer.<init>:()V
astore 4
start local 4 5: aload 4
iload 1
invokevirtual okio.Buffer.writeShort:(I)Lokio/Buffer;
pop
6: aload 2
ifnull 8
7: aload 4
aload 2
invokevirtual okio.Buffer.write:(Lokio/ByteString;)Lokio/Buffer;
pop
8: StackMap locals: okio.Buffer
StackMap stack:
aload 4
invokevirtual okio.Buffer.readByteString:()Lokio/ByteString;
astore 3
end local 4 9: StackMap locals:
StackMap stack:
aload 0
bipush 8
aload 3
invokevirtual okhttp3.internal.ws.WebSocketWriter.writeControlFrame:(ILokio/ByteString;)V
10: goto 14
StackMap locals:
StackMap stack: java.lang.Throwable
11: astore 4
12: aload 0
iconst_1
putfield okhttp3.internal.ws.WebSocketWriter.writerClosed:Z
13: aload 4
athrow
14: StackMap locals:
StackMap stack:
aload 0
iconst_1
putfield okhttp3.internal.ws.WebSocketWriter.writerClosed:Z
15: return
end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 16 0 this Lokhttp3/internal/ws/WebSocketWriter;
0 16 1 code I
0 16 2 reason Lokio/ByteString;
1 16 3 payload Lokio/ByteString;
5 9 4 buffer Lokio/Buffer;
Exception table:
from to target type
9 11 11 any
Exceptions:
throws java.io.IOException
MethodParameters:
Name Flags
code
reason
private void writeControlFrame(int, okio.ByteString);
descriptor: (ILokio/ByteString;)V
flags: (0x0002) ACC_PRIVATE
Code:
stack=4, locals=8, args_size=3
start local 0 start local 1 start local 2 0: aload 0
getfield okhttp3.internal.ws.WebSocketWriter.writerClosed:Z
ifeq 1
new java.io.IOException
dup
ldc "closed"
invokespecial java.io.IOException.<init>:(Ljava/lang/String;)V
athrow
1: StackMap locals:
StackMap stack:
aload 2
invokevirtual okio.ByteString.size:()I
istore 3
start local 3 2: iload 3
i2l
ldc 125
lcmp
ifle 6
3: new java.lang.IllegalArgumentException
dup
4: ldc "Payload size must be less than or equal to 125"
5: invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
athrow
6: StackMap locals: int
StackMap stack:
sipush 128
iload 1
ior
istore 4
start local 4 7: aload 0
getfield okhttp3.internal.ws.WebSocketWriter.sinkBuffer:Lokio/Buffer;
iload 4
invokevirtual okio.Buffer.writeByte:(I)Lokio/Buffer;
pop
8: iload 3
istore 5
start local 5 9: aload 0
getfield okhttp3.internal.ws.WebSocketWriter.isClient:Z
ifeq 22
10: iload 5
sipush 128
ior
istore 5
11: aload 0
getfield okhttp3.internal.ws.WebSocketWriter.sinkBuffer:Lokio/Buffer;
iload 5
invokevirtual okio.Buffer.writeByte:(I)Lokio/Buffer;
pop
12: aload 0
getfield okhttp3.internal.ws.WebSocketWriter.random:Ljava/util/Random;
aload 0
getfield okhttp3.internal.ws.WebSocketWriter.maskKey:[B
invokevirtual java.util.Random.nextBytes:([B)V
13: aload 0
getfield okhttp3.internal.ws.WebSocketWriter.sinkBuffer:Lokio/Buffer;
aload 0
getfield okhttp3.internal.ws.WebSocketWriter.maskKey:[B
invokevirtual okio.Buffer.write:([B)Lokio/Buffer;
pop
14: iload 3
ifle 24
15: aload 0
getfield okhttp3.internal.ws.WebSocketWriter.sinkBuffer:Lokio/Buffer;
invokevirtual okio.Buffer.size:()J
lstore 6
start local 6 16: aload 0
getfield okhttp3.internal.ws.WebSocketWriter.sinkBuffer:Lokio/Buffer;
aload 2
invokevirtual okio.Buffer.write:(Lokio/ByteString;)Lokio/Buffer;
pop
17: aload 0
getfield okhttp3.internal.ws.WebSocketWriter.sinkBuffer:Lokio/Buffer;
aload 0
getfield okhttp3.internal.ws.WebSocketWriter.maskCursor:Lokio/Buffer$UnsafeCursor;
invokevirtual okio.Buffer.readAndWriteUnsafe:(Lokio/Buffer$UnsafeCursor;)Lokio/Buffer$UnsafeCursor;
pop
18: aload 0
getfield okhttp3.internal.ws.WebSocketWriter.maskCursor:Lokio/Buffer$UnsafeCursor;
lload 6
invokevirtual okio.Buffer$UnsafeCursor.seek:(J)I
pop
19: aload 0
getfield okhttp3.internal.ws.WebSocketWriter.maskCursor:Lokio/Buffer$UnsafeCursor;
aload 0
getfield okhttp3.internal.ws.WebSocketWriter.maskKey:[B
invokestatic okhttp3.internal.ws.WebSocketProtocol.toggleMask:(Lokio/Buffer$UnsafeCursor;[B)V
20: aload 0
getfield okhttp3.internal.ws.WebSocketWriter.maskCursor:Lokio/Buffer$UnsafeCursor;
invokevirtual okio.Buffer$UnsafeCursor.close:()V
end local 6 21: goto 24
22: StackMap locals: int int
StackMap stack:
aload 0
getfield okhttp3.internal.ws.WebSocketWriter.sinkBuffer:Lokio/Buffer;
iload 5
invokevirtual okio.Buffer.writeByte:(I)Lokio/Buffer;
pop
23: aload 0
getfield okhttp3.internal.ws.WebSocketWriter.sinkBuffer:Lokio/Buffer;
aload 2
invokevirtual okio.Buffer.write:(Lokio/ByteString;)Lokio/Buffer;
pop
24: StackMap locals:
StackMap stack:
aload 0
getfield okhttp3.internal.ws.WebSocketWriter.sink:Lokio/BufferedSink;
invokeinterface okio.BufferedSink.flush:()V
25: return
end local 5 end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 26 0 this Lokhttp3/internal/ws/WebSocketWriter;
0 26 1 opcode I
0 26 2 payload Lokio/ByteString;
2 26 3 length I
7 26 4 b0 I
9 26 5 b1 I
16 21 6 payloadStart J
Exceptions:
throws java.io.IOException
MethodParameters:
Name Flags
opcode
payload
okio.Sink newMessageSink(int, long);
descriptor: (IJ)Lokio/Sink;
flags: (0x0000)
Code:
stack=3, locals=4, args_size=3
start local 0 start local 1 start local 2 0: aload 0
getfield okhttp3.internal.ws.WebSocketWriter.activeWriter:Z
ifeq 2
1: new java.lang.IllegalStateException
dup
ldc "Another message writer is active. Did you call close()?"
invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
athrow
2: StackMap locals:
StackMap stack:
aload 0
iconst_1
putfield okhttp3.internal.ws.WebSocketWriter.activeWriter:Z
3: aload 0
getfield okhttp3.internal.ws.WebSocketWriter.frameSink:Lokhttp3/internal/ws/WebSocketWriter$FrameSink;
iload 1
putfield okhttp3.internal.ws.WebSocketWriter$FrameSink.formatOpcode:I
4: aload 0
getfield okhttp3.internal.ws.WebSocketWriter.frameSink:Lokhttp3/internal/ws/WebSocketWriter$FrameSink;
lload 2
putfield okhttp3.internal.ws.WebSocketWriter$FrameSink.contentLength:J
5: aload 0
getfield okhttp3.internal.ws.WebSocketWriter.frameSink:Lokhttp3/internal/ws/WebSocketWriter$FrameSink;
iconst_1
putfield okhttp3.internal.ws.WebSocketWriter$FrameSink.isFirstFrame:Z
6: aload 0
getfield okhttp3.internal.ws.WebSocketWriter.frameSink:Lokhttp3/internal/ws/WebSocketWriter$FrameSink;
iconst_0
putfield okhttp3.internal.ws.WebSocketWriter$FrameSink.closed:Z
7: aload 0
getfield okhttp3.internal.ws.WebSocketWriter.frameSink:Lokhttp3/internal/ws/WebSocketWriter$FrameSink;
areturn
end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 8 0 this Lokhttp3/internal/ws/WebSocketWriter;
0 8 1 formatOpcode I
0 8 2 contentLength J
MethodParameters:
Name Flags
formatOpcode
contentLength
void writeMessageFrame(int, long, boolean, boolean);
descriptor: (IJZZ)V
flags: (0x0000)
Code:
stack=4, locals=10, args_size=5
start local 0 start local 1 start local 2 start local 4 start local 5 0: aload 0
getfield okhttp3.internal.ws.WebSocketWriter.writerClosed:Z
ifeq 1
new java.io.IOException
dup
ldc "closed"
invokespecial java.io.IOException.<init>:(Ljava/lang/String;)V
athrow
1: StackMap locals:
StackMap stack:
iload 4
ifeq 2
iload 1
goto 3
StackMap locals:
StackMap stack:
2: iconst_0
StackMap locals:
StackMap stack: int
3: istore 6
start local 6 4: iload 5
ifeq 6
5: iload 6
sipush 128
ior
istore 6
6: StackMap locals: int
StackMap stack:
aload 0
getfield okhttp3.internal.ws.WebSocketWriter.sinkBuffer:Lokio/Buffer;
iload 6
invokevirtual okio.Buffer.writeByte:(I)Lokio/Buffer;
pop
7: iconst_0
istore 7
start local 7 8: aload 0
getfield okhttp3.internal.ws.WebSocketWriter.isClient:Z
ifeq 10
9: iload 7
sipush 128
ior
istore 7
10: StackMap locals: int
StackMap stack:
lload 2
ldc 125
lcmp
ifgt 14
11: iload 7
lload 2
l2i
ior
istore 7
12: aload 0
getfield okhttp3.internal.ws.WebSocketWriter.sinkBuffer:Lokio/Buffer;
iload 7
invokevirtual okio.Buffer.writeByte:(I)Lokio/Buffer;
pop
13: goto 22
StackMap locals:
StackMap stack:
14: lload 2
ldc 65535
lcmp
ifgt 19
15: iload 7
bipush 126
ior
istore 7
16: aload 0
getfield okhttp3.internal.ws.WebSocketWriter.sinkBuffer:Lokio/Buffer;
iload 7
invokevirtual okio.Buffer.writeByte:(I)Lokio/Buffer;
pop
17: aload 0
getfield okhttp3.internal.ws.WebSocketWriter.sinkBuffer:Lokio/Buffer;
lload 2
l2i
invokevirtual okio.Buffer.writeShort:(I)Lokio/Buffer;
pop
18: goto 22
19: StackMap locals:
StackMap stack:
iload 7
bipush 127
ior
istore 7
20: aload 0
getfield okhttp3.internal.ws.WebSocketWriter.sinkBuffer:Lokio/Buffer;
iload 7
invokevirtual okio.Buffer.writeByte:(I)Lokio/Buffer;
pop
21: aload 0
getfield okhttp3.internal.ws.WebSocketWriter.sinkBuffer:Lokio/Buffer;
lload 2
invokevirtual okio.Buffer.writeLong:(J)Lokio/Buffer;
pop
22: StackMap locals:
StackMap stack:
aload 0
getfield okhttp3.internal.ws.WebSocketWriter.isClient:Z
ifeq 33
23: aload 0
getfield okhttp3.internal.ws.WebSocketWriter.random:Ljava/util/Random;
aload 0
getfield okhttp3.internal.ws.WebSocketWriter.maskKey:[B
invokevirtual java.util.Random.nextBytes:([B)V
24: aload 0
getfield okhttp3.internal.ws.WebSocketWriter.sinkBuffer:Lokio/Buffer;
aload 0
getfield okhttp3.internal.ws.WebSocketWriter.maskKey:[B
invokevirtual okio.Buffer.write:([B)Lokio/Buffer;
pop
25: lload 2
lconst_0
lcmp
ifle 34
26: aload 0
getfield okhttp3.internal.ws.WebSocketWriter.sinkBuffer:Lokio/Buffer;
invokevirtual okio.Buffer.size:()J
lstore 8
start local 8 27: aload 0
getfield okhttp3.internal.ws.WebSocketWriter.sinkBuffer:Lokio/Buffer;
aload 0
getfield okhttp3.internal.ws.WebSocketWriter.buffer:Lokio/Buffer;
lload 2
invokevirtual okio.Buffer.write:(Lokio/Buffer;J)V
28: aload 0
getfield okhttp3.internal.ws.WebSocketWriter.sinkBuffer:Lokio/Buffer;
aload 0
getfield okhttp3.internal.ws.WebSocketWriter.maskCursor:Lokio/Buffer$UnsafeCursor;
invokevirtual okio.Buffer.readAndWriteUnsafe:(Lokio/Buffer$UnsafeCursor;)Lokio/Buffer$UnsafeCursor;
pop
29: aload 0
getfield okhttp3.internal.ws.WebSocketWriter.maskCursor:Lokio/Buffer$UnsafeCursor;
lload 8
invokevirtual okio.Buffer$UnsafeCursor.seek:(J)I
pop
30: aload 0
getfield okhttp3.internal.ws.WebSocketWriter.maskCursor:Lokio/Buffer$UnsafeCursor;
aload 0
getfield okhttp3.internal.ws.WebSocketWriter.maskKey:[B
invokestatic okhttp3.internal.ws.WebSocketProtocol.toggleMask:(Lokio/Buffer$UnsafeCursor;[B)V
31: aload 0
getfield okhttp3.internal.ws.WebSocketWriter.maskCursor:Lokio/Buffer$UnsafeCursor;
invokevirtual okio.Buffer$UnsafeCursor.close:()V
end local 8 32: goto 34
33: StackMap locals:
StackMap stack:
aload 0
getfield okhttp3.internal.ws.WebSocketWriter.sinkBuffer:Lokio/Buffer;
aload 0
getfield okhttp3.internal.ws.WebSocketWriter.buffer:Lokio/Buffer;
lload 2
invokevirtual okio.Buffer.write:(Lokio/Buffer;J)V
34: StackMap locals:
StackMap stack:
aload 0
getfield okhttp3.internal.ws.WebSocketWriter.sink:Lokio/BufferedSink;
invokeinterface okio.BufferedSink.emit:()Lokio/BufferedSink;
pop
35: return
end local 7 end local 6 end local 5 end local 4 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 36 0 this Lokhttp3/internal/ws/WebSocketWriter;
0 36 1 formatOpcode I
0 36 2 byteCount J
0 36 4 isFirstFrame Z
0 36 5 isFinal Z
4 36 6 b0 I
8 36 7 b1 I
27 32 8 bufferStart J
Exceptions:
throws java.io.IOException
MethodParameters:
Name Flags
formatOpcode
byteCount
isFirstFrame
isFinal
}
SourceFile: "WebSocketWriter.java"
NestMembers:
okhttp3.internal.ws.WebSocketWriter$FrameSink
InnerClasses:
final FrameSink = okhttp3.internal.ws.WebSocketWriter$FrameSink of okhttp3.internal.ws.WebSocketWriter
public final UnsafeCursor = okio.Buffer$UnsafeCursor of okio.Buffer