189 lines
6.6 KiB
Java
189 lines
6.6 KiB
Java
package okhttp3;
|
|
|
|
import java.io.IOException;
|
|
import java.util.ArrayList;
|
|
import okhttp3.internal.NamedRunnable;
|
|
import okhttp3.internal.cache.CacheInterceptor;
|
|
import okhttp3.internal.connection.ConnectInterceptor;
|
|
import okhttp3.internal.connection.StreamAllocation;
|
|
import okhttp3.internal.http.BridgeInterceptor;
|
|
import okhttp3.internal.http.CallServerInterceptor;
|
|
import okhttp3.internal.http.RealInterceptorChain;
|
|
import okhttp3.internal.http.RetryAndFollowUpInterceptor;
|
|
import okhttp3.internal.platform.Platform;
|
|
|
|
/* loaded from: classes2.dex */
|
|
final class RealCall implements Call {
|
|
final OkHttpClient client;
|
|
private EventListener eventListener;
|
|
private boolean executed;
|
|
final boolean forWebSocket;
|
|
final Request originalRequest;
|
|
final RetryAndFollowUpInterceptor retryAndFollowUpInterceptor;
|
|
|
|
final class AsyncCall extends NamedRunnable {
|
|
private final Callback responseCallback;
|
|
|
|
AsyncCall(Callback callback) {
|
|
super("OkHttp %s", RealCall.this.redactedUrl());
|
|
this.responseCallback = callback;
|
|
}
|
|
|
|
@Override // okhttp3.internal.NamedRunnable
|
|
protected void execute() {
|
|
IOException e;
|
|
boolean z = true;
|
|
try {
|
|
try {
|
|
Response responseWithInterceptorChain = RealCall.this.getResponseWithInterceptorChain();
|
|
try {
|
|
if (RealCall.this.retryAndFollowUpInterceptor.isCanceled()) {
|
|
this.responseCallback.onFailure(RealCall.this, new IOException("Canceled"));
|
|
} else {
|
|
this.responseCallback.onResponse(RealCall.this, responseWithInterceptorChain);
|
|
}
|
|
} catch (IOException e2) {
|
|
e = e2;
|
|
if (z) {
|
|
Platform.get().log(4, "Callback failure for " + RealCall.this.toLoggableString(), e);
|
|
} else {
|
|
RealCall.this.eventListener.callFailed(RealCall.this, e);
|
|
this.responseCallback.onFailure(RealCall.this, e);
|
|
}
|
|
}
|
|
} finally {
|
|
RealCall.this.client.dispatcher().finished(this);
|
|
}
|
|
} catch (IOException e3) {
|
|
e = e3;
|
|
z = false;
|
|
}
|
|
}
|
|
|
|
RealCall get() {
|
|
return RealCall.this;
|
|
}
|
|
|
|
String host() {
|
|
return RealCall.this.originalRequest.url().host();
|
|
}
|
|
|
|
Request request() {
|
|
return RealCall.this.originalRequest;
|
|
}
|
|
}
|
|
|
|
private RealCall(OkHttpClient okHttpClient, Request request, boolean z) {
|
|
this.client = okHttpClient;
|
|
this.originalRequest = request;
|
|
this.forWebSocket = z;
|
|
this.retryAndFollowUpInterceptor = new RetryAndFollowUpInterceptor(okHttpClient, z);
|
|
}
|
|
|
|
private void captureCallStackTrace() {
|
|
this.retryAndFollowUpInterceptor.setCallStackTrace(Platform.get().getStackTraceForCloseable("response.body().close()"));
|
|
}
|
|
|
|
static RealCall newRealCall(OkHttpClient okHttpClient, Request request, boolean z) {
|
|
RealCall realCall = new RealCall(okHttpClient, request, z);
|
|
realCall.eventListener = okHttpClient.eventListenerFactory().create(realCall);
|
|
return realCall;
|
|
}
|
|
|
|
@Override // okhttp3.Call
|
|
public void cancel() {
|
|
this.retryAndFollowUpInterceptor.cancel();
|
|
}
|
|
|
|
@Override // okhttp3.Call
|
|
public void enqueue(Callback callback) {
|
|
synchronized (this) {
|
|
if (this.executed) {
|
|
throw new IllegalStateException("Already Executed");
|
|
}
|
|
this.executed = true;
|
|
}
|
|
captureCallStackTrace();
|
|
this.eventListener.callStart(this);
|
|
this.client.dispatcher().enqueue(new AsyncCall(callback));
|
|
}
|
|
|
|
@Override // okhttp3.Call
|
|
public Response execute() throws IOException {
|
|
synchronized (this) {
|
|
if (this.executed) {
|
|
throw new IllegalStateException("Already Executed");
|
|
}
|
|
this.executed = true;
|
|
}
|
|
captureCallStackTrace();
|
|
this.eventListener.callStart(this);
|
|
try {
|
|
try {
|
|
this.client.dispatcher().executed(this);
|
|
Response responseWithInterceptorChain = getResponseWithInterceptorChain();
|
|
if (responseWithInterceptorChain != null) {
|
|
return responseWithInterceptorChain;
|
|
}
|
|
throw new IOException("Canceled");
|
|
} catch (IOException e) {
|
|
this.eventListener.callFailed(this, e);
|
|
throw e;
|
|
}
|
|
} finally {
|
|
this.client.dispatcher().finished(this);
|
|
}
|
|
}
|
|
|
|
Response getResponseWithInterceptorChain() throws IOException {
|
|
ArrayList arrayList = new ArrayList();
|
|
arrayList.addAll(this.client.interceptors());
|
|
arrayList.add(this.retryAndFollowUpInterceptor);
|
|
arrayList.add(new BridgeInterceptor(this.client.cookieJar()));
|
|
arrayList.add(new CacheInterceptor(this.client.internalCache()));
|
|
arrayList.add(new ConnectInterceptor(this.client));
|
|
if (!this.forWebSocket) {
|
|
arrayList.addAll(this.client.networkInterceptors());
|
|
}
|
|
arrayList.add(new CallServerInterceptor(this.forWebSocket));
|
|
return new RealInterceptorChain(arrayList, null, null, null, 0, this.originalRequest, this, this.eventListener, this.client.connectTimeoutMillis(), this.client.readTimeoutMillis(), this.client.writeTimeoutMillis()).proceed(this.originalRequest);
|
|
}
|
|
|
|
@Override // okhttp3.Call
|
|
public boolean isCanceled() {
|
|
return this.retryAndFollowUpInterceptor.isCanceled();
|
|
}
|
|
|
|
@Override // okhttp3.Call
|
|
public synchronized boolean isExecuted() {
|
|
return this.executed;
|
|
}
|
|
|
|
String redactedUrl() {
|
|
return this.originalRequest.url().redact();
|
|
}
|
|
|
|
@Override // okhttp3.Call
|
|
public Request request() {
|
|
return this.originalRequest;
|
|
}
|
|
|
|
StreamAllocation streamAllocation() {
|
|
return this.retryAndFollowUpInterceptor.streamAllocation();
|
|
}
|
|
|
|
String toLoggableString() {
|
|
StringBuilder sb = new StringBuilder();
|
|
sb.append(isCanceled() ? "canceled " : "");
|
|
sb.append(this.forWebSocket ? "web socket" : "call");
|
|
sb.append(" to ");
|
|
sb.append(redactedUrl());
|
|
return sb.toString();
|
|
}
|
|
|
|
@Override // okhttp3.Call
|
|
public RealCall clone() {
|
|
return newRealCall(this.client, this.originalRequest, this.forWebSocket);
|
|
}
|
|
}
|