1518 lines
60 KiB
Java
1518 lines
60 KiB
Java
|
package okhttp3.internal.http2;
|
||
|
|
||
|
import java.io.Closeable;
|
||
|
import java.io.IOException;
|
||
|
import java.io.InterruptedIOException;
|
||
|
import java.net.Socket;
|
||
|
import java.util.LinkedHashMap;
|
||
|
import java.util.LinkedHashSet;
|
||
|
import java.util.List;
|
||
|
import java.util.Map;
|
||
|
import java.util.Set;
|
||
|
import java.util.concurrent.TimeUnit;
|
||
|
import o.C14866gag;
|
||
|
import o.C14930gcM;
|
||
|
import o.C14953gcr;
|
||
|
import o.C14957gcv;
|
||
|
import o.C15111ghZ;
|
||
|
import o.C15155gij;
|
||
|
import o.C15160gio;
|
||
|
import o.InterfaceC14890gbN;
|
||
|
import o.InterfaceC15148gic;
|
||
|
import o.InterfaceC15149gid;
|
||
|
import okhttp3.internal.Util;
|
||
|
import okhttp3.internal.concurrent.Task;
|
||
|
import okhttp3.internal.concurrent.TaskQueue;
|
||
|
import okhttp3.internal.concurrent.TaskQueue$execute$1;
|
||
|
import okhttp3.internal.concurrent.TaskRunner;
|
||
|
import okhttp3.internal.http2.Http2Connection;
|
||
|
import okhttp3.internal.http2.Http2Reader;
|
||
|
import okhttp3.internal.platform.Platform;
|
||
|
|
||
|
/* loaded from: classes.dex */
|
||
|
public final class Http2Connection implements Closeable {
|
||
|
public static final int AWAIT_PING = 3;
|
||
|
public static final Companion Companion = new Companion(null);
|
||
|
private static final Settings DEFAULT_SETTINGS;
|
||
|
public static final int DEGRADED_PING = 2;
|
||
|
public static final int DEGRADED_PONG_TIMEOUT_NS = 1000000000;
|
||
|
public static final int INTERVAL_PING = 1;
|
||
|
public static final int OKHTTP_CLIENT_WINDOW_SIZE = 16777216;
|
||
|
private long awaitPingsSent;
|
||
|
private long awaitPongsReceived;
|
||
|
private final boolean client;
|
||
|
private final String connectionName;
|
||
|
private final Set<Integer> currentPushRequests;
|
||
|
private long degradedPingsSent;
|
||
|
private long degradedPongDeadlineNs;
|
||
|
private long degradedPongsReceived;
|
||
|
private long intervalPingsSent;
|
||
|
private long intervalPongsReceived;
|
||
|
private boolean isShutdown;
|
||
|
private int lastGoodStreamId;
|
||
|
private final Listener listener;
|
||
|
private int nextStreamId;
|
||
|
private final Settings okHttpSettings;
|
||
|
private Settings peerSettings;
|
||
|
private final PushObserver pushObserver;
|
||
|
private final TaskQueue pushQueue;
|
||
|
private long readBytesAcknowledged;
|
||
|
private long readBytesTotal;
|
||
|
private final ReaderRunnable readerRunnable;
|
||
|
private final TaskQueue settingsListenerQueue;
|
||
|
private final Socket socket;
|
||
|
private final Map<Integer, Http2Stream> streams;
|
||
|
private final TaskRunner taskRunner;
|
||
|
private long writeBytesMaximum;
|
||
|
private long writeBytesTotal;
|
||
|
private final Http2Writer writer;
|
||
|
private final TaskQueue writerQueue;
|
||
|
|
||
|
public final boolean pushedStream$okhttp(int i) {
|
||
|
return i != 0 && (i & 1) == 0;
|
||
|
}
|
||
|
|
||
|
public Http2Connection(Builder builder) {
|
||
|
C14957gcv.e(builder, "");
|
||
|
boolean client$okhttp = builder.getClient$okhttp();
|
||
|
this.client = client$okhttp;
|
||
|
this.listener = builder.getListener$okhttp();
|
||
|
this.streams = new LinkedHashMap();
|
||
|
String connectionName$okhttp = builder.getConnectionName$okhttp();
|
||
|
this.connectionName = connectionName$okhttp;
|
||
|
this.nextStreamId = builder.getClient$okhttp() ? 3 : 2;
|
||
|
TaskRunner taskRunner$okhttp = builder.getTaskRunner$okhttp();
|
||
|
this.taskRunner = taskRunner$okhttp;
|
||
|
TaskQueue newQueue = taskRunner$okhttp.newQueue();
|
||
|
this.writerQueue = newQueue;
|
||
|
this.pushQueue = taskRunner$okhttp.newQueue();
|
||
|
this.settingsListenerQueue = taskRunner$okhttp.newQueue();
|
||
|
this.pushObserver = builder.getPushObserver$okhttp();
|
||
|
Settings settings = new Settings();
|
||
|
if (builder.getClient$okhttp()) {
|
||
|
settings.set(7, OKHTTP_CLIENT_WINDOW_SIZE);
|
||
|
}
|
||
|
this.okHttpSettings = settings;
|
||
|
this.peerSettings = DEFAULT_SETTINGS;
|
||
|
this.writeBytesMaximum = r2.getInitialWindowSize();
|
||
|
this.socket = builder.getSocket$okhttp();
|
||
|
this.writer = new Http2Writer(builder.getSink$okhttp(), client$okhttp);
|
||
|
this.readerRunnable = new ReaderRunnable(this, new Http2Reader(builder.getSource$okhttp(), client$okhttp));
|
||
|
this.currentPushRequests = new LinkedHashSet();
|
||
|
if (builder.getPingIntervalMillis$okhttp() != 0) {
|
||
|
long nanos = TimeUnit.MILLISECONDS.toNanos(builder.getPingIntervalMillis$okhttp());
|
||
|
newQueue.schedule(new Task(C14957gcv.c(connectionName$okhttp, (Object) " ping"), this, nanos) { // from class: okhttp3.internal.http2.Http2Connection$special$$inlined$schedule$1
|
||
|
final String $name;
|
||
|
final long $pingIntervalNanos$inlined;
|
||
|
final Http2Connection this$0;
|
||
|
|
||
|
/* JADX WARN: 'super' call moved to the top of the method (can break code semantics) */
|
||
|
{
|
||
|
super(r1, false, 2, null);
|
||
|
this.$name = r1;
|
||
|
this.this$0 = this;
|
||
|
this.$pingIntervalNanos$inlined = nanos;
|
||
|
}
|
||
|
|
||
|
@Override // okhttp3.internal.concurrent.Task
|
||
|
public final long runOnce() {
|
||
|
long j;
|
||
|
long j2;
|
||
|
boolean z;
|
||
|
synchronized (this.this$0) {
|
||
|
long j3 = this.this$0.intervalPongsReceived;
|
||
|
j = this.this$0.intervalPingsSent;
|
||
|
if (j3 < j) {
|
||
|
z = true;
|
||
|
} else {
|
||
|
j2 = this.this$0.intervalPingsSent;
|
||
|
this.this$0.intervalPingsSent = j2 + 1;
|
||
|
z = false;
|
||
|
}
|
||
|
}
|
||
|
if (z) {
|
||
|
this.this$0.failConnection(null);
|
||
|
return -1L;
|
||
|
}
|
||
|
this.this$0.writePing(false, 1, 0);
|
||
|
return this.$pingIntervalNanos$inlined;
|
||
|
}
|
||
|
}, nanos);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public final int openStreamCount() {
|
||
|
int size;
|
||
|
synchronized (this) {
|
||
|
size = this.streams.size();
|
||
|
}
|
||
|
return size;
|
||
|
}
|
||
|
|
||
|
public final Http2Stream getStream(int i) {
|
||
|
Http2Stream http2Stream;
|
||
|
synchronized (this) {
|
||
|
http2Stream = this.streams.get(Integer.valueOf(i));
|
||
|
}
|
||
|
return http2Stream;
|
||
|
}
|
||
|
|
||
|
public final Http2Stream removeStream$okhttp(int i) {
|
||
|
Http2Stream remove;
|
||
|
synchronized (this) {
|
||
|
remove = this.streams.remove(Integer.valueOf(i));
|
||
|
notifyAll();
|
||
|
}
|
||
|
return remove;
|
||
|
}
|
||
|
|
||
|
public final void updateConnectionFlowControl$okhttp(long j) {
|
||
|
synchronized (this) {
|
||
|
long j2 = this.readBytesTotal + j;
|
||
|
this.readBytesTotal = j2;
|
||
|
long j3 = j2 - this.readBytesAcknowledged;
|
||
|
if (j3 >= this.okHttpSettings.getInitialWindowSize() / 2) {
|
||
|
writeWindowUpdateLater$okhttp(0, j3);
|
||
|
this.readBytesAcknowledged += j3;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public final Http2Stream pushStream(int i, List<Header> list, boolean z) throws IOException {
|
||
|
C14957gcv.e(list, "");
|
||
|
if (!(!this.client)) {
|
||
|
throw new IllegalStateException("Client cannot push requests.".toString());
|
||
|
}
|
||
|
return newStream(i, list, z);
|
||
|
}
|
||
|
|
||
|
public final Http2Stream newStream(List<Header> list, boolean z) throws IOException {
|
||
|
C14957gcv.e(list, "");
|
||
|
return newStream(0, list, z);
|
||
|
}
|
||
|
|
||
|
/* JADX WARN: Removed duplicated region for block: B:21:0x0055 A[Catch: all -> 0x0098, TryCatch #0 {, blocks: (B:6:0x0006, B:8:0x000f, B:9:0x0014, B:11:0x0018, B:13:0x0033, B:15:0x003f, B:19:0x004f, B:21:0x0055, B:22:0x0060, B:38:0x0092, B:39:0x0097), top: B:5:0x0006, outer: #1 }] */
|
||
|
/*
|
||
|
Code decompiled incorrectly, please refer to instructions dump.
|
||
|
To view partially-correct add '--show-bad-code' argument
|
||
|
*/
|
||
|
private final okhttp3.internal.http2.Http2Stream newStream(int r11, java.util.List<okhttp3.internal.http2.Header> r12, boolean r13) throws java.io.IOException {
|
||
|
/*
|
||
|
r10 = this;
|
||
|
r6 = r13 ^ 1
|
||
|
okhttp3.internal.http2.Http2Writer r7 = r10.writer
|
||
|
monitor-enter(r7)
|
||
|
monitor-enter(r10) // Catch: java.lang.Throwable -> L9b
|
||
|
int r0 = r10.getNextStreamId$okhttp() // Catch: java.lang.Throwable -> L98
|
||
|
r1 = 1073741823(0x3fffffff, float:1.9999999)
|
||
|
if (r0 <= r1) goto L14
|
||
|
okhttp3.internal.http2.ErrorCode r0 = okhttp3.internal.http2.ErrorCode.REFUSED_STREAM // Catch: java.lang.Throwable -> L98
|
||
|
r10.shutdown(r0) // Catch: java.lang.Throwable -> L98
|
||
|
L14:
|
||
|
boolean r0 = r10.isShutdown // Catch: java.lang.Throwable -> L98
|
||
|
if (r0 != 0) goto L92
|
||
|
int r8 = r10.getNextStreamId$okhttp() // Catch: java.lang.Throwable -> L98
|
||
|
int r0 = r10.getNextStreamId$okhttp() // Catch: java.lang.Throwable -> L98
|
||
|
int r0 = r0 + 2
|
||
|
r10.setNextStreamId$okhttp(r0) // Catch: java.lang.Throwable -> L98
|
||
|
okhttp3.internal.http2.Http2Stream r9 = new okhttp3.internal.http2.Http2Stream // Catch: java.lang.Throwable -> L98
|
||
|
r4 = 0
|
||
|
r5 = 0
|
||
|
r0 = r9
|
||
|
r1 = r8
|
||
|
r2 = r10
|
||
|
r3 = r6
|
||
|
r0.<init>(r1, r2, r3, r4, r5) // Catch: java.lang.Throwable -> L98
|
||
|
r0 = 1
|
||
|
if (r13 == 0) goto L4e
|
||
|
long r1 = r10.getWriteBytesTotal() // Catch: java.lang.Throwable -> L98
|
||
|
long r3 = r10.getWriteBytesMaximum() // Catch: java.lang.Throwable -> L98
|
||
|
int r13 = (r1 > r3 ? 1 : (r1 == r3 ? 0 : -1))
|
||
|
if (r13 >= 0) goto L4e
|
||
|
long r1 = r9.getWriteBytesTotal() // Catch: java.lang.Throwable -> L98
|
||
|
long r3 = r9.getWriteBytesMaximum() // Catch: java.lang.Throwable -> L98
|
||
|
int r13 = (r1 > r3 ? 1 : (r1 == r3 ? 0 : -1))
|
||
|
if (r13 < 0) goto L4c
|
||
|
goto L4e
|
||
|
L4c:
|
||
|
r13 = 0
|
||
|
goto L4f
|
||
|
L4e:
|
||
|
r13 = r0
|
||
|
L4f:
|
||
|
boolean r1 = r9.isOpen() // Catch: java.lang.Throwable -> L98
|
||
|
if (r1 == 0) goto L60
|
||
|
java.util.Map r1 = r10.getStreams$okhttp() // Catch: java.lang.Throwable -> L98
|
||
|
java.lang.Integer r2 = java.lang.Integer.valueOf(r8) // Catch: java.lang.Throwable -> L98
|
||
|
r1.put(r2, r9) // Catch: java.lang.Throwable -> L98
|
||
|
L60:
|
||
|
o.gag r1 = o.C14866gag.c // Catch: java.lang.Throwable -> L98
|
||
|
monitor-exit(r10)
|
||
|
if (r11 != 0) goto L6d
|
||
|
okhttp3.internal.http2.Http2Writer r11 = r10.getWriter() // Catch: java.lang.Throwable -> L9b
|
||
|
r11.headers(r6, r8, r12) // Catch: java.lang.Throwable -> L9b
|
||
|
goto L7b
|
||
|
L6d:
|
||
|
boolean r1 = r10.getClient$okhttp() // Catch: java.lang.Throwable -> L9b
|
||
|
r0 = r0 ^ r1
|
||
|
if (r0 == 0) goto L86
|
||
|
okhttp3.internal.http2.Http2Writer r0 = r10.getWriter() // Catch: java.lang.Throwable -> L9b
|
||
|
r0.pushPromise(r11, r8, r12) // Catch: java.lang.Throwable -> L9b
|
||
|
L7b:
|
||
|
o.gag r11 = o.C14866gag.c // Catch: java.lang.Throwable -> L9b
|
||
|
monitor-exit(r7)
|
||
|
if (r13 == 0) goto L85
|
||
|
okhttp3.internal.http2.Http2Writer r11 = r10.writer
|
||
|
r11.flush()
|
||
|
L85:
|
||
|
return r9
|
||
|
L86:
|
||
|
java.lang.IllegalArgumentException r11 = new java.lang.IllegalArgumentException // Catch: java.lang.Throwable -> L9b
|
||
|
java.lang.String r12 = "client streams shouldn't have associated stream IDs"
|
||
|
java.lang.String r12 = r12.toString() // Catch: java.lang.Throwable -> L9b
|
||
|
r11.<init>(r12) // Catch: java.lang.Throwable -> L9b
|
||
|
throw r11 // Catch: java.lang.Throwable -> L9b
|
||
|
L92:
|
||
|
okhttp3.internal.http2.ConnectionShutdownException r11 = new okhttp3.internal.http2.ConnectionShutdownException // Catch: java.lang.Throwable -> L98
|
||
|
r11.<init>() // Catch: java.lang.Throwable -> L98
|
||
|
throw r11 // Catch: java.lang.Throwable -> L98
|
||
|
L98:
|
||
|
r11 = move-exception
|
||
|
monitor-exit(r10) // Catch: java.lang.Throwable -> L9b
|
||
|
throw r11 // Catch: java.lang.Throwable -> L9b
|
||
|
L9b:
|
||
|
r11 = move-exception
|
||
|
monitor-exit(r7)
|
||
|
throw r11
|
||
|
*/
|
||
|
throw new UnsupportedOperationException("Method not decompiled: okhttp3.internal.http2.Http2Connection.newStream(int, java.util.List, boolean):okhttp3.internal.http2.Http2Stream");
|
||
|
}
|
||
|
|
||
|
public final void writeHeaders$okhttp(int i, boolean z, List<Header> list) throws IOException {
|
||
|
C14957gcv.e(list, "");
|
||
|
this.writer.headers(z, i, list);
|
||
|
}
|
||
|
|
||
|
public final void writeData(int i, boolean z, C15111ghZ c15111ghZ, long j) throws IOException {
|
||
|
int min;
|
||
|
long j2;
|
||
|
if (j == 0) {
|
||
|
this.writer.data(z, i, c15111ghZ, 0);
|
||
|
return;
|
||
|
}
|
||
|
while (j > 0) {
|
||
|
synchronized (this) {
|
||
|
while (getWriteBytesTotal() >= getWriteBytesMaximum()) {
|
||
|
try {
|
||
|
if (!getStreams$okhttp().containsKey(Integer.valueOf(i))) {
|
||
|
throw new IOException("stream closed");
|
||
|
}
|
||
|
wait();
|
||
|
} catch (InterruptedException unused) {
|
||
|
Thread.currentThread().interrupt();
|
||
|
throw new InterruptedIOException();
|
||
|
}
|
||
|
}
|
||
|
min = Math.min((int) Math.min(j, getWriteBytesMaximum() - getWriteBytesTotal()), getWriter().maxDataLength());
|
||
|
j2 = min;
|
||
|
this.writeBytesTotal = getWriteBytesTotal() + j2;
|
||
|
C14866gag c14866gag = C14866gag.c;
|
||
|
}
|
||
|
j -= j2;
|
||
|
this.writer.data(z && j == 0, i, c15111ghZ, min);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public final void writeSynResetLater$okhttp(int i, ErrorCode errorCode) {
|
||
|
C14957gcv.e(errorCode, "");
|
||
|
TaskQueue taskQueue = this.writerQueue;
|
||
|
StringBuilder sb = new StringBuilder();
|
||
|
sb.append(this.connectionName);
|
||
|
sb.append('[');
|
||
|
sb.append(i);
|
||
|
sb.append("] writeSynReset");
|
||
|
taskQueue.schedule(new Task(sb.toString(), true, this, i, errorCode) { // from class: okhttp3.internal.http2.Http2Connection$writeSynResetLater$$inlined$execute$default$1
|
||
|
final boolean $cancelable;
|
||
|
final ErrorCode $errorCode$inlined;
|
||
|
final String $name;
|
||
|
final int $streamId$inlined;
|
||
|
final Http2Connection this$0;
|
||
|
|
||
|
/* JADX WARN: 'super' call moved to the top of the method (can break code semantics) */
|
||
|
{
|
||
|
super(r1, r2);
|
||
|
this.$name = r1;
|
||
|
this.$cancelable = r2;
|
||
|
this.this$0 = this;
|
||
|
this.$streamId$inlined = i;
|
||
|
this.$errorCode$inlined = errorCode;
|
||
|
}
|
||
|
|
||
|
@Override // okhttp3.internal.concurrent.Task
|
||
|
public final long runOnce() {
|
||
|
try {
|
||
|
this.this$0.writeSynReset$okhttp(this.$streamId$inlined, this.$errorCode$inlined);
|
||
|
return -1L;
|
||
|
} catch (IOException e) {
|
||
|
this.this$0.failConnection(e);
|
||
|
return -1L;
|
||
|
}
|
||
|
}
|
||
|
}, 0L);
|
||
|
}
|
||
|
|
||
|
public final void writeSynReset$okhttp(int i, ErrorCode errorCode) throws IOException {
|
||
|
C14957gcv.e(errorCode, "");
|
||
|
this.writer.rstStream(i, errorCode);
|
||
|
}
|
||
|
|
||
|
public final void writeWindowUpdateLater$okhttp(int i, long j) {
|
||
|
TaskQueue taskQueue = this.writerQueue;
|
||
|
StringBuilder sb = new StringBuilder();
|
||
|
sb.append(this.connectionName);
|
||
|
sb.append('[');
|
||
|
sb.append(i);
|
||
|
sb.append("] windowUpdate");
|
||
|
taskQueue.schedule(new Task(sb.toString(), true, this, i, j) { // from class: okhttp3.internal.http2.Http2Connection$writeWindowUpdateLater$$inlined$execute$default$1
|
||
|
final boolean $cancelable;
|
||
|
final String $name;
|
||
|
final int $streamId$inlined;
|
||
|
final long $unacknowledgedBytesRead$inlined;
|
||
|
final Http2Connection this$0;
|
||
|
|
||
|
/* JADX WARN: 'super' call moved to the top of the method (can break code semantics) */
|
||
|
{
|
||
|
super(r1, r2);
|
||
|
this.$name = r1;
|
||
|
this.$cancelable = r2;
|
||
|
this.this$0 = this;
|
||
|
this.$streamId$inlined = i;
|
||
|
this.$unacknowledgedBytesRead$inlined = j;
|
||
|
}
|
||
|
|
||
|
@Override // okhttp3.internal.concurrent.Task
|
||
|
public final long runOnce() {
|
||
|
try {
|
||
|
this.this$0.getWriter().windowUpdate(this.$streamId$inlined, this.$unacknowledgedBytesRead$inlined);
|
||
|
return -1L;
|
||
|
} catch (IOException e) {
|
||
|
this.this$0.failConnection(e);
|
||
|
return -1L;
|
||
|
}
|
||
|
}
|
||
|
}, 0L);
|
||
|
}
|
||
|
|
||
|
public final void writePing(boolean z, int i, int i2) {
|
||
|
try {
|
||
|
this.writer.ping(z, i, i2);
|
||
|
} catch (IOException e) {
|
||
|
failConnection(e);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public final void writePingAndAwaitPong() throws InterruptedException {
|
||
|
writePing();
|
||
|
awaitPong();
|
||
|
}
|
||
|
|
||
|
public final void writePing() throws InterruptedException {
|
||
|
synchronized (this) {
|
||
|
this.awaitPingsSent++;
|
||
|
}
|
||
|
writePing(false, 3, 1330343787);
|
||
|
}
|
||
|
|
||
|
public final void flush() throws IOException {
|
||
|
this.writer.flush();
|
||
|
}
|
||
|
|
||
|
public final void shutdown(ErrorCode errorCode) throws IOException {
|
||
|
C14957gcv.e(errorCode, "");
|
||
|
synchronized (this.writer) {
|
||
|
C14930gcM.IeS ieS = new C14930gcM.IeS();
|
||
|
synchronized (this) {
|
||
|
if (this.isShutdown) {
|
||
|
return;
|
||
|
}
|
||
|
this.isShutdown = true;
|
||
|
ieS.b = getLastGoodStreamId$okhttp();
|
||
|
C14866gag c14866gag = C14866gag.c;
|
||
|
getWriter().goAway(ieS.b, errorCode, Util.EMPTY_BYTE_ARRAY);
|
||
|
C14866gag c14866gag2 = C14866gag.c;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@Override // java.io.Closeable, java.lang.AutoCloseable
|
||
|
public final void close() {
|
||
|
close$okhttp(ErrorCode.NO_ERROR, ErrorCode.CANCEL, null);
|
||
|
}
|
||
|
|
||
|
public final void failConnection(IOException iOException) {
|
||
|
ErrorCode errorCode = ErrorCode.PROTOCOL_ERROR;
|
||
|
close$okhttp(errorCode, errorCode, iOException);
|
||
|
}
|
||
|
|
||
|
public static /* synthetic */ void start$default(Http2Connection http2Connection, boolean z, TaskRunner taskRunner, int i, Object obj) throws IOException {
|
||
|
if ((i & 1) != 0) {
|
||
|
z = true;
|
||
|
}
|
||
|
if ((i & 2) != 0) {
|
||
|
taskRunner = TaskRunner.INSTANCE;
|
||
|
}
|
||
|
http2Connection.start(z, taskRunner);
|
||
|
}
|
||
|
|
||
|
public final void start(boolean z, TaskRunner taskRunner) throws IOException {
|
||
|
C14957gcv.e(taskRunner, "");
|
||
|
if (z) {
|
||
|
this.writer.connectionPreface();
|
||
|
this.writer.settings(this.okHttpSettings);
|
||
|
if (this.okHttpSettings.getInitialWindowSize() != 65535) {
|
||
|
this.writer.windowUpdate(0, r5 - 65535);
|
||
|
}
|
||
|
}
|
||
|
taskRunner.newQueue().schedule(new TaskQueue$execute$1(this.connectionName, true, this.readerRunnable), 0L);
|
||
|
}
|
||
|
|
||
|
public final void setSettings(Settings settings) throws IOException {
|
||
|
C14957gcv.e(settings, "");
|
||
|
synchronized (this.writer) {
|
||
|
synchronized (this) {
|
||
|
if (this.isShutdown) {
|
||
|
throw new ConnectionShutdownException();
|
||
|
}
|
||
|
getOkHttpSettings().merge(settings);
|
||
|
C14866gag c14866gag = C14866gag.c;
|
||
|
}
|
||
|
getWriter().settings(settings);
|
||
|
C14866gag c14866gag2 = C14866gag.c;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public final boolean isHealthy(long j) {
|
||
|
synchronized (this) {
|
||
|
if (this.isShutdown) {
|
||
|
return false;
|
||
|
}
|
||
|
if (this.degradedPongsReceived < this.degradedPingsSent) {
|
||
|
if (j >= this.degradedPongDeadlineNs) {
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public final void sendDegradedPingLater$okhttp() {
|
||
|
synchronized (this) {
|
||
|
long j = this.degradedPongsReceived;
|
||
|
long j2 = this.degradedPingsSent;
|
||
|
if (j < j2) {
|
||
|
return;
|
||
|
}
|
||
|
this.degradedPingsSent = j2 + 1;
|
||
|
this.degradedPongDeadlineNs = System.nanoTime() + 1000000000;
|
||
|
C14866gag c14866gag = C14866gag.c;
|
||
|
this.writerQueue.schedule(new Task(C14957gcv.c(this.connectionName, (Object) " ping"), true, this) { // from class: okhttp3.internal.http2.Http2Connection$sendDegradedPingLater$$inlined$execute$default$1
|
||
|
final boolean $cancelable;
|
||
|
final String $name;
|
||
|
final Http2Connection this$0;
|
||
|
|
||
|
/* JADX WARN: 'super' call moved to the top of the method (can break code semantics) */
|
||
|
{
|
||
|
super(r1, r2);
|
||
|
this.$name = r1;
|
||
|
this.$cancelable = r2;
|
||
|
this.this$0 = this;
|
||
|
}
|
||
|
|
||
|
@Override // okhttp3.internal.concurrent.Task
|
||
|
public final long runOnce() {
|
||
|
this.this$0.writePing(false, 2, 0);
|
||
|
return -1L;
|
||
|
}
|
||
|
}, 0L);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/* loaded from: classes.dex */
|
||
|
public static final class Builder {
|
||
|
private boolean client;
|
||
|
public String connectionName;
|
||
|
private Listener listener;
|
||
|
private int pingIntervalMillis;
|
||
|
private PushObserver pushObserver;
|
||
|
public InterfaceC15148gic sink;
|
||
|
public Socket socket;
|
||
|
public InterfaceC15149gid source;
|
||
|
private final TaskRunner taskRunner;
|
||
|
|
||
|
public Builder(boolean z, TaskRunner taskRunner) {
|
||
|
C14957gcv.e(taskRunner, "");
|
||
|
this.client = z;
|
||
|
this.taskRunner = taskRunner;
|
||
|
this.listener = Listener.REFUSE_INCOMING_STREAMS;
|
||
|
this.pushObserver = PushObserver.CANCEL;
|
||
|
}
|
||
|
|
||
|
public final Socket getSocket$okhttp() {
|
||
|
Socket socket = this.socket;
|
||
|
if (socket != null) {
|
||
|
return socket;
|
||
|
}
|
||
|
C14957gcv.a("");
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
public final String getConnectionName$okhttp() {
|
||
|
String str = this.connectionName;
|
||
|
if (str != null) {
|
||
|
return str;
|
||
|
}
|
||
|
C14957gcv.a("");
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
public final InterfaceC15149gid getSource$okhttp() {
|
||
|
InterfaceC15149gid interfaceC15149gid = this.source;
|
||
|
if (interfaceC15149gid != null) {
|
||
|
return interfaceC15149gid;
|
||
|
}
|
||
|
C14957gcv.a("");
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
public final InterfaceC15148gic getSink$okhttp() {
|
||
|
InterfaceC15148gic interfaceC15148gic = this.sink;
|
||
|
if (interfaceC15148gic != null) {
|
||
|
return interfaceC15148gic;
|
||
|
}
|
||
|
C14957gcv.a("");
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
public static /* synthetic */ Builder socket$default(Builder builder, Socket socket, String str, InterfaceC15149gid interfaceC15149gid, InterfaceC15148gic interfaceC15148gic, int i, Object obj) throws IOException {
|
||
|
if ((i & 2) != 0) {
|
||
|
str = Util.peerName(socket);
|
||
|
}
|
||
|
if ((i & 4) != 0) {
|
||
|
interfaceC15149gid = C15160gio.c(C15160gio.e(socket));
|
||
|
}
|
||
|
if ((i & 8) != 0) {
|
||
|
interfaceC15148gic = C15160gio.c(C15160gio.c(socket));
|
||
|
}
|
||
|
return builder.socket(socket, str, interfaceC15149gid, interfaceC15148gic);
|
||
|
}
|
||
|
|
||
|
public final Builder socket(Socket socket, String str, InterfaceC15149gid interfaceC15149gid, InterfaceC15148gic interfaceC15148gic) throws IOException {
|
||
|
String c;
|
||
|
C14957gcv.e(socket, "");
|
||
|
C14957gcv.e(str, "");
|
||
|
C14957gcv.e(interfaceC15149gid, "");
|
||
|
C14957gcv.e(interfaceC15148gic, "");
|
||
|
setSocket$okhttp(socket);
|
||
|
if (getClient$okhttp()) {
|
||
|
StringBuilder sb = new StringBuilder();
|
||
|
sb.append(Util.okHttpName);
|
||
|
sb.append(' ');
|
||
|
sb.append(str);
|
||
|
c = sb.toString();
|
||
|
} else {
|
||
|
c = C14957gcv.c("MockWebServer ", (Object) str);
|
||
|
}
|
||
|
setConnectionName$okhttp(c);
|
||
|
setSource$okhttp(interfaceC15149gid);
|
||
|
setSink$okhttp(interfaceC15148gic);
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
public final Builder listener(Listener listener) {
|
||
|
C14957gcv.e(listener, "");
|
||
|
setListener$okhttp(listener);
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
public final Builder pushObserver(PushObserver pushObserver) {
|
||
|
C14957gcv.e(pushObserver, "");
|
||
|
setPushObserver$okhttp(pushObserver);
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
public final Builder pingIntervalMillis(int i) {
|
||
|
setPingIntervalMillis$okhttp(i);
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
public final Http2Connection build() {
|
||
|
return new Http2Connection(this);
|
||
|
}
|
||
|
|
||
|
public final Builder socket(Socket socket, String str, InterfaceC15149gid interfaceC15149gid) throws IOException {
|
||
|
C14957gcv.e(socket, "");
|
||
|
C14957gcv.e(str, "");
|
||
|
C14957gcv.e(interfaceC15149gid, "");
|
||
|
return socket$default(this, socket, str, interfaceC15149gid, null, 8, null);
|
||
|
}
|
||
|
|
||
|
public final Builder socket(Socket socket, String str) throws IOException {
|
||
|
C14957gcv.e(socket, "");
|
||
|
C14957gcv.e(str, "");
|
||
|
return socket$default(this, socket, str, null, null, 12, null);
|
||
|
}
|
||
|
|
||
|
public final Builder socket(Socket socket) throws IOException {
|
||
|
C14957gcv.e(socket, "");
|
||
|
return socket$default(this, socket, null, null, null, 14, null);
|
||
|
}
|
||
|
|
||
|
public final void setSource$okhttp(InterfaceC15149gid interfaceC15149gid) {
|
||
|
C14957gcv.e(interfaceC15149gid, "");
|
||
|
this.source = interfaceC15149gid;
|
||
|
}
|
||
|
|
||
|
public final void setSocket$okhttp(Socket socket) {
|
||
|
C14957gcv.e(socket, "");
|
||
|
this.socket = socket;
|
||
|
}
|
||
|
|
||
|
public final void setSink$okhttp(InterfaceC15148gic interfaceC15148gic) {
|
||
|
C14957gcv.e(interfaceC15148gic, "");
|
||
|
this.sink = interfaceC15148gic;
|
||
|
}
|
||
|
|
||
|
public final void setPushObserver$okhttp(PushObserver pushObserver) {
|
||
|
C14957gcv.e(pushObserver, "");
|
||
|
this.pushObserver = pushObserver;
|
||
|
}
|
||
|
|
||
|
public final void setPingIntervalMillis$okhttp(int i) {
|
||
|
this.pingIntervalMillis = i;
|
||
|
}
|
||
|
|
||
|
public final void setListener$okhttp(Listener listener) {
|
||
|
C14957gcv.e(listener, "");
|
||
|
this.listener = listener;
|
||
|
}
|
||
|
|
||
|
public final void setConnectionName$okhttp(String str) {
|
||
|
C14957gcv.e(str, "");
|
||
|
this.connectionName = str;
|
||
|
}
|
||
|
|
||
|
public final void setClient$okhttp(boolean z) {
|
||
|
this.client = z;
|
||
|
}
|
||
|
|
||
|
public final TaskRunner getTaskRunner$okhttp() {
|
||
|
return this.taskRunner;
|
||
|
}
|
||
|
|
||
|
public final PushObserver getPushObserver$okhttp() {
|
||
|
return this.pushObserver;
|
||
|
}
|
||
|
|
||
|
public final int getPingIntervalMillis$okhttp() {
|
||
|
return this.pingIntervalMillis;
|
||
|
}
|
||
|
|
||
|
public final Listener getListener$okhttp() {
|
||
|
return this.listener;
|
||
|
}
|
||
|
|
||
|
public final boolean getClient$okhttp() {
|
||
|
return this.client;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/* loaded from: classes.dex */
|
||
|
public final class ReaderRunnable implements Http2Reader.Handler, InterfaceC14890gbN<C14866gag> {
|
||
|
private final Http2Reader reader;
|
||
|
final Http2Connection this$0;
|
||
|
|
||
|
@Override // okhttp3.internal.http2.Http2Reader.Handler
|
||
|
public final void ackSettings() {
|
||
|
}
|
||
|
|
||
|
@Override // okhttp3.internal.http2.Http2Reader.Handler
|
||
|
public final void priority(int i, int i2, int i3, boolean z) {
|
||
|
}
|
||
|
|
||
|
public ReaderRunnable(Http2Connection http2Connection, Http2Reader http2Reader) {
|
||
|
C14957gcv.e(http2Connection, "");
|
||
|
C14957gcv.e(http2Reader, "");
|
||
|
this.this$0 = http2Connection;
|
||
|
this.reader = http2Reader;
|
||
|
}
|
||
|
|
||
|
@Override // o.InterfaceC14890gbN
|
||
|
public final /* bridge */ /* synthetic */ C14866gag invoke() {
|
||
|
invoke2();
|
||
|
return C14866gag.c;
|
||
|
}
|
||
|
|
||
|
/* renamed from: invoke */
|
||
|
public final void invoke2() {
|
||
|
ErrorCode errorCode;
|
||
|
ErrorCode errorCode2 = ErrorCode.INTERNAL_ERROR;
|
||
|
ErrorCode errorCode3 = ErrorCode.INTERNAL_ERROR;
|
||
|
IOException e = null;
|
||
|
try {
|
||
|
try {
|
||
|
this.reader.readConnectionPreface(this);
|
||
|
do {
|
||
|
} while (this.reader.nextFrame(false, this));
|
||
|
errorCode2 = ErrorCode.NO_ERROR;
|
||
|
errorCode = ErrorCode.CANCEL;
|
||
|
} catch (IOException e2) {
|
||
|
e = e2;
|
||
|
errorCode2 = ErrorCode.PROTOCOL_ERROR;
|
||
|
errorCode = ErrorCode.PROTOCOL_ERROR;
|
||
|
}
|
||
|
this.this$0.close$okhttp(errorCode2, errorCode, e);
|
||
|
Util.closeQuietly(this.reader);
|
||
|
} catch (Throwable th) {
|
||
|
this.this$0.close$okhttp(errorCode2, errorCode3, e);
|
||
|
Util.closeQuietly(this.reader);
|
||
|
throw th;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@Override // okhttp3.internal.http2.Http2Reader.Handler
|
||
|
public final void data(boolean z, int i, InterfaceC15149gid interfaceC15149gid, int i2) throws IOException {
|
||
|
C14957gcv.e(interfaceC15149gid, "");
|
||
|
if (this.this$0.pushedStream$okhttp(i)) {
|
||
|
this.this$0.pushDataLater$okhttp(i, interfaceC15149gid, i2, z);
|
||
|
return;
|
||
|
}
|
||
|
Http2Stream stream = this.this$0.getStream(i);
|
||
|
if (stream == null) {
|
||
|
this.this$0.writeSynResetLater$okhttp(i, ErrorCode.PROTOCOL_ERROR);
|
||
|
long j = i2;
|
||
|
this.this$0.updateConnectionFlowControl$okhttp(j);
|
||
|
interfaceC15149gid.j(j);
|
||
|
return;
|
||
|
}
|
||
|
stream.receiveData(interfaceC15149gid, i2);
|
||
|
if (z) {
|
||
|
stream.receiveHeaders(Util.EMPTY_HEADERS, true);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@Override // okhttp3.internal.http2.Http2Reader.Handler
|
||
|
public final void headers(boolean z, int i, int i2, List<Header> list) {
|
||
|
C14957gcv.e(list, "");
|
||
|
if (this.this$0.pushedStream$okhttp(i)) {
|
||
|
this.this$0.pushHeadersLater$okhttp(i, list, z);
|
||
|
return;
|
||
|
}
|
||
|
Http2Connection http2Connection = this.this$0;
|
||
|
synchronized (http2Connection) {
|
||
|
Http2Stream stream = http2Connection.getStream(i);
|
||
|
if (stream == null) {
|
||
|
if (http2Connection.isShutdown) {
|
||
|
return;
|
||
|
}
|
||
|
if (i <= http2Connection.getLastGoodStreamId$okhttp()) {
|
||
|
return;
|
||
|
}
|
||
|
if (i % 2 == http2Connection.getNextStreamId$okhttp() % 2) {
|
||
|
return;
|
||
|
}
|
||
|
Http2Stream http2Stream = new Http2Stream(i, http2Connection, false, z, Util.toHeaders(list));
|
||
|
http2Connection.setLastGoodStreamId$okhttp(i);
|
||
|
http2Connection.getStreams$okhttp().put(Integer.valueOf(i), http2Stream);
|
||
|
TaskQueue newQueue = http2Connection.taskRunner.newQueue();
|
||
|
StringBuilder sb = new StringBuilder();
|
||
|
sb.append(http2Connection.getConnectionName$okhttp());
|
||
|
sb.append('[');
|
||
|
sb.append(i);
|
||
|
sb.append("] onStream");
|
||
|
newQueue.schedule(new Task(sb.toString(), true, http2Connection, http2Stream) { // from class: okhttp3.internal.http2.Http2Connection$ReaderRunnable$headers$lambda-2$$inlined$execute$default$1
|
||
|
final boolean $cancelable;
|
||
|
final String $name;
|
||
|
final Http2Stream $newStream$inlined;
|
||
|
final Http2Connection this$0;
|
||
|
|
||
|
/* JADX WARN: 'super' call moved to the top of the method (can break code semantics) */
|
||
|
{
|
||
|
super(r1, r2);
|
||
|
this.$name = r1;
|
||
|
this.$cancelable = r2;
|
||
|
this.this$0 = http2Connection;
|
||
|
this.$newStream$inlined = http2Stream;
|
||
|
}
|
||
|
|
||
|
@Override // okhttp3.internal.concurrent.Task
|
||
|
public final long runOnce() {
|
||
|
try {
|
||
|
this.this$0.getListener$okhttp().onStream(this.$newStream$inlined);
|
||
|
return -1L;
|
||
|
} catch (IOException e) {
|
||
|
Platform.Companion.get().log(C14957gcv.c("Http2Connection.Listener failure for ", (Object) this.this$0.getConnectionName$okhttp()), 4, e);
|
||
|
try {
|
||
|
this.$newStream$inlined.close(ErrorCode.PROTOCOL_ERROR, e);
|
||
|
return -1L;
|
||
|
} catch (IOException unused) {
|
||
|
return -1L;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}, 0L);
|
||
|
return;
|
||
|
}
|
||
|
C14866gag c14866gag = C14866gag.c;
|
||
|
stream.receiveHeaders(Util.toHeaders(list), z);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@Override // okhttp3.internal.http2.Http2Reader.Handler
|
||
|
public final void rstStream(int i, ErrorCode errorCode) {
|
||
|
C14957gcv.e(errorCode, "");
|
||
|
if (this.this$0.pushedStream$okhttp(i)) {
|
||
|
this.this$0.pushResetLater$okhttp(i, errorCode);
|
||
|
return;
|
||
|
}
|
||
|
Http2Stream removeStream$okhttp = this.this$0.removeStream$okhttp(i);
|
||
|
if (removeStream$okhttp != null) {
|
||
|
removeStream$okhttp.receiveRstStream(errorCode);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@Override // okhttp3.internal.http2.Http2Reader.Handler
|
||
|
public final void settings(boolean z, Settings settings) {
|
||
|
C14957gcv.e(settings, "");
|
||
|
this.this$0.writerQueue.schedule(new Task(C14957gcv.c(this.this$0.getConnectionName$okhttp(), (Object) " applyAndAckSettings"), true, this, z, settings) { // from class: okhttp3.internal.http2.Http2Connection$ReaderRunnable$settings$$inlined$execute$default$1
|
||
|
final boolean $cancelable;
|
||
|
final boolean $clearPrevious$inlined;
|
||
|
final String $name;
|
||
|
final Settings $settings$inlined;
|
||
|
final Http2Connection.ReaderRunnable this$0;
|
||
|
|
||
|
/* JADX WARN: 'super' call moved to the top of the method (can break code semantics) */
|
||
|
{
|
||
|
super(r1, r2);
|
||
|
this.$name = r1;
|
||
|
this.$cancelable = r2;
|
||
|
this.this$0 = this;
|
||
|
this.$clearPrevious$inlined = z;
|
||
|
this.$settings$inlined = settings;
|
||
|
}
|
||
|
|
||
|
@Override // okhttp3.internal.concurrent.Task
|
||
|
public final long runOnce() {
|
||
|
this.this$0.applyAndAckSettings(this.$clearPrevious$inlined, this.$settings$inlined);
|
||
|
return -1L;
|
||
|
}
|
||
|
}, 0L);
|
||
|
}
|
||
|
|
||
|
/* JADX WARN: Multi-variable type inference failed */
|
||
|
public final void applyAndAckSettings(boolean z, Settings settings) {
|
||
|
long initialWindowSize;
|
||
|
int i;
|
||
|
Http2Stream[] http2StreamArr;
|
||
|
C14957gcv.e(settings, "");
|
||
|
C14930gcM.RVV rvv = new C14930gcM.RVV();
|
||
|
Http2Writer writer = this.this$0.getWriter();
|
||
|
Http2Connection http2Connection = this.this$0;
|
||
|
synchronized (writer) {
|
||
|
synchronized (http2Connection) {
|
||
|
Settings peerSettings = http2Connection.getPeerSettings();
|
||
|
T t = settings;
|
||
|
if (!z) {
|
||
|
Settings settings2 = new Settings();
|
||
|
settings2.merge(peerSettings);
|
||
|
settings2.merge(settings);
|
||
|
t = settings2;
|
||
|
}
|
||
|
rvv.d = t;
|
||
|
initialWindowSize = ((Settings) rvv.d).getInitialWindowSize() - peerSettings.getInitialWindowSize();
|
||
|
i = 0;
|
||
|
if (initialWindowSize != 0 && !http2Connection.getStreams$okhttp().isEmpty()) {
|
||
|
Object[] array = http2Connection.getStreams$okhttp().values().toArray(new Http2Stream[0]);
|
||
|
if (array == null) {
|
||
|
throw new NullPointerException("null cannot be cast to non-null type kotlin.Array<T of kotlin.collections.ArraysKt__ArraysJVMKt.toTypedArray>");
|
||
|
}
|
||
|
http2StreamArr = (Http2Stream[]) array;
|
||
|
http2Connection.setPeerSettings((Settings) rvv.d);
|
||
|
http2Connection.settingsListenerQueue.schedule(new Task(C14957gcv.c(http2Connection.getConnectionName$okhttp(), (Object) " onSettings"), true, http2Connection, rvv) { // from class: okhttp3.internal.http2.Http2Connection$ReaderRunnable$applyAndAckSettings$lambda-7$lambda-6$$inlined$execute$default$1
|
||
|
final boolean $cancelable;
|
||
|
final String $name;
|
||
|
final C14930gcM.RVV $newPeerSettings$inlined;
|
||
|
final Http2Connection this$0;
|
||
|
|
||
|
/* JADX WARN: 'super' call moved to the top of the method (can break code semantics) */
|
||
|
{
|
||
|
super(r1, r2);
|
||
|
this.$name = r1;
|
||
|
this.$cancelable = r2;
|
||
|
this.this$0 = http2Connection;
|
||
|
this.$newPeerSettings$inlined = rvv;
|
||
|
}
|
||
|
|
||
|
/* JADX WARN: Multi-variable type inference failed */
|
||
|
@Override // okhttp3.internal.concurrent.Task
|
||
|
public final long runOnce() {
|
||
|
this.this$0.getListener$okhttp().onSettings(this.this$0, (Settings) this.$newPeerSettings$inlined.d);
|
||
|
return -1L;
|
||
|
}
|
||
|
}, 0L);
|
||
|
C14866gag c14866gag = C14866gag.c;
|
||
|
}
|
||
|
http2StreamArr = null;
|
||
|
http2Connection.setPeerSettings((Settings) rvv.d);
|
||
|
http2Connection.settingsListenerQueue.schedule(new Task(C14957gcv.c(http2Connection.getConnectionName$okhttp(), (Object) " onSettings"), true, http2Connection, rvv) { // from class: okhttp3.internal.http2.Http2Connection$ReaderRunnable$applyAndAckSettings$lambda-7$lambda-6$$inlined$execute$default$1
|
||
|
final boolean $cancelable;
|
||
|
final String $name;
|
||
|
final C14930gcM.RVV $newPeerSettings$inlined;
|
||
|
final Http2Connection this$0;
|
||
|
|
||
|
/* JADX WARN: 'super' call moved to the top of the method (can break code semantics) */
|
||
|
{
|
||
|
super(r1, r2);
|
||
|
this.$name = r1;
|
||
|
this.$cancelable = r2;
|
||
|
this.this$0 = http2Connection;
|
||
|
this.$newPeerSettings$inlined = rvv;
|
||
|
}
|
||
|
|
||
|
/* JADX WARN: Multi-variable type inference failed */
|
||
|
@Override // okhttp3.internal.concurrent.Task
|
||
|
public final long runOnce() {
|
||
|
this.this$0.getListener$okhttp().onSettings(this.this$0, (Settings) this.$newPeerSettings$inlined.d);
|
||
|
return -1L;
|
||
|
}
|
||
|
}, 0L);
|
||
|
C14866gag c14866gag2 = C14866gag.c;
|
||
|
}
|
||
|
try {
|
||
|
http2Connection.getWriter().applyAndAckSettings((Settings) rvv.d);
|
||
|
} catch (IOException e) {
|
||
|
http2Connection.failConnection(e);
|
||
|
}
|
||
|
C14866gag c14866gag3 = C14866gag.c;
|
||
|
}
|
||
|
if (http2StreamArr != null) {
|
||
|
int length = http2StreamArr.length;
|
||
|
while (i < length) {
|
||
|
Http2Stream http2Stream = http2StreamArr[i];
|
||
|
i++;
|
||
|
synchronized (http2Stream) {
|
||
|
http2Stream.addBytesToWriteWindow(initialWindowSize);
|
||
|
C14866gag c14866gag4 = C14866gag.c;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@Override // okhttp3.internal.http2.Http2Reader.Handler
|
||
|
public final void ping(boolean z, int i, int i2) {
|
||
|
if (z) {
|
||
|
Http2Connection http2Connection = this.this$0;
|
||
|
synchronized (http2Connection) {
|
||
|
if (i == 1) {
|
||
|
http2Connection.intervalPongsReceived++;
|
||
|
} else if (i != 2) {
|
||
|
if (i == 3) {
|
||
|
http2Connection.awaitPongsReceived++;
|
||
|
http2Connection.notifyAll();
|
||
|
}
|
||
|
C14866gag c14866gag = C14866gag.c;
|
||
|
} else {
|
||
|
http2Connection.degradedPongsReceived++;
|
||
|
}
|
||
|
}
|
||
|
return;
|
||
|
}
|
||
|
this.this$0.writerQueue.schedule(new Task(C14957gcv.c(this.this$0.getConnectionName$okhttp(), (Object) " ping"), true, this.this$0, i, i2) { // from class: okhttp3.internal.http2.Http2Connection$ReaderRunnable$ping$$inlined$execute$default$1
|
||
|
final boolean $cancelable;
|
||
|
final String $name;
|
||
|
final int $payload1$inlined;
|
||
|
final int $payload2$inlined;
|
||
|
final Http2Connection this$0;
|
||
|
|
||
|
/* JADX WARN: 'super' call moved to the top of the method (can break code semantics) */
|
||
|
{
|
||
|
super(r1, r2);
|
||
|
this.$name = r1;
|
||
|
this.$cancelable = r2;
|
||
|
this.this$0 = r3;
|
||
|
this.$payload1$inlined = i;
|
||
|
this.$payload2$inlined = i2;
|
||
|
}
|
||
|
|
||
|
@Override // okhttp3.internal.concurrent.Task
|
||
|
public final long runOnce() {
|
||
|
this.this$0.writePing(true, this.$payload1$inlined, this.$payload2$inlined);
|
||
|
return -1L;
|
||
|
}
|
||
|
}, 0L);
|
||
|
}
|
||
|
|
||
|
@Override // okhttp3.internal.http2.Http2Reader.Handler
|
||
|
public final void windowUpdate(int i, long j) {
|
||
|
if (i == 0) {
|
||
|
Http2Connection http2Connection = this.this$0;
|
||
|
synchronized (http2Connection) {
|
||
|
http2Connection.writeBytesMaximum = http2Connection.getWriteBytesMaximum() + j;
|
||
|
http2Connection.notifyAll();
|
||
|
C14866gag c14866gag = C14866gag.c;
|
||
|
}
|
||
|
return;
|
||
|
}
|
||
|
Http2Stream stream = this.this$0.getStream(i);
|
||
|
if (stream != null) {
|
||
|
synchronized (stream) {
|
||
|
stream.addBytesToWriteWindow(j);
|
||
|
C14866gag c14866gag2 = C14866gag.c;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@Override // okhttp3.internal.http2.Http2Reader.Handler
|
||
|
public final void pushPromise(int i, int i2, List<Header> list) {
|
||
|
C14957gcv.e(list, "");
|
||
|
this.this$0.pushRequestLater$okhttp(i2, list);
|
||
|
}
|
||
|
|
||
|
@Override // okhttp3.internal.http2.Http2Reader.Handler
|
||
|
public final void goAway(int i, ErrorCode errorCode, C15155gij c15155gij) {
|
||
|
int i2;
|
||
|
Object[] array;
|
||
|
C14957gcv.e(errorCode, "");
|
||
|
C14957gcv.e(c15155gij, "");
|
||
|
c15155gij.a();
|
||
|
Http2Connection http2Connection = this.this$0;
|
||
|
synchronized (http2Connection) {
|
||
|
i2 = 0;
|
||
|
array = http2Connection.getStreams$okhttp().values().toArray(new Http2Stream[0]);
|
||
|
if (array != null) {
|
||
|
http2Connection.isShutdown = true;
|
||
|
C14866gag c14866gag = C14866gag.c;
|
||
|
} else {
|
||
|
throw new NullPointerException("null cannot be cast to non-null type kotlin.Array<T of kotlin.collections.ArraysKt__ArraysJVMKt.toTypedArray>");
|
||
|
}
|
||
|
}
|
||
|
Http2Stream[] http2StreamArr = (Http2Stream[]) array;
|
||
|
int length = http2StreamArr.length;
|
||
|
while (i2 < length) {
|
||
|
Http2Stream http2Stream = http2StreamArr[i2];
|
||
|
i2++;
|
||
|
if (http2Stream.getId() > i && http2Stream.isLocallyInitiated()) {
|
||
|
http2Stream.receiveRstStream(ErrorCode.REFUSED_STREAM);
|
||
|
this.this$0.removeStream$okhttp(http2Stream.getId());
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public final Http2Reader getReader$okhttp() {
|
||
|
return this.reader;
|
||
|
}
|
||
|
|
||
|
@Override // okhttp3.internal.http2.Http2Reader.Handler
|
||
|
public final void alternateService(int i, String str, C15155gij c15155gij, String str2, int i2, long j) {
|
||
|
C14957gcv.e(str, "");
|
||
|
C14957gcv.e(c15155gij, "");
|
||
|
C14957gcv.e(str2, "");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public final void pushRequestLater$okhttp(int i, List<Header> list) {
|
||
|
C14957gcv.e(list, "");
|
||
|
synchronized (this) {
|
||
|
if (this.currentPushRequests.contains(Integer.valueOf(i))) {
|
||
|
writeSynResetLater$okhttp(i, ErrorCode.PROTOCOL_ERROR);
|
||
|
return;
|
||
|
}
|
||
|
this.currentPushRequests.add(Integer.valueOf(i));
|
||
|
TaskQueue taskQueue = this.pushQueue;
|
||
|
StringBuilder sb = new StringBuilder();
|
||
|
sb.append(this.connectionName);
|
||
|
sb.append('[');
|
||
|
sb.append(i);
|
||
|
sb.append("] onRequest");
|
||
|
taskQueue.schedule(new Task(sb.toString(), true, this, i, list) { // from class: okhttp3.internal.http2.Http2Connection$pushRequestLater$$inlined$execute$default$1
|
||
|
final boolean $cancelable;
|
||
|
final String $name;
|
||
|
final List $requestHeaders$inlined;
|
||
|
final int $streamId$inlined;
|
||
|
final Http2Connection this$0;
|
||
|
|
||
|
/* JADX WARN: 'super' call moved to the top of the method (can break code semantics) */
|
||
|
{
|
||
|
super(r1, r2);
|
||
|
this.$name = r1;
|
||
|
this.$cancelable = r2;
|
||
|
this.this$0 = this;
|
||
|
this.$streamId$inlined = i;
|
||
|
this.$requestHeaders$inlined = list;
|
||
|
}
|
||
|
|
||
|
@Override // okhttp3.internal.concurrent.Task
|
||
|
public final long runOnce() {
|
||
|
PushObserver pushObserver;
|
||
|
Set set;
|
||
|
pushObserver = this.this$0.pushObserver;
|
||
|
if (!pushObserver.onRequest(this.$streamId$inlined, this.$requestHeaders$inlined)) {
|
||
|
return -1L;
|
||
|
}
|
||
|
try {
|
||
|
this.this$0.getWriter().rstStream(this.$streamId$inlined, ErrorCode.CANCEL);
|
||
|
synchronized (this.this$0) {
|
||
|
set = this.this$0.currentPushRequests;
|
||
|
set.remove(Integer.valueOf(this.$streamId$inlined));
|
||
|
}
|
||
|
return -1L;
|
||
|
} catch (IOException unused) {
|
||
|
return -1L;
|
||
|
}
|
||
|
}
|
||
|
}, 0L);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public final void pushHeadersLater$okhttp(int i, List<Header> list, boolean z) {
|
||
|
C14957gcv.e(list, "");
|
||
|
TaskQueue taskQueue = this.pushQueue;
|
||
|
StringBuilder sb = new StringBuilder();
|
||
|
sb.append(this.connectionName);
|
||
|
sb.append('[');
|
||
|
sb.append(i);
|
||
|
sb.append("] onHeaders");
|
||
|
taskQueue.schedule(new Task(sb.toString(), true, this, i, list, z) { // from class: okhttp3.internal.http2.Http2Connection$pushHeadersLater$$inlined$execute$default$1
|
||
|
final boolean $cancelable;
|
||
|
final boolean $inFinished$inlined;
|
||
|
final String $name;
|
||
|
final List $requestHeaders$inlined;
|
||
|
final int $streamId$inlined;
|
||
|
final Http2Connection this$0;
|
||
|
|
||
|
/* JADX WARN: 'super' call moved to the top of the method (can break code semantics) */
|
||
|
{
|
||
|
super(r1, r2);
|
||
|
this.$name = r1;
|
||
|
this.$cancelable = r2;
|
||
|
this.this$0 = this;
|
||
|
this.$streamId$inlined = i;
|
||
|
this.$requestHeaders$inlined = list;
|
||
|
this.$inFinished$inlined = z;
|
||
|
}
|
||
|
|
||
|
@Override // okhttp3.internal.concurrent.Task
|
||
|
public final long runOnce() {
|
||
|
PushObserver pushObserver;
|
||
|
Set set;
|
||
|
pushObserver = this.this$0.pushObserver;
|
||
|
boolean onHeaders = pushObserver.onHeaders(this.$streamId$inlined, this.$requestHeaders$inlined, this.$inFinished$inlined);
|
||
|
if (onHeaders) {
|
||
|
try {
|
||
|
this.this$0.getWriter().rstStream(this.$streamId$inlined, ErrorCode.CANCEL);
|
||
|
} catch (IOException unused) {
|
||
|
return -1L;
|
||
|
}
|
||
|
}
|
||
|
if (!onHeaders && !this.$inFinished$inlined) {
|
||
|
return -1L;
|
||
|
}
|
||
|
synchronized (this.this$0) {
|
||
|
set = this.this$0.currentPushRequests;
|
||
|
set.remove(Integer.valueOf(this.$streamId$inlined));
|
||
|
}
|
||
|
return -1L;
|
||
|
}
|
||
|
}, 0L);
|
||
|
}
|
||
|
|
||
|
public final void pushDataLater$okhttp(int i, InterfaceC15149gid interfaceC15149gid, int i2, boolean z) throws IOException {
|
||
|
C14957gcv.e(interfaceC15149gid, "");
|
||
|
C15111ghZ c15111ghZ = new C15111ghZ();
|
||
|
long j = i2;
|
||
|
interfaceC15149gid.g(j);
|
||
|
interfaceC15149gid.read(c15111ghZ, j);
|
||
|
TaskQueue taskQueue = this.pushQueue;
|
||
|
StringBuilder sb = new StringBuilder();
|
||
|
sb.append(this.connectionName);
|
||
|
sb.append('[');
|
||
|
sb.append(i);
|
||
|
sb.append("] onData");
|
||
|
taskQueue.schedule(new Task(sb.toString(), true, this, i, c15111ghZ, i2, z) { // from class: okhttp3.internal.http2.Http2Connection$pushDataLater$$inlined$execute$default$1
|
||
|
final C15111ghZ $buffer$inlined;
|
||
|
final int $byteCount$inlined;
|
||
|
final boolean $cancelable;
|
||
|
final boolean $inFinished$inlined;
|
||
|
final String $name;
|
||
|
final int $streamId$inlined;
|
||
|
final Http2Connection this$0;
|
||
|
|
||
|
/* JADX WARN: 'super' call moved to the top of the method (can break code semantics) */
|
||
|
{
|
||
|
super(r1, r2);
|
||
|
this.$name = r1;
|
||
|
this.$cancelable = r2;
|
||
|
this.this$0 = this;
|
||
|
this.$streamId$inlined = i;
|
||
|
this.$buffer$inlined = c15111ghZ;
|
||
|
this.$byteCount$inlined = i2;
|
||
|
this.$inFinished$inlined = z;
|
||
|
}
|
||
|
|
||
|
@Override // okhttp3.internal.concurrent.Task
|
||
|
public final long runOnce() {
|
||
|
PushObserver pushObserver;
|
||
|
Set set;
|
||
|
try {
|
||
|
pushObserver = this.this$0.pushObserver;
|
||
|
boolean onData = pushObserver.onData(this.$streamId$inlined, this.$buffer$inlined, this.$byteCount$inlined, this.$inFinished$inlined);
|
||
|
if (onData) {
|
||
|
this.this$0.getWriter().rstStream(this.$streamId$inlined, ErrorCode.CANCEL);
|
||
|
}
|
||
|
if (!onData && !this.$inFinished$inlined) {
|
||
|
return -1L;
|
||
|
}
|
||
|
synchronized (this.this$0) {
|
||
|
set = this.this$0.currentPushRequests;
|
||
|
set.remove(Integer.valueOf(this.$streamId$inlined));
|
||
|
}
|
||
|
return -1L;
|
||
|
} catch (IOException unused) {
|
||
|
return -1L;
|
||
|
}
|
||
|
}
|
||
|
}, 0L);
|
||
|
}
|
||
|
|
||
|
public final void pushResetLater$okhttp(int i, ErrorCode errorCode) {
|
||
|
C14957gcv.e(errorCode, "");
|
||
|
TaskQueue taskQueue = this.pushQueue;
|
||
|
StringBuilder sb = new StringBuilder();
|
||
|
sb.append(this.connectionName);
|
||
|
sb.append('[');
|
||
|
sb.append(i);
|
||
|
sb.append("] onReset");
|
||
|
taskQueue.schedule(new Task(sb.toString(), true, this, i, errorCode) { // from class: okhttp3.internal.http2.Http2Connection$pushResetLater$$inlined$execute$default$1
|
||
|
final boolean $cancelable;
|
||
|
final ErrorCode $errorCode$inlined;
|
||
|
final String $name;
|
||
|
final int $streamId$inlined;
|
||
|
final Http2Connection this$0;
|
||
|
|
||
|
/* JADX WARN: 'super' call moved to the top of the method (can break code semantics) */
|
||
|
{
|
||
|
super(r1, r2);
|
||
|
this.$name = r1;
|
||
|
this.$cancelable = r2;
|
||
|
this.this$0 = this;
|
||
|
this.$streamId$inlined = i;
|
||
|
this.$errorCode$inlined = errorCode;
|
||
|
}
|
||
|
|
||
|
@Override // okhttp3.internal.concurrent.Task
|
||
|
public final long runOnce() {
|
||
|
PushObserver pushObserver;
|
||
|
Set set;
|
||
|
pushObserver = this.this$0.pushObserver;
|
||
|
pushObserver.onReset(this.$streamId$inlined, this.$errorCode$inlined);
|
||
|
synchronized (this.this$0) {
|
||
|
set = this.this$0.currentPushRequests;
|
||
|
set.remove(Integer.valueOf(this.$streamId$inlined));
|
||
|
C14866gag c14866gag = C14866gag.c;
|
||
|
}
|
||
|
return -1L;
|
||
|
}
|
||
|
}, 0L);
|
||
|
}
|
||
|
|
||
|
/* loaded from: classes.dex */
|
||
|
public static abstract class Listener {
|
||
|
public static final Companion Companion = new Companion(null);
|
||
|
public static final Listener REFUSE_INCOMING_STREAMS = new Listener() { // from class: okhttp3.internal.http2.Http2Connection$Listener$Companion$REFUSE_INCOMING_STREAMS$1
|
||
|
@Override // okhttp3.internal.http2.Http2Connection.Listener
|
||
|
public final void onStream(Http2Stream http2Stream) throws IOException {
|
||
|
C14957gcv.e(http2Stream, "");
|
||
|
http2Stream.close(ErrorCode.REFUSED_STREAM, null);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
public abstract void onStream(Http2Stream http2Stream) throws IOException;
|
||
|
|
||
|
/* loaded from: classes.dex */
|
||
|
public static final class Companion {
|
||
|
private Companion() {
|
||
|
}
|
||
|
|
||
|
public /* synthetic */ Companion(C14953gcr c14953gcr) {
|
||
|
this();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void onSettings(Http2Connection http2Connection, Settings settings) {
|
||
|
C14957gcv.e(http2Connection, "");
|
||
|
C14957gcv.e(settings, "");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/* loaded from: classes.dex */
|
||
|
public static final class Companion {
|
||
|
private Companion() {
|
||
|
}
|
||
|
|
||
|
public final Settings getDEFAULT_SETTINGS() {
|
||
|
return Http2Connection.DEFAULT_SETTINGS;
|
||
|
}
|
||
|
|
||
|
public /* synthetic */ Companion(C14953gcr c14953gcr) {
|
||
|
this();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static {
|
||
|
Settings settings = new Settings();
|
||
|
settings.set(7, 65535);
|
||
|
settings.set(5, 16384);
|
||
|
DEFAULT_SETTINGS = settings;
|
||
|
}
|
||
|
|
||
|
public final void awaitPong() throws InterruptedException {
|
||
|
synchronized (this) {
|
||
|
while (this.awaitPongsReceived < this.awaitPingsSent) {
|
||
|
wait();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public final void close$okhttp(ErrorCode errorCode, ErrorCode errorCode2, IOException iOException) {
|
||
|
int i;
|
||
|
Object[] objArr;
|
||
|
C14957gcv.e(errorCode, "");
|
||
|
C14957gcv.e(errorCode2, "");
|
||
|
if (!Util.assertionsEnabled || !Thread.holdsLock(this)) {
|
||
|
try {
|
||
|
shutdown(errorCode);
|
||
|
} catch (IOException unused) {
|
||
|
}
|
||
|
synchronized (this) {
|
||
|
if (!getStreams$okhttp().isEmpty()) {
|
||
|
objArr = getStreams$okhttp().values().toArray(new Http2Stream[0]);
|
||
|
if (objArr != null) {
|
||
|
getStreams$okhttp().clear();
|
||
|
} else {
|
||
|
throw new NullPointerException("null cannot be cast to non-null type kotlin.Array<T of kotlin.collections.ArraysKt__ArraysJVMKt.toTypedArray>");
|
||
|
}
|
||
|
} else {
|
||
|
objArr = null;
|
||
|
}
|
||
|
C14866gag c14866gag = C14866gag.c;
|
||
|
}
|
||
|
Http2Stream[] http2StreamArr = (Http2Stream[]) objArr;
|
||
|
if (http2StreamArr != null) {
|
||
|
for (Http2Stream http2Stream : http2StreamArr) {
|
||
|
try {
|
||
|
http2Stream.close(errorCode2, iOException);
|
||
|
} catch (IOException unused2) {
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
try {
|
||
|
getWriter().close();
|
||
|
} catch (IOException unused3) {
|
||
|
}
|
||
|
try {
|
||
|
getSocket$okhttp().close();
|
||
|
} catch (IOException unused4) {
|
||
|
}
|
||
|
this.writerQueue.shutdown();
|
||
|
this.pushQueue.shutdown();
|
||
|
this.settingsListenerQueue.shutdown();
|
||
|
return;
|
||
|
}
|
||
|
StringBuilder sb = new StringBuilder("Thread ");
|
||
|
sb.append((Object) Thread.currentThread().getName());
|
||
|
sb.append(" MUST NOT hold lock on ");
|
||
|
sb.append(this);
|
||
|
throw new AssertionError(sb.toString());
|
||
|
}
|
||
|
|
||
|
public final void start(boolean z) throws IOException {
|
||
|
start$default(this, z, null, 2, null);
|
||
|
}
|
||
|
|
||
|
public final void start() throws IOException {
|
||
|
start$default(this, false, null, 3, null);
|
||
|
}
|
||
|
|
||
|
public final void setPeerSettings(Settings settings) {
|
||
|
C14957gcv.e(settings, "");
|
||
|
this.peerSettings = settings;
|
||
|
}
|
||
|
|
||
|
public final void setNextStreamId$okhttp(int i) {
|
||
|
this.nextStreamId = i;
|
||
|
}
|
||
|
|
||
|
public final void setLastGoodStreamId$okhttp(int i) {
|
||
|
this.lastGoodStreamId = i;
|
||
|
}
|
||
|
|
||
|
public final Http2Writer getWriter() {
|
||
|
return this.writer;
|
||
|
}
|
||
|
|
||
|
public final long getWriteBytesTotal() {
|
||
|
return this.writeBytesTotal;
|
||
|
}
|
||
|
|
||
|
public final long getWriteBytesMaximum() {
|
||
|
return this.writeBytesMaximum;
|
||
|
}
|
||
|
|
||
|
public final Map<Integer, Http2Stream> getStreams$okhttp() {
|
||
|
return this.streams;
|
||
|
}
|
||
|
|
||
|
public final Socket getSocket$okhttp() {
|
||
|
return this.socket;
|
||
|
}
|
||
|
|
||
|
public final ReaderRunnable getReaderRunnable() {
|
||
|
return this.readerRunnable;
|
||
|
}
|
||
|
|
||
|
public final long getReadBytesTotal() {
|
||
|
return this.readBytesTotal;
|
||
|
}
|
||
|
|
||
|
public final long getReadBytesAcknowledged() {
|
||
|
return this.readBytesAcknowledged;
|
||
|
}
|
||
|
|
||
|
public final Settings getPeerSettings() {
|
||
|
return this.peerSettings;
|
||
|
}
|
||
|
|
||
|
public final Settings getOkHttpSettings() {
|
||
|
return this.okHttpSettings;
|
||
|
}
|
||
|
|
||
|
public final int getNextStreamId$okhttp() {
|
||
|
return this.nextStreamId;
|
||
|
}
|
||
|
|
||
|
public final Listener getListener$okhttp() {
|
||
|
return this.listener;
|
||
|
}
|
||
|
|
||
|
public final int getLastGoodStreamId$okhttp() {
|
||
|
return this.lastGoodStreamId;
|
||
|
}
|
||
|
|
||
|
public final String getConnectionName$okhttp() {
|
||
|
return this.connectionName;
|
||
|
}
|
||
|
|
||
|
public final boolean getClient$okhttp() {
|
||
|
return this.client;
|
||
|
}
|
||
|
}
|