final class okhttp.internal.ws.WebSocketWriter extends java.lang.Object
{
final boolean isClient;
final java.util.Random random;
final okio.BufferedSink sink;
final okio.Buffer sinkBuffer;
boolean writerClosed;
final okio.Buffer buffer;
final okhttp.internal.ws.WebSocketWriter$FrameSink frameSink;
boolean activeWriter;
private final byte[] maskKey;
private final okio.Buffer$UnsafeCursor maskCursor;
void <init>(boolean, okio.BufferedSink, java.util.Random)
{
okhttp.internal.ws.WebSocketWriter$FrameSink v;
byte[] v;
okio.Buffer v, v;
okhttp.internal.ws.WebSocketWriter v;
java.util.Random v;
java.lang.NullPointerException v, v;
okio.Buffer$UnsafeCursor v;
okio.BufferedSink v;
boolean v;
v := @this: okhttp.internal.ws.WebSocketWriter;
v := @parameter: boolean;
v := @parameter: okio.BufferedSink;
v := @parameter: java.util.Random;
specialinvoke v.<java.lang.Object: void <init>()>();
v = new okio.Buffer;
specialinvoke v.<okio.Buffer: void <init>()>();
v.<okhttp.internal.ws.WebSocketWriter: okio.Buffer buffer> = v;
v = new okhttp.internal.ws.WebSocketWriter$FrameSink;
specialinvoke v.<okhttp.internal.ws.WebSocketWriter$FrameSink: void <init>(okhttp.internal.ws.WebSocketWriter)>(v);
v.<okhttp.internal.ws.WebSocketWriter: okhttp.internal.ws.WebSocketWriter$FrameSink frameSink> = v;
if v != null goto label;
v = new java.lang.NullPointerException;
specialinvoke v.<java.lang.NullPointerException: void <init>(java.lang.String)>("sink == null");
throw v;
label:
if v != null goto label;
v = new java.lang.NullPointerException;
specialinvoke v.<java.lang.NullPointerException: void <init>(java.lang.String)>("random == null");
throw v;
label:
v.<okhttp.internal.ws.WebSocketWriter: boolean isClient> = v;
v.<okhttp.internal.ws.WebSocketWriter: okio.BufferedSink sink> = v;
v = interfaceinvoke v.<okio.BufferedSink: okio.Buffer buffer()>();
v.<okhttp.internal.ws.WebSocketWriter: okio.Buffer sinkBuffer> = v;
v.<okhttp.internal.ws.WebSocketWriter: java.util.Random random> = v;
if v == 0 goto label;
v = newarray (byte)[4];
goto label;
label:
v = null;
label:
v.<okhttp.internal.ws.WebSocketWriter: byte[] maskKey> = v;
if v == 0 goto label;
v = new okio.Buffer$UnsafeCursor;
specialinvoke v.<okio.Buffer$UnsafeCursor: void <init>()>();
goto label;
label:
v = null;
label:
v.<okhttp.internal.ws.WebSocketWriter: okio.Buffer$UnsafeCursor maskCursor> = v;
return;
}
void writePing(okio.ByteString) throws java.io.IOException
{
okhttp.internal.ws.WebSocketWriter v;
okio.ByteString v;
v := @this: okhttp.internal.ws.WebSocketWriter;
v := @parameter: okio.ByteString;
specialinvoke v.<okhttp.internal.ws.WebSocketWriter: void writeControlFrame(int,okio.ByteString)>(9, v);
return;
}
void writePong(okio.ByteString) throws java.io.IOException
{
okhttp.internal.ws.WebSocketWriter v;
okio.ByteString v;
v := @this: okhttp.internal.ws.WebSocketWriter;
v := @parameter: okio.ByteString;
specialinvoke v.<okhttp.internal.ws.WebSocketWriter: void writeControlFrame(int,okio.ByteString)>(10, v);
return;
}
void writeClose(int, okio.ByteString) throws java.io.IOException
{
java.lang.Throwable v;
okio.Buffer v;
okio.ByteString v, v;
int v;
okhttp.internal.ws.WebSocketWriter v;
v := @this: okhttp.internal.ws.WebSocketWriter;
v := @parameter: int;
v := @parameter: okio.ByteString;
v = <okio.ByteString: okio.ByteString EMPTY>;
if v != 0 goto label;
if v == null goto label;
label:
if v == 0 goto label;
staticinvoke <okhttp.internal.ws.WebSocketProtocol: void validateCloseCode(int)>(v);
label:
v = new okio.Buffer;
specialinvoke v.<okio.Buffer: void <init>()>();
virtualinvoke v.<okio.Buffer: okio.Buffer writeShort(int)>(v);
if v == null goto label;
virtualinvoke v.<okio.Buffer: okio.Buffer write(okio.ByteString)>(v);
label:
v = virtualinvoke v.<okio.Buffer: okio.ByteString readByteString()>();
label:
specialinvoke v.<okhttp.internal.ws.WebSocketWriter: void writeControlFrame(int,okio.ByteString)>(8, v);
label:
v.<okhttp.internal.ws.WebSocketWriter: boolean writerClosed> = 1;
goto label;
label:
v := @caughtexception;
v.<okhttp.internal.ws.WebSocketWriter: boolean writerClosed> = 1;
throw v;
label:
return;
catch java.lang.Throwable from label to label with label;
}
private void writeControlFrame(int, okio.ByteString) throws java.io.IOException
{
byte[] v, v, v;
okhttp.internal.ws.WebSocketWriter v;
java.util.Random v;
long v;
okio.Buffer$UnsafeCursor v, v, v, v;
byte v;
okio.BufferedSink v;
okio.ByteString v;
int v, v, v, v;
boolean v, v;
okio.Buffer v, v, v, v, v, v, v, v;
java.io.IOException v;
java.lang.IllegalArgumentException v;
v := @this: okhttp.internal.ws.WebSocketWriter;
v := @parameter: int;
v := @parameter: okio.ByteString;
v = v.<okhttp.internal.ws.WebSocketWriter: boolean writerClosed>;
if v == 0 goto label;
v = new java.io.IOException;
specialinvoke v.<java.io.IOException: void <init>(java.lang.String)>("closed");
throw v;
label:
v = virtualinvoke v.<okio.ByteString: int size()>();
v = v cmp 125L;
if v <= 0 goto label;
v = new java.lang.IllegalArgumentException;
specialinvoke v.<java.lang.IllegalArgumentException: void <init>(java.lang.String)>("Payload size must be less than or equal to 125");
throw v;
label:
v = 128 | v;
v = v.<okhttp.internal.ws.WebSocketWriter: okio.Buffer sinkBuffer>;
virtualinvoke v.<okio.Buffer: okio.Buffer writeByte(int)>(v);
v = v.<okhttp.internal.ws.WebSocketWriter: boolean isClient>;
if v == 0 goto label;
v = v | 128;
v = v.<okhttp.internal.ws.WebSocketWriter: okio.Buffer sinkBuffer>;
virtualinvoke v.<okio.Buffer: okio.Buffer writeByte(int)>(v);
v = v.<okhttp.internal.ws.WebSocketWriter: java.util.Random random>;
v = v.<okhttp.internal.ws.WebSocketWriter: byte[] maskKey>;
virtualinvoke v.<java.util.Random: void nextBytes(byte[])>(v);
v = v.<okhttp.internal.ws.WebSocketWriter: okio.Buffer sinkBuffer>;
v = v.<okhttp.internal.ws.WebSocketWriter: byte[] maskKey>;
virtualinvoke v.<okio.Buffer: okio.Buffer write(byte[])>(v);
if v <= 0 goto label;
v = v.<okhttp.internal.ws.WebSocketWriter: okio.Buffer sinkBuffer>;
v = virtualinvoke v.<okio.Buffer: long size()>();
v = v.<okhttp.internal.ws.WebSocketWriter: okio.Buffer sinkBuffer>;
virtualinvoke v.<okio.Buffer: okio.Buffer write(okio.ByteString)>(v);
v = v.<okhttp.internal.ws.WebSocketWriter: okio.Buffer sinkBuffer>;
v = v.<okhttp.internal.ws.WebSocketWriter: okio.Buffer$UnsafeCursor maskCursor>;
virtualinvoke v.<okio.Buffer: okio.Buffer$UnsafeCursor readAndWriteUnsafe(okio.Buffer$UnsafeCursor)>(v);
v = v.<okhttp.internal.ws.WebSocketWriter: okio.Buffer$UnsafeCursor maskCursor>;
virtualinvoke v.<okio.Buffer$UnsafeCursor: int seek(long)>(v);
v = v.<okhttp.internal.ws.WebSocketWriter: okio.Buffer$UnsafeCursor maskCursor>;
v = v.<okhttp.internal.ws.WebSocketWriter: byte[] maskKey>;
staticinvoke <okhttp.internal.ws.WebSocketProtocol: void toggleMask(okio.Buffer$UnsafeCursor,byte[])>(v, v);
v = v.<okhttp.internal.ws.WebSocketWriter: okio.Buffer$UnsafeCursor maskCursor>;
virtualinvoke v.<okio.Buffer$UnsafeCursor: void close()>();
goto label;
label:
v = v.<okhttp.internal.ws.WebSocketWriter: okio.Buffer sinkBuffer>;
virtualinvoke v.<okio.Buffer: okio.Buffer writeByte(int)>(v);
v = v.<okhttp.internal.ws.WebSocketWriter: okio.Buffer sinkBuffer>;
virtualinvoke v.<okio.Buffer: okio.Buffer write(okio.ByteString)>(v);
label:
v = v.<okhttp.internal.ws.WebSocketWriter: okio.BufferedSink sink>;
interfaceinvoke v.<okio.BufferedSink: void flush()>();
return;
}
okio.Sink newMessageSink(int, long)
{
okhttp.internal.ws.WebSocketWriter$FrameSink v, v, v, v, v;
java.lang.IllegalStateException v;
okhttp.internal.ws.WebSocketWriter v;
long v;
int v;
boolean v;
v := @this: okhttp.internal.ws.WebSocketWriter;
v := @parameter: int;
v := @parameter: long;
v = v.<okhttp.internal.ws.WebSocketWriter: boolean activeWriter>;
if v == 0 goto label;
v = new java.lang.IllegalStateException;
specialinvoke v.<java.lang.IllegalStateException: void <init>(java.lang.String)>("Another message writer is active. Did you call close()?");
throw v;
label:
v.<okhttp.internal.ws.WebSocketWriter: boolean activeWriter> = 1;
v = v.<okhttp.internal.ws.WebSocketWriter: okhttp.internal.ws.WebSocketWriter$FrameSink frameSink>;
v.<okhttp.internal.ws.WebSocketWriter$FrameSink: int formatOpcode> = v;
v = v.<okhttp.internal.ws.WebSocketWriter: okhttp.internal.ws.WebSocketWriter$FrameSink frameSink>;
v.<okhttp.internal.ws.WebSocketWriter$FrameSink: long contentLength> = v;
v = v.<okhttp.internal.ws.WebSocketWriter: okhttp.internal.ws.WebSocketWriter$FrameSink frameSink>;
v.<okhttp.internal.ws.WebSocketWriter$FrameSink: boolean isFirstFrame> = 1;
v = v.<okhttp.internal.ws.WebSocketWriter: okhttp.internal.ws.WebSocketWriter$FrameSink frameSink>;
v.<okhttp.internal.ws.WebSocketWriter$FrameSink: boolean closed> = 0;
v = v.<okhttp.internal.ws.WebSocketWriter: okhttp.internal.ws.WebSocketWriter$FrameSink frameSink>;
return v;
}
void writeMessageFrame(int, long, boolean, boolean) throws java.io.IOException
{
byte[] v, v, v;
okhttp.internal.ws.WebSocketWriter v;
java.util.Random v;
okio.Buffer$UnsafeCursor v, v, v, v;
byte v, v, v;
okio.BufferedSink v;
boolean v, v, v, v, v;
long v, v;
short v, v, v;
int v, v, v, v;
okio.Buffer v, v, v, v, v, v, v, v, v, v, v, v, v;
java.io.IOException v;
v := @this: okhttp.internal.ws.WebSocketWriter;
v := @parameter: int;
v := @parameter: long;
v := @parameter: boolean;
v := @parameter: boolean;
v = v.<okhttp.internal.ws.WebSocketWriter: boolean writerClosed>;
if v == 0 goto label;
v = new java.io.IOException;
specialinvoke v.<java.io.IOException: void <init>(java.lang.String)>("closed");
throw v;
label:
if v == 0 goto label;
v = v;
goto label;
label:
v = 0;
label:
v = v;
if v == 0 goto label;
v = v | 128;
label:
v = v.<okhttp.internal.ws.WebSocketWriter: okio.Buffer sinkBuffer>;
virtualinvoke v.<okio.Buffer: okio.Buffer writeByte(int)>(v);
v = 0;
v = v.<okhttp.internal.ws.WebSocketWriter: boolean isClient>;
if v == 0 goto label;
v = 128;
label:
v = v cmp 125L;
if v > 0 goto label;
v = v | v;
v = v.<okhttp.internal.ws.WebSocketWriter: okio.Buffer sinkBuffer>;
virtualinvoke v.<okio.Buffer: okio.Buffer writeByte(int)>(v);
goto label;
label:
v = v cmp 65535L;
if v > 0 goto label;
v = v | 126;
v = v.<okhttp.internal.ws.WebSocketWriter: okio.Buffer sinkBuffer>;
virtualinvoke v.<okio.Buffer: okio.Buffer writeByte(int)>(v);
v = v.<okhttp.internal.ws.WebSocketWriter: okio.Buffer sinkBuffer>;
virtualinvoke v.<okio.Buffer: okio.Buffer writeShort(int)>(v);
goto label;
label:
v = v | 127;
v = v.<okhttp.internal.ws.WebSocketWriter: okio.Buffer sinkBuffer>;
virtualinvoke v.<okio.Buffer: okio.Buffer writeByte(int)>(v);
v = v.<okhttp.internal.ws.WebSocketWriter: okio.Buffer sinkBuffer>;
virtualinvoke v.<okio.Buffer: okio.Buffer writeLong(long)>(v);
label:
v = v.<okhttp.internal.ws.WebSocketWriter: boolean isClient>;
if v == 0 goto label;
v = v.<okhttp.internal.ws.WebSocketWriter: java.util.Random random>;
v = v.<okhttp.internal.ws.WebSocketWriter: byte[] maskKey>;
virtualinvoke v.<java.util.Random: void nextBytes(byte[])>(v);
v = v.<okhttp.internal.ws.WebSocketWriter: okio.Buffer sinkBuffer>;
v = v.<okhttp.internal.ws.WebSocketWriter: byte[] maskKey>;
virtualinvoke v.<okio.Buffer: okio.Buffer write(byte[])>(v);
v = v cmp 0L;
if v <= 0 goto label;
v = v.<okhttp.internal.ws.WebSocketWriter: okio.Buffer sinkBuffer>;
v = virtualinvoke v.<okio.Buffer: long size()>();
v = v.<okhttp.internal.ws.WebSocketWriter: okio.Buffer sinkBuffer>;
v = v.<okhttp.internal.ws.WebSocketWriter: okio.Buffer buffer>;
virtualinvoke v.<okio.Buffer: void write(okio.Buffer,long)>(v, v);
v = v.<okhttp.internal.ws.WebSocketWriter: okio.Buffer sinkBuffer>;
v = v.<okhttp.internal.ws.WebSocketWriter: okio.Buffer$UnsafeCursor maskCursor>;
virtualinvoke v.<okio.Buffer: okio.Buffer$UnsafeCursor readAndWriteUnsafe(okio.Buffer$UnsafeCursor)>(v);
v = v.<okhttp.internal.ws.WebSocketWriter: okio.Buffer$UnsafeCursor maskCursor>;
virtualinvoke v.<okio.Buffer$UnsafeCursor: int seek(long)>(v);
v = v.<okhttp.internal.ws.WebSocketWriter: okio.Buffer$UnsafeCursor maskCursor>;
v = v.<okhttp.internal.ws.WebSocketWriter: byte[] maskKey>;
staticinvoke <okhttp.internal.ws.WebSocketProtocol: void toggleMask(okio.Buffer$UnsafeCursor,byte[])>(v, v);
v = v.<okhttp.internal.ws.WebSocketWriter: okio.Buffer$UnsafeCursor maskCursor>;
virtualinvoke v.<okio.Buffer$UnsafeCursor: void close()>();
goto label;
label:
v = v.<okhttp.internal.ws.WebSocketWriter: okio.Buffer sinkBuffer>;
v = v.<okhttp.internal.ws.WebSocketWriter: okio.Buffer buffer>;
virtualinvoke v.<okio.Buffer: void write(okio.Buffer,long)>(v, v);
label:
v = v.<okhttp.internal.ws.WebSocketWriter: okio.BufferedSink sink>;
interfaceinvoke v.<okio.BufferedSink: okio.BufferedSink emit()>();
return;
}
}