371 lines
13 KiB
Java
371 lines
13 KiB
Java
|
package okhttp3.internal.cache2;
|
||
|
|
||
|
import java.io.File;
|
||
|
import java.io.IOException;
|
||
|
import java.io.RandomAccessFile;
|
||
|
import java.nio.channels.FileChannel;
|
||
|
import o.C14866gag;
|
||
|
import o.C14953gcr;
|
||
|
import o.C14957gcv;
|
||
|
import o.C15111ghZ;
|
||
|
import o.C15139giB;
|
||
|
import o.C15155gij;
|
||
|
import o.gdP;
|
||
|
import o.giD;
|
||
|
import okhttp3.internal.Util;
|
||
|
|
||
|
/* loaded from: classes6.dex */
|
||
|
public final class Relay {
|
||
|
public static final Companion Companion = new Companion(null);
|
||
|
private static final long FILE_HEADER_SIZE = 32;
|
||
|
public static final C15155gij PREFIX_CLEAN;
|
||
|
public static final C15155gij PREFIX_DIRTY;
|
||
|
private static final int SOURCE_FILE = 2;
|
||
|
private static final int SOURCE_UPSTREAM = 1;
|
||
|
private final C15111ghZ buffer;
|
||
|
private final long bufferMaxSize;
|
||
|
private boolean complete;
|
||
|
private RandomAccessFile file;
|
||
|
private final C15155gij metadata;
|
||
|
private int sourceCount;
|
||
|
private giD upstream;
|
||
|
private final C15111ghZ upstreamBuffer;
|
||
|
private long upstreamPos;
|
||
|
private Thread upstreamReader;
|
||
|
|
||
|
private Relay(RandomAccessFile randomAccessFile, giD gid, long j, C15155gij c15155gij, long j2) {
|
||
|
this.file = randomAccessFile;
|
||
|
this.upstream = gid;
|
||
|
this.upstreamPos = j;
|
||
|
this.metadata = c15155gij;
|
||
|
this.bufferMaxSize = j2;
|
||
|
this.upstreamBuffer = new C15111ghZ();
|
||
|
this.complete = this.upstream == null;
|
||
|
this.buffer = new C15111ghZ();
|
||
|
}
|
||
|
|
||
|
/* JADX INFO: Access modifiers changed from: private */
|
||
|
public final void writeHeader(C15155gij c15155gij, long j, long j2) throws IOException {
|
||
|
C15111ghZ c15111ghZ = new C15111ghZ();
|
||
|
C14957gcv.e(c15155gij, "");
|
||
|
c15155gij.a(c15111ghZ, c15155gij.a());
|
||
|
c15111ghZ.n(j);
|
||
|
c15111ghZ.n(j2);
|
||
|
if (c15111ghZ.c != FILE_HEADER_SIZE) {
|
||
|
throw new IllegalArgumentException("Failed requirement.".toString());
|
||
|
}
|
||
|
RandomAccessFile randomAccessFile = this.file;
|
||
|
C14957gcv.e(randomAccessFile);
|
||
|
FileChannel channel = randomAccessFile.getChannel();
|
||
|
C14957gcv.c(channel, "");
|
||
|
new FileOperator(channel).write(0L, c15111ghZ, FILE_HEADER_SIZE);
|
||
|
}
|
||
|
|
||
|
private final void writeMetadata(long j) throws IOException {
|
||
|
C15111ghZ c15111ghZ = new C15111ghZ();
|
||
|
C15155gij c15155gij = this.metadata;
|
||
|
C14957gcv.e(c15155gij, "");
|
||
|
c15155gij.a(c15111ghZ, c15155gij.a());
|
||
|
RandomAccessFile randomAccessFile = this.file;
|
||
|
C14957gcv.e(randomAccessFile);
|
||
|
FileChannel channel = randomAccessFile.getChannel();
|
||
|
C14957gcv.c(channel, "");
|
||
|
new FileOperator(channel).write(j + FILE_HEADER_SIZE, c15111ghZ, this.metadata.a());
|
||
|
}
|
||
|
|
||
|
public final void commit(long j) throws IOException {
|
||
|
writeMetadata(j);
|
||
|
RandomAccessFile randomAccessFile = this.file;
|
||
|
C14957gcv.e(randomAccessFile);
|
||
|
randomAccessFile.getChannel().force(false);
|
||
|
writeHeader(PREFIX_CLEAN, j, this.metadata.a());
|
||
|
RandomAccessFile randomAccessFile2 = this.file;
|
||
|
C14957gcv.e(randomAccessFile2);
|
||
|
randomAccessFile2.getChannel().force(false);
|
||
|
synchronized (this) {
|
||
|
setComplete(true);
|
||
|
C14866gag c14866gag = C14866gag.c;
|
||
|
}
|
||
|
giD gid = this.upstream;
|
||
|
if (gid != null) {
|
||
|
Util.closeQuietly(gid);
|
||
|
}
|
||
|
this.upstream = null;
|
||
|
}
|
||
|
|
||
|
public final giD newSource() {
|
||
|
synchronized (this) {
|
||
|
if (getFile() == null) {
|
||
|
return null;
|
||
|
}
|
||
|
setSourceCount(getSourceCount() + 1);
|
||
|
return new RelaySource(this);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/* loaded from: classes6.dex */
|
||
|
public final class RelaySource implements giD {
|
||
|
private FileOperator fileOperator;
|
||
|
private long sourcePos;
|
||
|
final Relay this$0;
|
||
|
private final C15139giB timeout;
|
||
|
|
||
|
public RelaySource(Relay relay) {
|
||
|
C14957gcv.e(relay, "");
|
||
|
this.this$0 = relay;
|
||
|
this.timeout = new C15139giB();
|
||
|
RandomAccessFile file = relay.getFile();
|
||
|
C14957gcv.e(file);
|
||
|
FileChannel channel = file.getChannel();
|
||
|
C14957gcv.c(channel, "");
|
||
|
this.fileOperator = new FileOperator(channel);
|
||
|
}
|
||
|
|
||
|
@Override // o.giD
|
||
|
public final long read(C15111ghZ c15111ghZ, long j) throws IOException {
|
||
|
char c;
|
||
|
C14957gcv.e(c15111ghZ, "");
|
||
|
if (this.fileOperator == null) {
|
||
|
throw new IllegalStateException("Check failed.".toString());
|
||
|
}
|
||
|
Relay relay = this.this$0;
|
||
|
synchronized (relay) {
|
||
|
while (true) {
|
||
|
if (this.sourcePos == relay.getUpstreamPos()) {
|
||
|
if (!relay.getComplete()) {
|
||
|
if (relay.getUpstreamReader() == null) {
|
||
|
relay.setUpstreamReader(Thread.currentThread());
|
||
|
c = 1;
|
||
|
break;
|
||
|
}
|
||
|
this.timeout.waitUntilNotified(relay);
|
||
|
} else {
|
||
|
return -1L;
|
||
|
}
|
||
|
} else {
|
||
|
long upstreamPos = relay.getUpstreamPos() - relay.getBuffer().c;
|
||
|
if (this.sourcePos >= upstreamPos) {
|
||
|
long min = Math.min(j, relay.getUpstreamPos() - this.sourcePos);
|
||
|
relay.getBuffer().c(c15111ghZ, this.sourcePos - upstreamPos, min);
|
||
|
this.sourcePos += min;
|
||
|
return min;
|
||
|
}
|
||
|
c = 2;
|
||
|
}
|
||
|
}
|
||
|
if (c == 2) {
|
||
|
long min2 = Math.min(j, this.this$0.getUpstreamPos() - this.sourcePos);
|
||
|
FileOperator fileOperator = this.fileOperator;
|
||
|
C14957gcv.e(fileOperator);
|
||
|
fileOperator.read(this.sourcePos + Relay.FILE_HEADER_SIZE, c15111ghZ, min2);
|
||
|
this.sourcePos += min2;
|
||
|
return min2;
|
||
|
}
|
||
|
try {
|
||
|
giD upstream = this.this$0.getUpstream();
|
||
|
C14957gcv.e(upstream);
|
||
|
long read = upstream.read(this.this$0.getUpstreamBuffer(), this.this$0.getBufferMaxSize());
|
||
|
if (read == -1) {
|
||
|
Relay relay2 = this.this$0;
|
||
|
relay2.commit(relay2.getUpstreamPos());
|
||
|
Relay relay3 = this.this$0;
|
||
|
synchronized (relay3) {
|
||
|
relay3.setUpstreamReader(null);
|
||
|
relay3.notifyAll();
|
||
|
C14866gag c14866gag = C14866gag.c;
|
||
|
}
|
||
|
return -1L;
|
||
|
}
|
||
|
long min3 = Math.min(read, j);
|
||
|
this.this$0.getUpstreamBuffer().c(c15111ghZ, 0L, min3);
|
||
|
this.sourcePos += min3;
|
||
|
FileOperator fileOperator2 = this.fileOperator;
|
||
|
C14957gcv.e(fileOperator2);
|
||
|
fileOperator2.write(this.this$0.getUpstreamPos() + Relay.FILE_HEADER_SIZE, this.this$0.getUpstreamBuffer().clone(), read);
|
||
|
Relay relay4 = this.this$0;
|
||
|
synchronized (relay4) {
|
||
|
relay4.getBuffer().write(relay4.getUpstreamBuffer(), read);
|
||
|
if (relay4.getBuffer().c > relay4.getBufferMaxSize()) {
|
||
|
relay4.getBuffer().j(relay4.getBuffer().c - relay4.getBufferMaxSize());
|
||
|
}
|
||
|
relay4.setUpstreamPos(relay4.getUpstreamPos() + read);
|
||
|
C14866gag c14866gag2 = C14866gag.c;
|
||
|
}
|
||
|
Relay relay5 = this.this$0;
|
||
|
synchronized (relay5) {
|
||
|
relay5.setUpstreamReader(null);
|
||
|
relay5.notifyAll();
|
||
|
C14866gag c14866gag3 = C14866gag.c;
|
||
|
}
|
||
|
return min3;
|
||
|
} catch (Throwable th) {
|
||
|
Relay relay6 = this.this$0;
|
||
|
synchronized (relay6) {
|
||
|
relay6.setUpstreamReader(null);
|
||
|
relay6.notifyAll();
|
||
|
C14866gag c14866gag4 = C14866gag.c;
|
||
|
throw th;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@Override // o.giD, java.io.Closeable, java.lang.AutoCloseable
|
||
|
public final void close() throws IOException {
|
||
|
if (this.fileOperator == null) {
|
||
|
return;
|
||
|
}
|
||
|
RandomAccessFile randomAccessFile = null;
|
||
|
this.fileOperator = null;
|
||
|
Relay relay = this.this$0;
|
||
|
synchronized (relay) {
|
||
|
relay.setSourceCount(relay.getSourceCount() - 1);
|
||
|
if (relay.getSourceCount() == 0) {
|
||
|
RandomAccessFile file = relay.getFile();
|
||
|
relay.setFile(null);
|
||
|
randomAccessFile = file;
|
||
|
}
|
||
|
C14866gag c14866gag = C14866gag.c;
|
||
|
}
|
||
|
if (randomAccessFile != null) {
|
||
|
Util.closeQuietly(randomAccessFile);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@Override // o.giD
|
||
|
public final C15139giB timeout() {
|
||
|
return this.timeout;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/* loaded from: classes6.dex */
|
||
|
public static final class Companion {
|
||
|
private Companion() {
|
||
|
}
|
||
|
|
||
|
public final Relay edit(File file, giD gid, C15155gij c15155gij, long j) throws IOException {
|
||
|
C14957gcv.e(file, "");
|
||
|
C14957gcv.e(gid, "");
|
||
|
C14957gcv.e(c15155gij, "");
|
||
|
RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rw");
|
||
|
Relay relay = new Relay(randomAccessFile, gid, 0L, c15155gij, j, null);
|
||
|
randomAccessFile.setLength(0L);
|
||
|
relay.writeHeader(Relay.PREFIX_DIRTY, -1L, -1L);
|
||
|
return relay;
|
||
|
}
|
||
|
|
||
|
public final Relay read(File file) throws IOException {
|
||
|
C14957gcv.e(file, "");
|
||
|
RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rw");
|
||
|
FileChannel channel = randomAccessFile.getChannel();
|
||
|
C14957gcv.c(channel, "");
|
||
|
FileOperator fileOperator = new FileOperator(channel);
|
||
|
C15111ghZ c15111ghZ = new C15111ghZ();
|
||
|
fileOperator.read(0L, c15111ghZ, Relay.FILE_HEADER_SIZE);
|
||
|
if (!C14957gcv.b(c15111ghZ.c(Relay.PREFIX_CLEAN.a()), Relay.PREFIX_CLEAN)) {
|
||
|
throw new IOException("unreadable cache file");
|
||
|
}
|
||
|
long p = c15111ghZ.p();
|
||
|
long p2 = c15111ghZ.p();
|
||
|
C15111ghZ c15111ghZ2 = new C15111ghZ();
|
||
|
fileOperator.read(p + Relay.FILE_HEADER_SIZE, c15111ghZ2, p2);
|
||
|
return new Relay(randomAccessFile, null, p, c15111ghZ2.c(c15111ghZ2.c), 0L, null);
|
||
|
}
|
||
|
|
||
|
public /* synthetic */ Companion(C14953gcr c14953gcr) {
|
||
|
this();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static {
|
||
|
C15155gij.LWm lWm = C15155gij.c;
|
||
|
C14957gcv.e("OkHttp cache v1\n", "");
|
||
|
C14957gcv.e("OkHttp cache v1\n", "");
|
||
|
byte[] bytes = "OkHttp cache v1\n".getBytes(gdP.a);
|
||
|
C14957gcv.c(bytes, "");
|
||
|
C15155gij c15155gij = new C15155gij(bytes);
|
||
|
c15155gij.d = "OkHttp cache v1\n";
|
||
|
PREFIX_CLEAN = c15155gij;
|
||
|
C15155gij.LWm lWm2 = C15155gij.c;
|
||
|
C14957gcv.e("OkHttp DIRTY :(\n", "");
|
||
|
C14957gcv.e("OkHttp DIRTY :(\n", "");
|
||
|
byte[] bytes2 = "OkHttp DIRTY :(\n".getBytes(gdP.a);
|
||
|
C14957gcv.c(bytes2, "");
|
||
|
C15155gij c15155gij2 = new C15155gij(bytes2);
|
||
|
c15155gij2.d = "OkHttp DIRTY :(\n";
|
||
|
PREFIX_DIRTY = c15155gij2;
|
||
|
}
|
||
|
|
||
|
public final void setUpstreamReader(Thread thread) {
|
||
|
this.upstreamReader = thread;
|
||
|
}
|
||
|
|
||
|
public final void setUpstreamPos(long j) {
|
||
|
this.upstreamPos = j;
|
||
|
}
|
||
|
|
||
|
public final void setUpstream(giD gid) {
|
||
|
this.upstream = gid;
|
||
|
}
|
||
|
|
||
|
public final void setSourceCount(int i) {
|
||
|
this.sourceCount = i;
|
||
|
}
|
||
|
|
||
|
public final void setFile(RandomAccessFile randomAccessFile) {
|
||
|
this.file = randomAccessFile;
|
||
|
}
|
||
|
|
||
|
public final void setComplete(boolean z) {
|
||
|
this.complete = z;
|
||
|
}
|
||
|
|
||
|
public final C15155gij metadata() {
|
||
|
return this.metadata;
|
||
|
}
|
||
|
|
||
|
public final boolean isClosed() {
|
||
|
return this.file == null;
|
||
|
}
|
||
|
|
||
|
public final Thread getUpstreamReader() {
|
||
|
return this.upstreamReader;
|
||
|
}
|
||
|
|
||
|
public final long getUpstreamPos() {
|
||
|
return this.upstreamPos;
|
||
|
}
|
||
|
|
||
|
public final C15111ghZ getUpstreamBuffer() {
|
||
|
return this.upstreamBuffer;
|
||
|
}
|
||
|
|
||
|
public final giD getUpstream() {
|
||
|
return this.upstream;
|
||
|
}
|
||
|
|
||
|
public final int getSourceCount() {
|
||
|
return this.sourceCount;
|
||
|
}
|
||
|
|
||
|
public final RandomAccessFile getFile() {
|
||
|
return this.file;
|
||
|
}
|
||
|
|
||
|
public final boolean getComplete() {
|
||
|
return this.complete;
|
||
|
}
|
||
|
|
||
|
public final long getBufferMaxSize() {
|
||
|
return this.bufferMaxSize;
|
||
|
}
|
||
|
|
||
|
public final C15111ghZ getBuffer() {
|
||
|
return this.buffer;
|
||
|
}
|
||
|
|
||
|
public /* synthetic */ Relay(RandomAccessFile randomAccessFile, giD gid, long j, C15155gij c15155gij, long j2, C14953gcr c14953gcr) {
|
||
|
this(randomAccessFile, gid, j, c15155gij, j2);
|
||
|
}
|
||
|
}
|