final class okhttp.internal.cache.Relay extends java.lang.Object
{
private static final int SOURCE_UPSTREAM;
private static final int SOURCE_FILE;
static final okio.ByteString PREFIX_CLEAN;
static final okio.ByteString PREFIX_DIRTY;
private static final long FILE_HEADER_SIZE;
java.io.RandomAccessFile file;
java.lang.Thread upstreamReader;
okio.Source upstream;
final okio.Buffer upstreamBuffer;
long upstreamPos;
boolean complete;
private final okio.ByteString metadata;
final okio.Buffer buffer;
final long bufferMaxSize;
int sourceCount;
private void <init>(java.io.RandomAccessFile, okio.Source, long, okio.ByteString, long)
{
java.io.RandomAccessFile v;
okio.Buffer v, v;
okio.Source v;
long v, v;
okhttp.internal.cache.Relay v;
okio.ByteString v;
boolean v;
v := @this: okhttp.internal.cache.Relay;
v := @parameter: java.io.RandomAccessFile;
v := @parameter: okio.Source;
v := @parameter: long;
v := @parameter: okio.ByteString;
v := @parameter: long;
specialinvoke v.<java.lang.Object: void <init>()>();
v = new okio.Buffer;
specialinvoke v.<okio.Buffer: void <init>()>();
v.<okhttp.internal.cache.Relay: okio.Buffer upstreamBuffer> = v;
v = new okio.Buffer;
specialinvoke v.<okio.Buffer: void <init>()>();
v.<okhttp.internal.cache.Relay: okio.Buffer buffer> = v;
v.<okhttp.internal.cache.Relay: java.io.RandomAccessFile file> = v;
v.<okhttp.internal.cache.Relay: okio.Source upstream> = v;
if v != null goto label;
v = 1;
goto label;
label:
v = 0;
label:
v.<okhttp.internal.cache.Relay: boolean complete> = v;
v.<okhttp.internal.cache.Relay: long upstreamPos> = v;
v.<okhttp.internal.cache.Relay: okio.ByteString metadata> = v;
v.<okhttp.internal.cache.Relay: long bufferMaxSize> = v;
return;
}
public static okhttp.internal.cache.Relay edit(java.io.File, okio.Source, okio.ByteString, long) throws java.io.IOException
{
java.io.RandomAccessFile v;
okio.Source v;
okio.ByteString v, v;
long v;
okhttp.internal.cache.Relay v;
java.io.File v;
v := @parameter: java.io.File;
v := @parameter: okio.Source;
v := @parameter: okio.ByteString;
v := @parameter: long;
v = new java.io.RandomAccessFile;
specialinvoke v.<java.io.RandomAccessFile: void <init>(java.io.File,java.lang.String)>(v, "rw");
v = new okhttp.internal.cache.Relay;
specialinvoke v.<okhttp.internal.cache.Relay: void <init>(java.io.RandomAccessFile,okio.Source,long,okio.ByteString,long)>(v, v, 0L, v, v);
virtualinvoke v.<java.io.RandomAccessFile: void setLength(long)>(0L);
v = <okhttp.internal.cache.Relay: okio.ByteString PREFIX_DIRTY>;
specialinvoke v.<okhttp.internal.cache.Relay: void writeHeader(okio.ByteString,long,long)>(v, -1L, -1L);
return v;
}
public static okhttp.internal.cache.Relay read(java.io.File) throws java.io.IOException
{
java.io.RandomAccessFile v;
okhttp.internal.cache.FileOperator v;
long v, v, v;
okio.ByteString v, v, v, v;
int v;
boolean v;
okio.Buffer v, v;
java.io.IOException v;
okhttp.internal.cache.Relay v;
java.io.File v;
java.nio.channels.FileChannel v;
v := @parameter: java.io.File;
v = new java.io.RandomAccessFile;
specialinvoke v.<java.io.RandomAccessFile: void <init>(java.io.File,java.lang.String)>(v, "rw");
v = new okhttp.internal.cache.FileOperator;
v = virtualinvoke v.<java.io.RandomAccessFile: java.nio.channels.FileChannel getChannel()>();
specialinvoke v.<okhttp.internal.cache.FileOperator: void <init>(java.nio.channels.FileChannel)>(v);
v = new okio.Buffer;
specialinvoke v.<okio.Buffer: void <init>()>();
virtualinvoke v.<okhttp.internal.cache.FileOperator: void read(long,okio.Buffer,long)>(0L, v, 32L);
v = <okhttp.internal.cache.Relay: okio.ByteString PREFIX_CLEAN>;
v = virtualinvoke v.<okio.ByteString: int size()>();
v = virtualinvoke v.<okio.Buffer: okio.ByteString readByteString(long)>(v);
v = <okhttp.internal.cache.Relay: okio.ByteString PREFIX_CLEAN>;
v = virtualinvoke v.<okio.ByteString: boolean equals(java.lang.Object)>(v);
if v != 0 goto label;
v = new java.io.IOException;
specialinvoke v.<java.io.IOException: void <init>(java.lang.String)>("unreadable cache file");
throw v;
label:
v = virtualinvoke v.<okio.Buffer: long readLong()>();
v = virtualinvoke v.<okio.Buffer: long readLong()>();
v = new okio.Buffer;
specialinvoke v.<okio.Buffer: void <init>()>();
v = 32L + v;
virtualinvoke v.<okhttp.internal.cache.FileOperator: void read(long,okio.Buffer,long)>(v, v, v);
v = virtualinvoke v.<okio.Buffer: okio.ByteString readByteString()>();
v = new okhttp.internal.cache.Relay;
specialinvoke v.<okhttp.internal.cache.Relay: void <init>(java.io.RandomAccessFile,okio.Source,long,okio.ByteString,long)>(v, null, v, v, 0L);
return v;
}
private void writeHeader(okio.ByteString, long, long) throws java.io.IOException
{
java.io.RandomAccessFile v;
okhttp.internal.cache.FileOperator v;
okio.Buffer v;
long v, v, v;
okhttp.internal.cache.Relay v;
java.lang.IllegalArgumentException v;
byte v;
okio.ByteString v;
java.nio.channels.FileChannel v;
v := @this: okhttp.internal.cache.Relay;
v := @parameter: okio.ByteString;
v := @parameter: long;
v := @parameter: long;
v = new okio.Buffer;
specialinvoke v.<okio.Buffer: void <init>()>();
virtualinvoke v.<okio.Buffer: okio.Buffer write(okio.ByteString)>(v);
virtualinvoke v.<okio.Buffer: okio.Buffer writeLong(long)>(v);
virtualinvoke v.<okio.Buffer: okio.Buffer writeLong(long)>(v);
v = virtualinvoke v.<okio.Buffer: long size()>();
v = v cmp 32L;
if v == 0 goto label;
v = new java.lang.IllegalArgumentException;
specialinvoke v.<java.lang.IllegalArgumentException: void <init>()>();
throw v;
label:
v = new okhttp.internal.cache.FileOperator;
v = v.<okhttp.internal.cache.Relay: java.io.RandomAccessFile file>;
v = virtualinvoke v.<java.io.RandomAccessFile: java.nio.channels.FileChannel getChannel()>();
specialinvoke v.<okhttp.internal.cache.FileOperator: void <init>(java.nio.channels.FileChannel)>(v);
virtualinvoke v.<okhttp.internal.cache.FileOperator: void write(long,okio.Buffer,long)>(0L, v, 32L);
return;
}
private void writeMetadata(long) throws java.io.IOException
{
java.io.RandomAccessFile v;
okhttp.internal.cache.FileOperator v;
okio.Buffer v;
long v, v;
okhttp.internal.cache.Relay v;
okio.ByteString v, v;
int v;
java.nio.channels.FileChannel v;
v := @this: okhttp.internal.cache.Relay;
v := @parameter: long;
v = new okio.Buffer;
specialinvoke v.<okio.Buffer: void <init>()>();
v = v.<okhttp.internal.cache.Relay: okio.ByteString metadata>;
virtualinvoke v.<okio.Buffer: okio.Buffer write(okio.ByteString)>(v);
v = new okhttp.internal.cache.FileOperator;
v = v.<okhttp.internal.cache.Relay: java.io.RandomAccessFile file>;
v = virtualinvoke v.<java.io.RandomAccessFile: java.nio.channels.FileChannel getChannel()>();
specialinvoke v.<okhttp.internal.cache.FileOperator: void <init>(java.nio.channels.FileChannel)>(v);
v = 32L + v;
v = v.<okhttp.internal.cache.Relay: okio.ByteString metadata>;
v = virtualinvoke v.<okio.ByteString: int size()>();
virtualinvoke v.<okhttp.internal.cache.FileOperator: void write(long,okio.Buffer,long)>(v, v, v);
return;
}
void commit(long) throws java.io.IOException
{
java.lang.Throwable v;
java.io.RandomAccessFile v, v;
okio.Source v;
long v;
okhttp.internal.cache.Relay v;
okio.ByteString v, v;
int v;
java.nio.channels.FileChannel v, v;
v := @this: okhttp.internal.cache.Relay;
v := @parameter: long;
specialinvoke v.<okhttp.internal.cache.Relay: void writeMetadata(long)>(v);
v = v.<okhttp.internal.cache.Relay: java.io.RandomAccessFile file>;
v = virtualinvoke v.<java.io.RandomAccessFile: java.nio.channels.FileChannel getChannel()>();
virtualinvoke v.<java.nio.channels.FileChannel: void force(boolean)>(0);
v = <okhttp.internal.cache.Relay: okio.ByteString PREFIX_CLEAN>;
v = v.<okhttp.internal.cache.Relay: okio.ByteString metadata>;
v = virtualinvoke v.<okio.ByteString: int size()>();
specialinvoke v.<okhttp.internal.cache.Relay: void writeHeader(okio.ByteString,long,long)>(v, v, v);
v = v.<okhttp.internal.cache.Relay: java.io.RandomAccessFile file>;
v = virtualinvoke v.<java.io.RandomAccessFile: java.nio.channels.FileChannel getChannel()>();
virtualinvoke v.<java.nio.channels.FileChannel: void force(boolean)>(0);
entermonitor v;
label:
v.<okhttp.internal.cache.Relay: boolean complete> = 1;
exitmonitor v;
label:
goto label;
label:
v := @caughtexception;
exitmonitor v;
throw v;
label:
v = v.<okhttp.internal.cache.Relay: okio.Source upstream>;
staticinvoke <okhttp.internal.Util: void closeQuietly(java.io.Closeable)>(v);
v.<okhttp.internal.cache.Relay: okio.Source upstream> = null;
return;
catch java.lang.Throwable from label to label with label;
}
boolean isClosed()
{
java.io.RandomAccessFile v;
okhttp.internal.cache.Relay v;
boolean v;
v := @this: okhttp.internal.cache.Relay;
v = v.<okhttp.internal.cache.Relay: java.io.RandomAccessFile file>;
if v != null goto label;
v = 1;
goto label;
label:
v = 0;
label:
return v;
}
public okio.ByteString metadata()
{
okhttp.internal.cache.Relay v;
okio.ByteString v;
v := @this: okhttp.internal.cache.Relay;
v = v.<okhttp.internal.cache.Relay: okio.ByteString metadata>;
return v;
}
public okio.Source newSource()
{
java.lang.Throwable v;
java.io.RandomAccessFile v;
int v, v;
okhttp.internal.cache.Relay v;
okhttp.internal.cache.Relay$RelaySource v;
v := @this: okhttp.internal.cache.Relay;
entermonitor v;
label:
v = v.<okhttp.internal.cache.Relay: java.io.RandomAccessFile file>;
if v != null goto label;
exitmonitor v;
label:
return null;
label:
v = v.<okhttp.internal.cache.Relay: int sourceCount>;
v = v + 1;
v.<okhttp.internal.cache.Relay: int sourceCount> = v;
exitmonitor v;
label:
goto label;
label:
v := @caughtexception;
exitmonitor v;
throw v;
label:
v = new okhttp.internal.cache.Relay$RelaySource;
specialinvoke v.<okhttp.internal.cache.Relay$RelaySource: void <init>(okhttp.internal.cache.Relay)>(v);
return v;
catch java.lang.Throwable from label to label with label;
catch java.lang.Throwable from label to label with label;
}
static void <clinit>()
{
okio.ByteString v, v;
v = staticinvoke <okio.ByteString: okio.ByteString encodeUtf8(java.lang.String)>("OkHttp cache v1\n");
<okhttp.internal.cache.Relay: okio.ByteString PREFIX_CLEAN> = v;
v = staticinvoke <okio.ByteString: okio.ByteString encodeUtf8(java.lang.String)>("OkHttp DIRTY :(\n");
<okhttp.internal.cache.Relay: okio.ByteString PREFIX_DIRTY> = v;
return;
}
}