what-the-bank/sources/okhttp3/repackaged/internal/http/Http1xStream.java

567 lines
18 KiB
Java

package okhttp3.repackaged.internal.http;
import com.google.common.net.HttpHeaders;
import java.io.EOFException;
import java.io.IOException;
import java.net.ProtocolException;
import java.util.concurrent.TimeUnit;
import o.C15145giV;
import o.InterfaceC15142giR;
import o.giM;
import o.giO;
import o.giW;
import o.giX;
import o.giY;
import o.giZ;
import okhttp3.repackaged.Headers;
import okhttp3.repackaged.Request;
import okhttp3.repackaged.Response;
import okhttp3.repackaged.ResponseBody;
import okhttp3.repackaged.internal.Internal;
import okhttp3.repackaged.internal.Util;
import okhttp3.repackaged.internal.io.RealConnection;
/* loaded from: classes6.dex */
public final class Http1xStream implements HttpStream {
private static final int STATE_IDLE = 0;
private static final int alA = 1;
private static final int alB = 2;
private static final int alC = 3;
private static final int alD = 4;
private static final int alE = 5;
private static final int alF = 6;
private HttpEngine httpEngine;
private final giO sink;
private final InterfaceC15142giR source;
private int state = 0;
private final StreamAllocation streamAllocation;
public Http1xStream(StreamAllocation streamAllocation, InterfaceC15142giR interfaceC15142giR, giO gio) {
this.streamAllocation = streamAllocation;
this.source = interfaceC15142giR;
this.sink = gio;
}
@Override // okhttp3.repackaged.internal.http.HttpStream
public final giX createRequestBody(Request request, long j) throws IOException {
if ("chunked".equalsIgnoreCase(request.header(HttpHeaders.TRANSFER_ENCODING))) {
return newChunkedSink();
}
if (j != -1) {
return newFixedLengthSink(j);
}
throw new IllegalStateException("Cannot stream a request body without chunked encoding or a known content length!");
}
@Override // okhttp3.repackaged.internal.http.HttpStream
public final void cancel() {
RealConnection connection = this.streamAllocation.connection();
if (connection != null) {
connection.cancel();
}
}
@Override // okhttp3.repackaged.internal.http.HttpStream
public final void writeRequestHeaders(Request request) throws IOException {
this.httpEngine.writingRequestHeaders();
writeRequest(request.headers(), RequestLine.a(request, this.httpEngine.getConnection().route().proxy().type()));
}
@Override // okhttp3.repackaged.internal.http.HttpStream
public final Response.Builder readResponseHeaders() throws IOException {
return readResponse();
}
@Override // okhttp3.repackaged.internal.http.HttpStream
public final ResponseBody openResponseBody(Response response) throws IOException {
return new RealResponseBody(response.headers(), C15145giV.a(l(response)));
}
private giZ l(Response response) throws IOException {
if (!HttpEngine.hasBody(response)) {
return newFixedLengthSource(0L);
}
if ("chunked".equalsIgnoreCase(response.header(HttpHeaders.TRANSFER_ENCODING))) {
return newChunkedSource(this.httpEngine);
}
long contentLength = OkHeaders.contentLength(response);
if (contentLength != -1) {
return newFixedLengthSource(contentLength);
}
return newUnknownLengthSource();
}
@Override // okhttp3.repackaged.internal.http.HttpStream
public final void finishRequest() throws IOException {
this.sink.flush();
}
public final void writeRequest(Headers headers, String str) throws IOException {
if (this.state != 0) {
StringBuilder sb = new StringBuilder("state: ");
sb.append(this.state);
throw new IllegalStateException(sb.toString());
}
this.sink.c(str).c("\r\n");
int size = headers.size();
for (int i = 0; i < size; i++) {
this.sink.c(headers.name(i)).c(": ").c(headers.value(i)).c("\r\n");
}
this.sink.c("\r\n");
this.state = 1;
}
public final Response.Builder readResponse() throws IOException {
StatusLine parse;
Response.Builder headers;
int i = this.state;
if (i != 1 && i != 3) {
StringBuilder sb = new StringBuilder("state: ");
sb.append(this.state);
throw new IllegalStateException(sb.toString());
}
do {
try {
parse = StatusLine.parse(this.source.p());
headers = new Response.Builder().protocol(parse.protocol).code(parse.code).message(parse.message).headers(readHeaders());
} catch (EOFException e2) {
StringBuilder sb2 = new StringBuilder("unexpected end of stream on ");
sb2.append(this.streamAllocation);
IOException iOException = new IOException(sb2.toString());
iOException.initCause(e2);
throw iOException;
}
} while (parse.code == 100);
this.state = 4;
return headers;
}
public final Headers readHeaders() throws IOException {
Headers.Builder builder = new Headers.Builder();
while (true) {
String p = this.source.p();
if (p.length() != 0) {
Internal.instance.addLenient(builder, p);
} else {
return builder.build();
}
}
}
public final giX newChunkedSink() {
if (this.state != 1) {
StringBuilder sb = new StringBuilder("state: ");
sb.append(this.state);
throw new IllegalStateException(sb.toString());
}
this.state = 2;
return new b();
}
public final giX newFixedLengthSink(long j) {
if (this.state != 1) {
StringBuilder sb = new StringBuilder("state: ");
sb.append(this.state);
throw new IllegalStateException(sb.toString());
}
this.state = 2;
return new d(j);
}
@Override // okhttp3.repackaged.internal.http.HttpStream
public final void writeRequestBody(RetryableSink retryableSink) throws IOException {
if (this.state != 1) {
StringBuilder sb = new StringBuilder("state: ");
sb.append(this.state);
throw new IllegalStateException(sb.toString());
}
this.state = 3;
retryableSink.writeToSocket(this.sink);
}
public final giZ newFixedLengthSource(long j) throws IOException {
if (this.state != 4) {
StringBuilder sb = new StringBuilder("state: ");
sb.append(this.state);
throw new IllegalStateException(sb.toString());
}
this.state = 5;
return new e(this, j);
}
public final giZ newChunkedSource(HttpEngine httpEngine) throws IOException {
if (this.state != 4) {
StringBuilder sb = new StringBuilder("state: ");
sb.append(this.state);
throw new IllegalStateException(sb.toString());
}
this.state = 5;
return new c(this, httpEngine);
}
public final giZ newUnknownLengthSource() throws IOException {
if (this.state != 4) {
StringBuilder sb = new StringBuilder("state: ");
sb.append(this.state);
throw new IllegalStateException(sb.toString());
}
StreamAllocation streamAllocation = this.streamAllocation;
if (streamAllocation == null) {
throw new IllegalStateException("streamAllocation == null");
}
this.state = 5;
streamAllocation.noNewStreams();
return new f();
}
/* JADX INFO: Access modifiers changed from: package-private */
/* loaded from: classes6.dex */
public final class d implements giX {
private final giW alG;
final Http1xStream alH;
private long alL;
private boolean closed;
private d(Http1xStream http1xStream, long j) {
this.alH = http1xStream;
this.alG = new giW(http1xStream.sink.timeout());
this.alL = j;
}
@Override // o.giX, java.io.Flushable
public final void flush() throws IOException {
if (this.closed) {
return;
}
this.alH.sink.flush();
}
@Override // o.giX, java.io.Closeable, java.lang.AutoCloseable
public final void close() throws IOException {
if (this.closed) {
return;
}
this.closed = true;
if (this.alL <= 0) {
this.alH.a(this.alG);
this.alH.state = 3;
return;
}
throw new ProtocolException("unexpected end of stream");
}
@Override // o.giX
public final void write(giM gim, long j) throws IOException {
if (this.closed) {
throw new IllegalStateException("closed");
}
Util.checkOffsetAndCount(gim.a, 0L, j);
if (j <= this.alL) {
this.alH.sink.write(gim, j);
this.alL -= j;
} else {
StringBuilder sb = new StringBuilder("expected ");
sb.append(this.alL);
sb.append(" bytes but received ");
sb.append(j);
throw new ProtocolException(sb.toString());
}
}
@Override // o.giX
public final giY timeout() {
return this.alG;
}
}
/* JADX INFO: Access modifiers changed from: package-private */
/* loaded from: classes6.dex */
public final class b implements giX {
private final giW alG;
final Http1xStream alH;
private boolean closed;
private b(Http1xStream http1xStream) {
this.alH = http1xStream;
this.alG = new giW(http1xStream.sink.timeout());
}
@Override // o.giX
public final void write(giM gim, long j) throws IOException {
if (this.closed) {
throw new IllegalStateException("closed");
}
if (j == 0) {
return;
}
this.alH.sink.k(j);
this.alH.sink.c("\r\n");
this.alH.sink.write(gim, j);
this.alH.sink.c("\r\n");
}
@Override // o.giX, java.io.Flushable
public final void flush() throws IOException {
synchronized (this) {
if (this.closed) {
return;
}
this.alH.sink.flush();
}
}
@Override // o.giX, java.io.Closeable, java.lang.AutoCloseable
public final void close() throws IOException {
synchronized (this) {
if (this.closed) {
return;
}
this.closed = true;
this.alH.sink.c("0\r\n\r\n");
this.alH.a(this.alG);
this.alH.state = 3;
}
}
@Override // o.giX
public final giY timeout() {
return this.alG;
}
}
/* JADX INFO: Access modifiers changed from: package-private */
/* loaded from: classes6.dex */
public abstract class a implements giZ {
protected final giW alG;
final Http1xStream alH;
protected boolean closed;
private a(Http1xStream http1xStream) {
this.alH = http1xStream;
this.alG = new giW(http1xStream.source.timeout());
}
protected final void B(boolean z) throws IOException {
if (this.alH.state == 6) {
return;
}
if (this.alH.state == 5) {
this.alH.a(this.alG);
this.alH.state = 6;
if (this.alH.streamAllocation != null) {
this.alH.streamAllocation.streamFinished(!z, this.alH);
return;
}
return;
}
StringBuilder sb = new StringBuilder("state: ");
sb.append(this.alH.state);
throw new IllegalStateException(sb.toString());
}
@Override // o.giZ
public giY timeout() {
return this.alG;
}
}
/* JADX INFO: Access modifiers changed from: package-private */
/* loaded from: classes6.dex */
public class e extends a {
final Http1xStream alH;
private long alL;
/* JADX WARN: 'super' call moved to the top of the method (can break code semantics) */
public e(Http1xStream http1xStream, long j) throws IOException {
super();
this.alH = http1xStream;
this.alL = j;
if (j == 0) {
B(true);
}
}
@Override // o.giZ
public long read(giM gim, long j) throws IOException {
if (j < 0) {
throw new IllegalArgumentException("byteCount < 0: ".concat(String.valueOf(j)));
}
if (this.closed) {
throw new IllegalStateException("closed");
}
if (this.alL == 0) {
return -1L;
}
long read = this.alH.source.read(gim, Math.min(this.alL, j));
if (read == -1) {
B(false);
throw new ProtocolException("unexpected end of stream");
}
long j2 = this.alL - read;
this.alL = j2;
if (j2 == 0) {
B(true);
}
return read;
}
@Override // o.giZ, java.io.Closeable, java.lang.AutoCloseable
public void close() throws IOException {
if (this.closed) {
return;
}
if (this.alL != 0 && !Util.discard(this, 100, TimeUnit.MILLISECONDS)) {
B(false);
}
this.closed = true;
}
}
/* JADX INFO: Access modifiers changed from: package-private */
/* loaded from: classes6.dex */
public class c extends a {
private static final long alI = -1;
final Http1xStream alH;
private long alJ;
private boolean alK;
private final HttpEngine httpEngine;
/* JADX WARN: 'super' call moved to the top of the method (can break code semantics) */
c(Http1xStream http1xStream, HttpEngine httpEngine) throws IOException {
super();
this.alH = http1xStream;
this.alJ = -1L;
this.alK = true;
this.httpEngine = httpEngine;
}
@Override // o.giZ
public long read(giM gim, long j) throws IOException {
if (j < 0) {
throw new IllegalArgumentException("byteCount < 0: ".concat(String.valueOf(j)));
}
if (this.closed) {
throw new IllegalStateException("closed");
}
if (!this.alK) {
return -1L;
}
long j2 = this.alJ;
if (j2 == 0 || j2 == -1) {
uX();
if (!this.alK) {
return -1L;
}
}
long read = this.alH.source.read(gim, Math.min(j, this.alJ));
if (read != -1) {
this.alJ -= read;
return read;
}
B(false);
throw new ProtocolException("unexpected end of stream");
}
private void uX() throws IOException {
if (this.alJ != -1) {
this.alH.source.p();
}
try {
this.alJ = this.alH.source.l();
String trim = this.alH.source.p().trim();
if (this.alJ < 0 || !(trim.isEmpty() || trim.startsWith(";"))) {
StringBuilder sb = new StringBuilder("expected chunk size and optional extensions but was \"");
sb.append(this.alJ);
sb.append(trim);
sb.append("\"");
throw new ProtocolException(sb.toString());
}
if (this.alJ == 0) {
this.alK = false;
this.httpEngine.receiveHeaders(this.alH.readHeaders());
B(true);
}
} catch (NumberFormatException e) {
throw new ProtocolException(e.getMessage());
}
}
@Override // o.giZ, java.io.Closeable, java.lang.AutoCloseable
public void close() throws IOException {
if (this.closed) {
return;
}
if (this.alK && !Util.discard(this, 100, TimeUnit.MILLISECONDS)) {
B(false);
}
this.closed = true;
}
}
/* JADX INFO: Access modifiers changed from: package-private */
/* loaded from: classes6.dex */
public class f extends a {
final Http1xStream alH;
private boolean alM;
/* JADX WARN: 'super' call moved to the top of the method (can break code semantics) */
private f(Http1xStream http1xStream) {
super();
this.alH = http1xStream;
}
@Override // o.giZ
public long read(giM gim, long j) throws IOException {
if (j < 0) {
throw new IllegalArgumentException("byteCount < 0: ".concat(String.valueOf(j)));
}
if (this.closed) {
throw new IllegalStateException("closed");
}
if (this.alM) {
return -1L;
}
long read = this.alH.source.read(gim, j);
if (read != -1) {
return read;
}
this.alM = true;
B(true);
return -1L;
}
@Override // o.giZ, java.io.Closeable, java.lang.AutoCloseable
public void close() throws IOException {
if (this.closed) {
return;
}
if (!this.alM) {
B(false);
}
this.closed = true;
}
}
/* JADX INFO: Access modifiers changed from: private */
public void a(giW giw) {
giY giy = giw.b;
giY giy2 = giY.NONE;
if (giy2 != null) {
giw.b = giy2;
giy.clearDeadline();
giy.clearTimeout();
return;
}
throw new IllegalArgumentException("delegate == null");
}
@Override // okhttp3.repackaged.internal.http.HttpStream
public final void setHttpEngine(HttpEngine httpEngine) {
this.httpEngine = httpEngine;
}
public final boolean isClosed() {
return this.state == 6;
}
}