package okhttp3.internal.http2; import io.sentry.ProfilingTraceData; import io.sentry.SentryEnvelopeItemHeader; import io.sentry.okhttp.SentryOkHttpEventListener; import io.sentry.protocol.TransactionInfo; import java.io.EOFException; import java.io.IOException; import java.io.InterruptedIOException; import java.net.SocketTimeoutException; import java.util.ArrayDeque; import java.util.List; import kotlin.Metadata; import kotlin.Unit; import kotlin.jvm.internal.DefaultConstructorMarker; import kotlin.jvm.internal.Intrinsics; import okhttp3.Headers; import okhttp3.internal.Util; import okio.AsyncTimeout; import okio.Buffer; import okio.BufferedSource; import okio.Sink; import okio.Source; import okio.Timeout; /* compiled from: Http2Stream.kt */ @Metadata(bv = {1, 0, 3}, d1 = {"\u0000\u008a\u0001\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0000\n\u0002\u0010\b\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0010\u000b\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0002\b\u0004\n\u0002\u0018\u0002\n\u0002\b\u0005\n\u0002\u0018\u0002\n\u0002\b\u0006\n\u0002\u0018\u0002\n\u0002\b\u0006\n\u0002\u0010\t\n\u0002\b\t\n\u0002\u0018\u0002\n\u0002\b\u0003\n\u0002\u0018\u0002\n\u0002\b\u0003\n\u0002\u0018\u0002\n\u0002\b\u000b\n\u0002\u0010\u0002\n\u0002\b\f\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\b\n\u0002\u0010 \n\u0002\u0018\u0002\n\u0002\b\u0006\u0018\u0000 _2\u00020\u0001:\u0004_`abB1\b\u0000\u0012\u0006\u0010\u0002\u001a\u00020\u0003\u0012\u0006\u0010\u0004\u001a\u00020\u0005\u0012\u0006\u0010\u0006\u001a\u00020\u0007\u0012\u0006\u0010\b\u001a\u00020\u0007\u0012\b\u0010\t\u001a\u0004\u0018\u00010\n¢\u0006\u0002\u0010\u000bJ\u000e\u0010@\u001a\u00020A2\u0006\u0010B\u001a\u00020#J\r\u0010C\u001a\u00020AH\u0000¢\u0006\u0002\bDJ\r\u0010E\u001a\u00020AH\u0000¢\u0006\u0002\bFJ\u0018\u0010G\u001a\u00020A2\u0006\u0010H\u001a\u00020\u000f2\b\u0010\u0014\u001a\u0004\u0018\u00010\u0015J\u001a\u0010I\u001a\u00020\u00072\u0006\u0010\u000e\u001a\u00020\u000f2\b\u0010\u0014\u001a\u0004\u0018\u00010\u0015H\u0002J\u000e\u0010J\u001a\u00020A2\u0006\u0010\u000e\u001a\u00020\u000fJ\u000e\u0010K\u001a\u00020A2\u0006\u0010L\u001a\u00020\nJ\u0006\u0010M\u001a\u00020NJ\u0006\u0010O\u001a\u00020PJ\u0006\u0010,\u001a\u00020QJ\u0016\u0010R\u001a\u00020A2\u0006\u00104\u001a\u00020S2\u0006\u0010T\u001a\u00020\u0003J\u0016\u0010U\u001a\u00020A2\u0006\u0010\t\u001a\u00020\n2\u0006\u0010\b\u001a\u00020\u0007J\u000e\u0010V\u001a\u00020A2\u0006\u0010\u000e\u001a\u00020\u000fJ\u0006\u0010W\u001a\u00020\nJ\u0006\u0010L\u001a\u00020\nJ\r\u0010X\u001a\u00020AH\u0000¢\u0006\u0002\bYJ$\u0010Z\u001a\u00020A2\f\u0010[\u001a\b\u0012\u0004\u0012\u00020]0\\2\u0006\u0010\u0006\u001a\u00020\u00072\u0006\u0010^\u001a\u00020\u0007J\u0006\u0010>\u001a\u00020QR\u0011\u0010\u0004\u001a\u00020\u0005¢\u0006\b\n\u0000\u001a\u0004\b\f\u0010\rR\u001e\u0010\u000e\u001a\u0004\u0018\u00010\u000f8@X\u0080\u000e¢\u0006\u000e\n\u0000\u001a\u0004\b\u0010\u0010\u0011\"\u0004\b\u0012\u0010\u0013R\u001c\u0010\u0014\u001a\u0004\u0018\u00010\u0015X\u0080\u000e¢\u0006\u000e\n\u0000\u001a\u0004\b\u0016\u0010\u0017\"\u0004\b\u0018\u0010\u0019R\u000e\u0010\u001a\u001a\u00020\u0007X\u0082\u000e¢\u0006\u0002\n\u0000R\u0014\u0010\u001b\u001a\b\u0012\u0004\u0012\u00020\n0\u001cX\u0082\u0004¢\u0006\u0002\n\u0000R\u0011\u0010\u0002\u001a\u00020\u0003¢\u0006\b\n\u0000\u001a\u0004\b\u001d\u0010\u001eR\u0011\u0010\u001f\u001a\u00020\u00078F¢\u0006\u0006\u001a\u0004\b\u001f\u0010 R\u0011\u0010!\u001a\u00020\u00078F¢\u0006\u0006\u001a\u0004\b!\u0010 R$\u0010$\u001a\u00020#2\u0006\u0010\"\u001a\u00020#@@X\u0086\u000e¢\u0006\u000e\n\u0000\u001a\u0004\b%\u0010&\"\u0004\b'\u0010(R$\u0010)\u001a\u00020#2\u0006\u0010\"\u001a\u00020#@@X\u0086\u000e¢\u0006\u000e\n\u0000\u001a\u0004\b*\u0010&\"\u0004\b+\u0010(R\u0018\u0010,\u001a\u00060-R\u00020\u0000X\u0080\u0004¢\u0006\b\n\u0000\u001a\u0004\b.\u0010/R\u0018\u00100\u001a\u000601R\u00020\u0000X\u0080\u0004¢\u0006\b\n\u0000\u001a\u0004\b2\u00103R\u0018\u00104\u001a\u000605R\u00020\u0000X\u0080\u0004¢\u0006\b\n\u0000\u001a\u0004\b6\u00107R$\u00108\u001a\u00020#2\u0006\u0010\"\u001a\u00020#@@X\u0086\u000e¢\u0006\u000e\n\u0000\u001a\u0004\b9\u0010&\"\u0004\b:\u0010(R$\u0010;\u001a\u00020#2\u0006\u0010\"\u001a\u00020#@@X\u0086\u000e¢\u0006\u000e\n\u0000\u001a\u0004\b<\u0010&\"\u0004\b=\u0010(R\u0018\u0010>\u001a\u00060-R\u00020\u0000X\u0080\u0004¢\u0006\b\n\u0000\u001a\u0004\b?\u0010/¨\u0006c"}, d2 = {"Lokhttp3/internal/http2/Http2Stream;", "", "id", "", SentryOkHttpEventListener.CONNECTION_EVENT, "Lokhttp3/internal/http2/Http2Connection;", "outFinished", "", "inFinished", "headers", "Lokhttp3/Headers;", "(ILokhttp3/internal/http2/Http2Connection;ZZLokhttp3/Headers;)V", "getConnection", "()Lokhttp3/internal/http2/Http2Connection;", "errorCode", "Lokhttp3/internal/http2/ErrorCode;", "getErrorCode$okhttp", "()Lokhttp3/internal/http2/ErrorCode;", "setErrorCode$okhttp", "(Lokhttp3/internal/http2/ErrorCode;)V", "errorException", "Ljava/io/IOException;", "getErrorException$okhttp", "()Ljava/io/IOException;", "setErrorException$okhttp", "(Ljava/io/IOException;)V", "hasResponseHeaders", "headersQueue", "Ljava/util/ArrayDeque;", "getId", "()I", "isLocallyInitiated", "()Z", "isOpen", "", "", "readBytesAcknowledged", "getReadBytesAcknowledged", "()J", "setReadBytesAcknowledged$okhttp", "(J)V", "readBytesTotal", "getReadBytesTotal", "setReadBytesTotal$okhttp", "readTimeout", "Lokhttp3/internal/http2/Http2Stream$StreamTimeout;", "getReadTimeout$okhttp", "()Lokhttp3/internal/http2/Http2Stream$StreamTimeout;", "sink", "Lokhttp3/internal/http2/Http2Stream$FramingSink;", "getSink$okhttp", "()Lokhttp3/internal/http2/Http2Stream$FramingSink;", TransactionInfo.JsonKeys.SOURCE, "Lokhttp3/internal/http2/Http2Stream$FramingSource;", "getSource$okhttp", "()Lokhttp3/internal/http2/Http2Stream$FramingSource;", "writeBytesMaximum", "getWriteBytesMaximum", "setWriteBytesMaximum$okhttp", "writeBytesTotal", "getWriteBytesTotal", "setWriteBytesTotal$okhttp", "writeTimeout", "getWriteTimeout$okhttp", "addBytesToWriteWindow", "", "delta", "cancelStreamIfNecessary", "cancelStreamIfNecessary$okhttp", "checkOutNotClosed", "checkOutNotClosed$okhttp", "close", "rstStatusCode", "closeInternal", "closeLater", "enqueueTrailers", "trailers", "getSink", "Lokio/Sink;", "getSource", "Lokio/Source;", "Lokio/Timeout;", "receiveData", "Lokio/BufferedSource;", SentryEnvelopeItemHeader.JsonKeys.LENGTH, "receiveHeaders", "receiveRstStream", "takeHeaders", "waitForIo", "waitForIo$okhttp", "writeHeaders", "responseHeaders", "", "Lokhttp3/internal/http2/Header;", "flushHeaders", "Companion", "FramingSink", "FramingSource", "StreamTimeout", "okhttp"}, k = 1, mv = {1, 4, 0}) /* loaded from: classes3.dex */ public final class Http2Stream { public static final long EMIT_BUFFER_SIZE = 16384; private final Http2Connection connection; private ErrorCode errorCode; private IOException errorException; private boolean hasResponseHeaders; private final ArrayDeque headersQueue; private final int id; private long readBytesAcknowledged; private long readBytesTotal; private final StreamTimeout readTimeout; private final FramingSink sink; private final FramingSource source; private long writeBytesMaximum; private long writeBytesTotal; private final StreamTimeout writeTimeout; public final Http2Connection getConnection() { return this.connection; } /* renamed from: getErrorException$okhttp, reason: from getter */ public final IOException getErrorException() { return this.errorException; } public final int getId() { return this.id; } public final long getReadBytesAcknowledged() { return this.readBytesAcknowledged; } public final long getReadBytesTotal() { return this.readBytesTotal; } /* renamed from: getReadTimeout$okhttp, reason: from getter */ public final StreamTimeout getReadTimeout() { return this.readTimeout; } /* renamed from: getSink$okhttp, reason: from getter */ public final FramingSink getSink() { return this.sink; } /* renamed from: getSource$okhttp, reason: from getter */ public final FramingSource getSource() { return this.source; } public final long getWriteBytesMaximum() { return this.writeBytesMaximum; } public final long getWriteBytesTotal() { return this.writeBytesTotal; } /* renamed from: getWriteTimeout$okhttp, reason: from getter */ public final StreamTimeout getWriteTimeout() { return this.writeTimeout; } public final void setErrorCode$okhttp(ErrorCode errorCode) { this.errorCode = errorCode; } public final void setErrorException$okhttp(IOException iOException) { this.errorException = iOException; } public final void setReadBytesAcknowledged$okhttp(long j) { this.readBytesAcknowledged = j; } public final void setReadBytesTotal$okhttp(long j) { this.readBytesTotal = j; } public final void setWriteBytesMaximum$okhttp(long j) { this.writeBytesMaximum = j; } public final void setWriteBytesTotal$okhttp(long j) { this.writeBytesTotal = j; } public Http2Stream(int i, Http2Connection connection, boolean z, boolean z2, Headers headers) { Intrinsics.checkNotNullParameter(connection, "connection"); this.id = i; this.connection = connection; this.writeBytesMaximum = connection.getPeerSettings().getInitialWindowSize(); ArrayDeque arrayDeque = new ArrayDeque<>(); this.headersQueue = arrayDeque; this.source = new FramingSource(connection.getOkHttpSettings().getInitialWindowSize(), z2); this.sink = new FramingSink(z); this.readTimeout = new StreamTimeout(); this.writeTimeout = new StreamTimeout(); if (headers != null) { if (!(!isLocallyInitiated())) { throw new IllegalStateException("locally-initiated streams shouldn't have headers yet".toString()); } arrayDeque.add(headers); } else if (!isLocallyInitiated()) { throw new IllegalStateException("remotely-initiated streams should have headers".toString()); } } public final synchronized ErrorCode getErrorCode$okhttp() { return this.errorCode; } public final synchronized boolean isOpen() { if (this.errorCode != null) { return false; } if ((this.source.getFinished() || this.source.getClosed()) && (this.sink.getFinished() || this.sink.getClosed())) { if (this.hasResponseHeaders) { return false; } } return true; } public final boolean isLocallyInitiated() { return this.connection.getClient() == ((this.id & 1) == 1); } public final synchronized Headers takeHeaders() throws IOException { Headers removeFirst; this.readTimeout.enter(); while (this.headersQueue.isEmpty() && this.errorCode == null) { try { waitForIo$okhttp(); } catch (Throwable th) { this.readTimeout.exitAndThrowIfTimedOut(); throw th; } } this.readTimeout.exitAndThrowIfTimedOut(); if (!this.headersQueue.isEmpty()) { removeFirst = this.headersQueue.removeFirst(); Intrinsics.checkNotNullExpressionValue(removeFirst, "headersQueue.removeFirst()"); } else { Throwable th2 = this.errorException; if (th2 == null) { ErrorCode errorCode = this.errorCode; Intrinsics.checkNotNull(errorCode); th2 = new StreamResetException(errorCode); } throw th2; } return removeFirst; } public final synchronized Headers trailers() throws IOException { Headers trailers; if (this.errorCode != null) { Throwable th = this.errorException; if (th == null) { ErrorCode errorCode = this.errorCode; Intrinsics.checkNotNull(errorCode); th = new StreamResetException(errorCode); } throw th; } if (!(this.source.getFinished() && this.source.getReceiveBuffer().exhausted() && this.source.getReadBuffer().exhausted())) { throw new IllegalStateException("too early; can't read the trailers yet".toString()); } trailers = this.source.getTrailers(); if (trailers == null) { trailers = Util.EMPTY_HEADERS; } return trailers; } public final void enqueueTrailers(Headers trailers) { Intrinsics.checkNotNullParameter(trailers, "trailers"); synchronized (this) { boolean z = true; if (!(!this.sink.getFinished())) { throw new IllegalStateException("already finished".toString()); } if (trailers.size() == 0) { z = false; } if (!z) { throw new IllegalArgumentException("trailers.size() == 0".toString()); } this.sink.setTrailers(trailers); Unit unit = Unit.INSTANCE; } } public final Timeout readTimeout() { return this.readTimeout; } public final Timeout writeTimeout() { return this.writeTimeout; } public final Source getSource() { return this.source; } /* JADX WARN: Removed duplicated region for block: B:10:0x0011 A[Catch: all -> 0x0027, TRY_LEAVE, TryCatch #0 {, blocks: (B:3:0x0001, B:5:0x0005, B:10:0x0011, B:15:0x0019, B:16:0x0026), top: B:2:0x0001 }] */ /* JADX WARN: Removed duplicated region for block: B:15:0x0019 A[Catch: all -> 0x0027, TRY_ENTER, TryCatch #0 {, blocks: (B:3:0x0001, B:5:0x0005, B:10:0x0011, B:15:0x0019, B:16:0x0026), top: B:2:0x0001 }] */ /* Code decompiled incorrectly, please refer to instructions dump. To view partially-correct add '--show-bad-code' argument */ public final okio.Sink getSink() { /* r2 = this; monitor-enter(r2) boolean r0 = r2.hasResponseHeaders // Catch: java.lang.Throwable -> L27 if (r0 != 0) goto Le boolean r0 = r2.isLocallyInitiated() // Catch: java.lang.Throwable -> L27 if (r0 == 0) goto Lc goto Le Lc: r0 = 0 goto Lf Le: r0 = 1 Lf: if (r0 == 0) goto L19 kotlin.Unit r0 = kotlin.Unit.INSTANCE // Catch: java.lang.Throwable -> L27 monitor-exit(r2) okhttp3.internal.http2.Http2Stream$FramingSink r2 = r2.sink okio.Sink r2 = (okio.Sink) r2 return r2 L19: java.lang.String r0 = "reply before requesting the sink" java.lang.IllegalStateException r1 = new java.lang.IllegalStateException // Catch: java.lang.Throwable -> L27 java.lang.String r0 = r0.toString() // Catch: java.lang.Throwable -> L27 r1.(r0) // Catch: java.lang.Throwable -> L27 java.lang.Throwable r1 = (java.lang.Throwable) r1 // Catch: java.lang.Throwable -> L27 throw r1 // Catch: java.lang.Throwable -> L27 L27: r0 = move-exception monitor-exit(r2) throw r0 */ throw new UnsupportedOperationException("Method not decompiled: okhttp3.internal.http2.Http2Stream.getSink():okio.Sink"); } public final void close(ErrorCode rstStatusCode, IOException errorException) throws IOException { Intrinsics.checkNotNullParameter(rstStatusCode, "rstStatusCode"); if (closeInternal(rstStatusCode, errorException)) { this.connection.writeSynReset$okhttp(this.id, rstStatusCode); } } public final void closeLater(ErrorCode errorCode) { Intrinsics.checkNotNullParameter(errorCode, "errorCode"); if (closeInternal(errorCode, null)) { this.connection.writeSynResetLater$okhttp(this.id, errorCode); } } /* compiled from: Http2Stream.kt */ @Metadata(bv = {1, 0, 3}, d1 = {"\u0000@\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0010\t\n\u0000\n\u0002\u0010\u000b\n\u0002\b\t\n\u0002\u0018\u0002\n\u0002\b\u0005\n\u0002\u0018\u0002\n\u0002\b\u0005\n\u0002\u0010\u0002\n\u0002\b\u0005\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0002\b\u0002\b\u0086\u0004\u0018\u00002\u00020\u0001B\u0017\b\u0000\u0012\u0006\u0010\u0002\u001a\u00020\u0003\u0012\u0006\u0010\u0004\u001a\u00020\u0005¢\u0006\u0002\u0010\u0006J\b\u0010\u001a\u001a\u00020\u001bH\u0016J\u0018\u0010\u001c\u001a\u00020\u00032\u0006\u0010\u001d\u001a\u00020\u000f2\u0006\u0010\u001e\u001a\u00020\u0003H\u0016J\u001d\u0010\u001f\u001a\u00020\u001b2\u0006\u0010 \u001a\u00020!2\u0006\u0010\u001e\u001a\u00020\u0003H\u0000¢\u0006\u0002\b\"J\b\u0010#\u001a\u00020$H\u0016J\u0010\u0010%\u001a\u00020\u001b2\u0006\u0010\u001c\u001a\u00020\u0003H\u0002R\u001a\u0010\u0007\u001a\u00020\u0005X\u0080\u000e¢\u0006\u000e\n\u0000\u001a\u0004\b\b\u0010\t\"\u0004\b\n\u0010\u000bR\u001a\u0010\u0004\u001a\u00020\u0005X\u0080\u000e¢\u0006\u000e\n\u0000\u001a\u0004\b\f\u0010\t\"\u0004\b\r\u0010\u000bR\u000e\u0010\u0002\u001a\u00020\u0003X\u0082\u0004¢\u0006\u0002\n\u0000R\u0011\u0010\u000e\u001a\u00020\u000f¢\u0006\b\n\u0000\u001a\u0004\b\u0010\u0010\u0011R\u0011\u0010\u0012\u001a\u00020\u000f¢\u0006\b\n\u0000\u001a\u0004\b\u0013\u0010\u0011R\u001c\u0010\u0014\u001a\u0004\u0018\u00010\u0015X\u0086\u000e¢\u0006\u000e\n\u0000\u001a\u0004\b\u0016\u0010\u0017\"\u0004\b\u0018\u0010\u0019¨\u0006&"}, d2 = {"Lokhttp3/internal/http2/Http2Stream$FramingSource;", "Lokio/Source;", "maxByteCount", "", "finished", "", "(Lokhttp3/internal/http2/Http2Stream;JZ)V", "closed", "getClosed$okhttp", "()Z", "setClosed$okhttp", "(Z)V", "getFinished$okhttp", "setFinished$okhttp", "readBuffer", "Lokio/Buffer;", "getReadBuffer", "()Lokio/Buffer;", "receiveBuffer", "getReceiveBuffer", "trailers", "Lokhttp3/Headers;", "getTrailers", "()Lokhttp3/Headers;", "setTrailers", "(Lokhttp3/Headers;)V", "close", "", "read", "sink", "byteCount", "receive", TransactionInfo.JsonKeys.SOURCE, "Lokio/BufferedSource;", "receive$okhttp", ProfilingTraceData.TRUNCATION_REASON_TIMEOUT, "Lokio/Timeout;", "updateConnectionFlowControl", "okhttp"}, k = 1, mv = {1, 4, 0}) /* loaded from: classes3.dex */ public final class FramingSource implements Source { private boolean closed; private boolean finished; private final long maxByteCount; private Headers trailers; private final Buffer receiveBuffer = new Buffer(); private final Buffer readBuffer = new Buffer(); /* renamed from: getClosed$okhttp, reason: from getter */ public final boolean getClosed() { return this.closed; } /* renamed from: getFinished$okhttp, reason: from getter */ public final boolean getFinished() { return this.finished; } public final Buffer getReadBuffer() { return this.readBuffer; } public final Buffer getReceiveBuffer() { return this.receiveBuffer; } public final Headers getTrailers() { return this.trailers; } public final void setClosed$okhttp(boolean z) { this.closed = z; } public final void setFinished$okhttp(boolean z) { this.finished = z; } public final void setTrailers(Headers headers) { this.trailers = headers; } public FramingSource(long j, boolean z) { this.maxByteCount = j; this.finished = z; } /* JADX WARN: Code restructure failed: missing block: B:48:0x00e9, code lost: throw new java.io.IOException("stream closed"); */ @Override // okio.Source /* Code decompiled incorrectly, please refer to instructions dump. To view partially-correct add '--show-bad-code' argument */ public long read(okio.Buffer r18, long r19) throws java.io.IOException { /* Method dump skipped, instructions count: 275 To view this dump add '--comments-level debug' option */ throw new UnsupportedOperationException("Method not decompiled: okhttp3.internal.http2.Http2Stream.FramingSource.read(okio.Buffer, long):long"); } @Override // okio.Source /* renamed from: timeout */ public Timeout getTimeout() { return Http2Stream.this.getReadTimeout(); } @Override // okio.Source, java.io.Closeable, java.lang.AutoCloseable public void close() throws IOException { long size; synchronized (Http2Stream.this) { this.closed = true; size = this.readBuffer.size(); this.readBuffer.clear(); Http2Stream http2Stream = Http2Stream.this; if (http2Stream != null) { http2Stream.notifyAll(); Unit unit = Unit.INSTANCE; } else { throw new NullPointerException("null cannot be cast to non-null type java.lang.Object"); } } if (size > 0) { updateConnectionFlowControl(size); } Http2Stream.this.cancelStreamIfNecessary$okhttp(); } private final void updateConnectionFlowControl(long read) { Http2Stream http2Stream = Http2Stream.this; if (!Util.assertionsEnabled || !Thread.holdsLock(http2Stream)) { Http2Stream.this.getConnection().updateConnectionFlowControl$okhttp(read); return; } StringBuilder sb = new StringBuilder("Thread "); Thread currentThread = Thread.currentThread(); Intrinsics.checkNotNullExpressionValue(currentThread, "Thread.currentThread()"); throw new AssertionError(sb.append(currentThread.getName()).append(" MUST NOT hold lock on ").append(http2Stream).toString()); } public final void receive$okhttp(BufferedSource source, long byteCount) throws IOException { boolean z; boolean z2; boolean z3; long j; Intrinsics.checkNotNullParameter(source, "source"); Http2Stream http2Stream = Http2Stream.this; if (Util.assertionsEnabled && Thread.holdsLock(http2Stream)) { StringBuilder sb = new StringBuilder("Thread "); Thread currentThread = Thread.currentThread(); Intrinsics.checkNotNullExpressionValue(currentThread, "Thread.currentThread()"); throw new AssertionError(sb.append(currentThread.getName()).append(" MUST NOT hold lock on ").append(http2Stream).toString()); } while (byteCount > 0) { synchronized (Http2Stream.this) { z = this.finished; z2 = true; z3 = this.readBuffer.size() + byteCount > this.maxByteCount; Unit unit = Unit.INSTANCE; } if (z3) { source.skip(byteCount); Http2Stream.this.closeLater(ErrorCode.FLOW_CONTROL_ERROR); return; } if (z) { source.skip(byteCount); return; } long read = source.read(this.receiveBuffer, byteCount); if (read == -1) { throw new EOFException(); } byteCount -= read; synchronized (Http2Stream.this) { if (this.closed) { j = this.receiveBuffer.size(); this.receiveBuffer.clear(); } else { if (this.readBuffer.size() != 0) { z2 = false; } this.readBuffer.writeAll(this.receiveBuffer); if (z2) { Http2Stream http2Stream2 = Http2Stream.this; if (http2Stream2 == null) { throw new NullPointerException("null cannot be cast to non-null type java.lang.Object"); } http2Stream2.notifyAll(); } j = 0; } Unit unit2 = Unit.INSTANCE; } if (j > 0) { updateConnectionFlowControl(j); } } } } /* compiled from: Http2Stream.kt */ @Metadata(bv = {1, 0, 3}, d1 = {"\u00006\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0010\u000b\n\u0002\b\t\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0005\n\u0002\u0010\u0002\n\u0002\b\u0004\n\u0002\u0018\u0002\n\u0002\b\u0003\n\u0002\u0010\t\n\u0000\b\u0080\u0004\u0018\u00002\u00020\u0001B\u000f\u0012\b\b\u0002\u0010\u0002\u001a\u00020\u0003¢\u0006\u0002\u0010\u0004J\b\u0010\u0014\u001a\u00020\u0015H\u0016J\u0010\u0010\u0016\u001a\u00020\u00152\u0006\u0010\u0017\u001a\u00020\u0003H\u0002J\b\u0010\u0018\u001a\u00020\u0015H\u0016J\b\u0010\u0019\u001a\u00020\u001aH\u0016J\u0018\u0010\u001b\u001a\u00020\u00152\u0006\u0010\u001c\u001a\u00020\r2\u0006\u0010\u001d\u001a\u00020\u001eH\u0016R\u001a\u0010\u0005\u001a\u00020\u0003X\u0086\u000e¢\u0006\u000e\n\u0000\u001a\u0004\b\u0006\u0010\u0007\"\u0004\b\b\u0010\tR\u001a\u0010\u0002\u001a\u00020\u0003X\u0086\u000e¢\u0006\u000e\n\u0000\u001a\u0004\b\n\u0010\u0007\"\u0004\b\u000b\u0010\tR\u000e\u0010\f\u001a\u00020\rX\u0082\u0004¢\u0006\u0002\n\u0000R\u001c\u0010\u000e\u001a\u0004\u0018\u00010\u000fX\u0086\u000e¢\u0006\u000e\n\u0000\u001a\u0004\b\u0010\u0010\u0011\"\u0004\b\u0012\u0010\u0013¨\u0006\u001f"}, d2 = {"Lokhttp3/internal/http2/Http2Stream$FramingSink;", "Lokio/Sink;", "finished", "", "(Lokhttp3/internal/http2/Http2Stream;Z)V", "closed", "getClosed", "()Z", "setClosed", "(Z)V", "getFinished", "setFinished", "sendBuffer", "Lokio/Buffer;", "trailers", "Lokhttp3/Headers;", "getTrailers", "()Lokhttp3/Headers;", "setTrailers", "(Lokhttp3/Headers;)V", "close", "", "emitFrame", "outFinishedOnLastFrame", "flush", ProfilingTraceData.TRUNCATION_REASON_TIMEOUT, "Lokio/Timeout;", "write", TransactionInfo.JsonKeys.SOURCE, "byteCount", "", "okhttp"}, k = 1, mv = {1, 4, 0}) /* loaded from: classes3.dex */ public final class FramingSink implements Sink { private boolean closed; private boolean finished; private final Buffer sendBuffer; private Headers trailers; public final boolean getClosed() { return this.closed; } public final boolean getFinished() { return this.finished; } public final Headers getTrailers() { return this.trailers; } public final void setClosed(boolean z) { this.closed = z; } public final void setFinished(boolean z) { this.finished = z; } public final void setTrailers(Headers headers) { this.trailers = headers; } public FramingSink(boolean z) { this.finished = z; this.sendBuffer = new Buffer(); } public /* synthetic */ FramingSink(Http2Stream http2Stream, boolean z, int i, DefaultConstructorMarker defaultConstructorMarker) { this((i & 1) != 0 ? false : z); } private final void emitFrame(boolean outFinishedOnLastFrame) throws IOException { long min; boolean z; synchronized (Http2Stream.this) { Http2Stream.this.getWriteTimeout().enter(); while (Http2Stream.this.getWriteBytesTotal() >= Http2Stream.this.getWriteBytesMaximum() && !this.finished && !this.closed && Http2Stream.this.getErrorCode$okhttp() == null) { try { Http2Stream.this.waitForIo$okhttp(); } finally { } } Http2Stream.this.getWriteTimeout().exitAndThrowIfTimedOut(); Http2Stream.this.checkOutNotClosed$okhttp(); min = Math.min(Http2Stream.this.getWriteBytesMaximum() - Http2Stream.this.getWriteBytesTotal(), this.sendBuffer.size()); Http2Stream http2Stream = Http2Stream.this; http2Stream.setWriteBytesTotal$okhttp(http2Stream.getWriteBytesTotal() + min); z = outFinishedOnLastFrame && min == this.sendBuffer.size() && Http2Stream.this.getErrorCode$okhttp() == null; Unit unit = Unit.INSTANCE; } Http2Stream.this.getWriteTimeout().enter(); try { Http2Stream.this.getConnection().writeData(Http2Stream.this.getId(), z, this.sendBuffer, min); } finally { } } @Override // okio.Sink /* renamed from: timeout */ public Timeout getTimeout() { return Http2Stream.this.getWriteTimeout(); } @Override // okio.Sink public void write(Buffer source, long byteCount) throws IOException { Intrinsics.checkNotNullParameter(source, "source"); Http2Stream http2Stream = Http2Stream.this; if (!Util.assertionsEnabled || !Thread.holdsLock(http2Stream)) { this.sendBuffer.write(source, byteCount); while (this.sendBuffer.size() >= Http2Stream.EMIT_BUFFER_SIZE) { emitFrame(false); } } else { StringBuilder sb = new StringBuilder("Thread "); Thread currentThread = Thread.currentThread(); Intrinsics.checkNotNullExpressionValue(currentThread, "Thread.currentThread()"); throw new AssertionError(sb.append(currentThread.getName()).append(" MUST NOT hold lock on ").append(http2Stream).toString()); } } @Override // okio.Sink, java.io.Flushable public void flush() throws IOException { Http2Stream http2Stream = Http2Stream.this; if (!Util.assertionsEnabled || !Thread.holdsLock(http2Stream)) { synchronized (Http2Stream.this) { Http2Stream.this.checkOutNotClosed$okhttp(); Unit unit = Unit.INSTANCE; } while (this.sendBuffer.size() > 0) { emitFrame(false); Http2Stream.this.getConnection().flush(); } return; } StringBuilder sb = new StringBuilder("Thread "); Thread currentThread = Thread.currentThread(); Intrinsics.checkNotNullExpressionValue(currentThread, "Thread.currentThread()"); throw new AssertionError(sb.append(currentThread.getName()).append(" MUST NOT hold lock on ").append(http2Stream).toString()); } @Override // okio.Sink, java.io.Closeable, java.lang.AutoCloseable public void close() throws IOException { Http2Stream http2Stream = Http2Stream.this; if (!Util.assertionsEnabled || !Thread.holdsLock(http2Stream)) { synchronized (Http2Stream.this) { if (this.closed) { return; } boolean z = Http2Stream.this.getErrorCode$okhttp() == null; Unit unit = Unit.INSTANCE; if (!Http2Stream.this.getSink().finished) { boolean z2 = this.sendBuffer.size() > 0; if (this.trailers != null) { while (this.sendBuffer.size() > 0) { emitFrame(false); } Http2Connection connection = Http2Stream.this.getConnection(); int id = Http2Stream.this.getId(); Headers headers = this.trailers; Intrinsics.checkNotNull(headers); connection.writeHeaders$okhttp(id, z, Util.toHeaderList(headers)); } else if (z2) { while (this.sendBuffer.size() > 0) { emitFrame(true); } } else if (z) { Http2Stream.this.getConnection().writeData(Http2Stream.this.getId(), true, null, 0L); } } synchronized (Http2Stream.this) { this.closed = true; Unit unit2 = Unit.INSTANCE; } Http2Stream.this.getConnection().flush(); Http2Stream.this.cancelStreamIfNecessary$okhttp(); return; } } StringBuilder sb = new StringBuilder("Thread "); Thread currentThread = Thread.currentThread(); Intrinsics.checkNotNullExpressionValue(currentThread, "Thread.currentThread()"); throw new AssertionError(sb.append(currentThread.getName()).append(" MUST NOT hold lock on ").append(http2Stream).toString()); } } public final void checkOutNotClosed$okhttp() throws IOException { if (this.sink.getClosed()) { throw new IOException("stream closed"); } if (this.sink.getFinished()) { throw new IOException("stream finished"); } if (this.errorCode != null) { Throwable th = this.errorException; if (th == null) { ErrorCode errorCode = this.errorCode; Intrinsics.checkNotNull(errorCode); th = new StreamResetException(errorCode); } throw th; } } /* compiled from: Http2Stream.kt */ @Metadata(bv = {1, 0, 3}, d1 = {"\u0000\u001a\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0010\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0003\b\u0080\u0004\u0018\u00002\u00020\u0001B\u0005¢\u0006\u0002\u0010\u0002J\u0006\u0010\u0003\u001a\u00020\u0004J\u0012\u0010\u0005\u001a\u00020\u00062\b\u0010\u0007\u001a\u0004\u0018\u00010\u0006H\u0014J\b\u0010\b\u001a\u00020\u0004H\u0014¨\u0006\t"}, d2 = {"Lokhttp3/internal/http2/Http2Stream$StreamTimeout;", "Lokio/AsyncTimeout;", "(Lokhttp3/internal/http2/Http2Stream;)V", "exitAndThrowIfTimedOut", "", "newTimeoutException", "Ljava/io/IOException;", "cause", "timedOut", "okhttp"}, k = 1, mv = {1, 4, 0}) /* loaded from: classes3.dex */ public final class StreamTimeout extends AsyncTimeout { public StreamTimeout() { } @Override // okio.AsyncTimeout protected void timedOut() { Http2Stream.this.closeLater(ErrorCode.CANCEL); Http2Stream.this.getConnection().sendDegradedPingLater$okhttp(); } @Override // okio.AsyncTimeout protected IOException newTimeoutException(IOException cause) { SocketTimeoutException socketTimeoutException = new SocketTimeoutException(ProfilingTraceData.TRUNCATION_REASON_TIMEOUT); if (cause != null) { socketTimeoutException.initCause(cause); } return socketTimeoutException; } public final void exitAndThrowIfTimedOut() throws IOException { if (exit()) { throw newTimeoutException(null); } } } public final void writeHeaders(List
responseHeaders, boolean outFinished, boolean flushHeaders) throws IOException { boolean z; Intrinsics.checkNotNullParameter(responseHeaders, "responseHeaders"); if (!Util.assertionsEnabled || !Thread.holdsLock(this)) { synchronized (this) { z = true; this.hasResponseHeaders = true; if (outFinished) { this.sink.setFinished(true); } Unit unit = Unit.INSTANCE; } if (!flushHeaders) { synchronized (this.connection) { if (this.connection.getWriteBytesTotal() < this.connection.getWriteBytesMaximum()) { z = false; } Unit unit2 = Unit.INSTANCE; } flushHeaders = z; } this.connection.writeHeaders$okhttp(this.id, outFinished, responseHeaders); if (flushHeaders) { this.connection.flush(); return; } return; } StringBuilder sb = new StringBuilder("Thread "); Thread currentThread = Thread.currentThread(); Intrinsics.checkNotNullExpressionValue(currentThread, "Thread.currentThread()"); throw new AssertionError(sb.append(currentThread.getName()).append(" MUST NOT hold lock on ").append(this).toString()); } private final boolean closeInternal(ErrorCode errorCode, IOException errorException) { if (!Util.assertionsEnabled || !Thread.holdsLock(this)) { synchronized (this) { if (this.errorCode != null) { return false; } if (this.source.getFinished() && this.sink.getFinished()) { return false; } this.errorCode = errorCode; this.errorException = errorException; notifyAll(); Unit unit = Unit.INSTANCE; this.connection.removeStream$okhttp(this.id); return true; } } StringBuilder sb = new StringBuilder("Thread "); Thread currentThread = Thread.currentThread(); Intrinsics.checkNotNullExpressionValue(currentThread, "Thread.currentThread()"); throw new AssertionError(sb.append(currentThread.getName()).append(" MUST NOT hold lock on ").append(this).toString()); } public final void receiveData(BufferedSource source, int length) throws IOException { Intrinsics.checkNotNullParameter(source, "source"); if (!Util.assertionsEnabled || !Thread.holdsLock(this)) { this.source.receive$okhttp(source, length); return; } StringBuilder sb = new StringBuilder("Thread "); Thread currentThread = Thread.currentThread(); Intrinsics.checkNotNullExpressionValue(currentThread, "Thread.currentThread()"); throw new AssertionError(sb.append(currentThread.getName()).append(" MUST NOT hold lock on ").append(this).toString()); } /* JADX WARN: Removed duplicated region for block: B:16:0x0058 A[Catch: all -> 0x0074, TryCatch #0 {, blocks: (B:10:0x003f, B:14:0x0047, B:16:0x0058, B:17:0x005d, B:24:0x004d), top: B:9:0x003f }] */ /* Code decompiled incorrectly, please refer to instructions dump. To view partially-correct add '--show-bad-code' argument */ public final void receiveHeaders(okhttp3.Headers r3, boolean r4) { /* r2 = this; java.lang.String r0 = "headers" kotlin.jvm.internal.Intrinsics.checkNotNullParameter(r3, r0) boolean r0 = okhttp3.internal.Util.assertionsEnabled if (r0 == 0) goto L3e boolean r0 = java.lang.Thread.holdsLock(r2) if (r0 != 0) goto L10 goto L3e L10: java.lang.AssertionError r3 = new java.lang.AssertionError java.lang.StringBuilder r4 = new java.lang.StringBuilder java.lang.String r0 = "Thread " r4.(r0) java.lang.Thread r0 = java.lang.Thread.currentThread() java.lang.String r1 = "Thread.currentThread()" kotlin.jvm.internal.Intrinsics.checkNotNullExpressionValue(r0, r1) java.lang.String r0 = r0.getName() java.lang.StringBuilder r4 = r4.append(r0) java.lang.String r0 = " MUST NOT hold lock on " java.lang.StringBuilder r4 = r4.append(r0) java.lang.StringBuilder r2 = r4.append(r2) java.lang.String r2 = r2.toString() r3.(r2) java.lang.Throwable r3 = (java.lang.Throwable) r3 throw r3 L3e: monitor-enter(r2) boolean r0 = r2.hasResponseHeaders // Catch: java.lang.Throwable -> L74 r1 = 1 if (r0 == 0) goto L4d if (r4 != 0) goto L47 goto L4d L47: okhttp3.internal.http2.Http2Stream$FramingSource r0 = r2.source // Catch: java.lang.Throwable -> L74 r0.setTrailers(r3) // Catch: java.lang.Throwable -> L74 goto L56 L4d: r2.hasResponseHeaders = r1 // Catch: java.lang.Throwable -> L74 java.util.ArrayDeque r0 = r2.headersQueue // Catch: java.lang.Throwable -> L74 java.util.Collection r0 = (java.util.Collection) r0 // Catch: java.lang.Throwable -> L74 r0.add(r3) // Catch: java.lang.Throwable -> L74 L56: if (r4 == 0) goto L5d okhttp3.internal.http2.Http2Stream$FramingSource r3 = r2.source // Catch: java.lang.Throwable -> L74 r3.setFinished$okhttp(r1) // Catch: java.lang.Throwable -> L74 L5d: boolean r3 = r2.isOpen() // Catch: java.lang.Throwable -> L74 r4 = r2 java.lang.Object r4 = (java.lang.Object) r4 // Catch: java.lang.Throwable -> L74 r4.notifyAll() // Catch: java.lang.Throwable -> L74 kotlin.Unit r4 = kotlin.Unit.INSTANCE // Catch: java.lang.Throwable -> L74 monitor-exit(r2) if (r3 != 0) goto L73 okhttp3.internal.http2.Http2Connection r3 = r2.connection int r2 = r2.id r3.removeStream$okhttp(r2) L73: return L74: r3 = move-exception monitor-exit(r2) throw r3 */ throw new UnsupportedOperationException("Method not decompiled: okhttp3.internal.http2.Http2Stream.receiveHeaders(okhttp3.Headers, boolean):void"); } public final synchronized void receiveRstStream(ErrorCode errorCode) { Intrinsics.checkNotNullParameter(errorCode, "errorCode"); if (this.errorCode == null) { this.errorCode = errorCode; notifyAll(); } } public final void cancelStreamIfNecessary$okhttp() throws IOException { boolean z; boolean isOpen; if (!Util.assertionsEnabled || !Thread.holdsLock(this)) { synchronized (this) { z = !this.source.getFinished() && this.source.getClosed() && (this.sink.getFinished() || this.sink.getClosed()); isOpen = isOpen(); Unit unit = Unit.INSTANCE; } if (z) { close(ErrorCode.CANCEL, null); return; } else { if (isOpen) { return; } this.connection.removeStream$okhttp(this.id); return; } } StringBuilder sb = new StringBuilder("Thread "); Thread currentThread = Thread.currentThread(); Intrinsics.checkNotNullExpressionValue(currentThread, "Thread.currentThread()"); throw new AssertionError(sb.append(currentThread.getName()).append(" MUST NOT hold lock on ").append(this).toString()); } public final void addBytesToWriteWindow(long delta) { this.writeBytesMaximum += delta; if (delta > 0) { notifyAll(); } } public final void waitForIo$okhttp() throws InterruptedIOException { try { wait(); } catch (InterruptedException unused) { Thread.currentThread().interrupt(); throw new InterruptedIOException(); } } }