.class public final Lokhttp3/internal/http/RetryAndFollowUpInterceptor; .super Ljava/lang/Object; .source "SourceFile" # interfaces .implements Lokhttp3/Interceptor; # instance fields .field public final client:Lokhttp3/OkHttpClient; # direct methods .method public constructor (Lokhttp3/OkHttpClient;)V .locals 0 .line 67 invoke-direct {p0}, Ljava/lang/Object;->()V iput-object p1, p0, Lokhttp3/internal/http/RetryAndFollowUpInterceptor;->client:Lokhttp3/OkHttpClient; return-void .end method # virtual methods .method public final followUpRequest(Lokhttp3/Response;Lokhttp3/Route;)Lokhttp3/Request; .locals 6 if-eqz p1, :cond_16 .line 216 invoke-virtual {p1}, Lokhttp3/Response;->code()I move-result v0 .line 218 invoke-virtual {p1}, Lokhttp3/Response;->request()Lokhttp3/Request; move-result-object v1 invoke-virtual {v1}, Lokhttp3/Request;->method()Ljava/lang/String; move-result-object v1 const/16 v2, 0x133 const-string v3, "GET" const/4 v4, 0x0 if-eq v0, v2, :cond_c const/16 v2, 0x134 if-eq v0, v2, :cond_c const/16 v2, 0x191 if-eq v0, v2, :cond_b const/16 v2, 0x1f7 if-eq v0, v2, :cond_8 const/16 v2, 0x197 if-eq v0, v2, :cond_5 const/16 p2, 0x198 if-eq v0, p2, :cond_0 packed-switch v0, :pswitch_data_0 return-object v4 :cond_0 iget-object v0, p0, Lokhttp3/internal/http/RetryAndFollowUpInterceptor;->client:Lokhttp3/OkHttpClient; .line 288 invoke-virtual {v0}, Lokhttp3/OkHttpClient;->retryOnConnectionFailure()Z move-result v0 if-nez v0, :cond_1 return-object v4 .line 293 :cond_1 invoke-virtual {p1}, Lokhttp3/Response;->request()Lokhttp3/Request; move-result-object v0 invoke-virtual {v0}, Lokhttp3/Request;->body()Lokhttp3/RequestBody; move-result-object v0 if-eqz v0, :cond_2 .line 294 invoke-virtual {v0}, Lokhttp3/RequestBody;->isOneShot()Z move-result v0 if-eqz v0, :cond_2 return-object v4 .line 298 :cond_2 invoke-virtual {p1}, Lokhttp3/Response;->priorResponse()Lokhttp3/Response; move-result-object v0 if-eqz v0, :cond_3 .line 299 invoke-virtual {p1}, Lokhttp3/Response;->priorResponse()Lokhttp3/Response; move-result-object v0 invoke-virtual {v0}, Lokhttp3/Response;->code()I move-result v0 if-ne v0, p2, :cond_3 return-object v4 :cond_3 const/4 p2, 0x0 .line 304 invoke-virtual {p0, p1, p2}, Lokhttp3/internal/http/RetryAndFollowUpInterceptor;->retryAfter(Lokhttp3/Response;I)I move-result p2 if-lez p2, :cond_4 return-object v4 .line 308 :cond_4 invoke-virtual {p1}, Lokhttp3/Response;->request()Lokhttp3/Request; move-result-object p1 return-object p1 :cond_5 if-eqz p2, :cond_6 .line 222 invoke-virtual {p2}, Lokhttp3/Route;->proxy()Ljava/net/Proxy; move-result-object v0 goto :goto_0 :cond_6 iget-object v0, p0, Lokhttp3/internal/http/RetryAndFollowUpInterceptor;->client:Lokhttp3/OkHttpClient; .line 223 invoke-virtual {v0}, Lokhttp3/OkHttpClient;->proxy()Ljava/net/Proxy; move-result-object v0 .line 224 :goto_0 invoke-virtual {v0}, Ljava/net/Proxy;->type()Ljava/net/Proxy$Type; move-result-object v0 sget-object v1, Ljava/net/Proxy$Type;->HTTP:Ljava/net/Proxy$Type; if-ne v0, v1, :cond_7 iget-object v0, p0, Lokhttp3/internal/http/RetryAndFollowUpInterceptor;->client:Lokhttp3/OkHttpClient; .line 227 invoke-virtual {v0}, Lokhttp3/OkHttpClient;->proxyAuthenticator()Lokhttp3/Authenticator; move-result-object v0 invoke-interface {v0, p2, p1}, Lokhttp3/Authenticator;->authenticate(Lokhttp3/Route;Lokhttp3/Response;)Lokhttp3/Request; move-result-object p1 return-object p1 .line 225 :cond_7 new-instance p1, Ljava/net/ProtocolException; const-string p2, "Received HTTP_PROXY_AUTH (407) code while not using proxy" invoke-direct {p1, p2}, Ljava/net/ProtocolException;->(Ljava/lang/String;)V throw p1 .line 311 :cond_8 invoke-virtual {p1}, Lokhttp3/Response;->priorResponse()Lokhttp3/Response; move-result-object p2 if-eqz p2, :cond_9 .line 312 invoke-virtual {p1}, Lokhttp3/Response;->priorResponse()Lokhttp3/Response; move-result-object p2 invoke-virtual {p2}, Lokhttp3/Response;->code()I move-result p2 if-ne p2, v2, :cond_9 return-object v4 :cond_9 const p2, 0x7fffffff .line 317 invoke-virtual {p0, p1, p2}, Lokhttp3/internal/http/RetryAndFollowUpInterceptor;->retryAfter(Lokhttp3/Response;I)I move-result p2 if-nez p2, :cond_a .line 319 invoke-virtual {p1}, Lokhttp3/Response;->request()Lokhttp3/Request; move-result-object p1 return-object p1 :cond_a return-object v4 :cond_b iget-object v0, p0, Lokhttp3/internal/http/RetryAndFollowUpInterceptor;->client:Lokhttp3/OkHttpClient; .line 230 invoke-virtual {v0}, Lokhttp3/OkHttpClient;->authenticator()Lokhttp3/Authenticator; move-result-object v0 invoke-interface {v0, p2, p1}, Lokhttp3/Authenticator;->authenticate(Lokhttp3/Route;Lokhttp3/Response;)Lokhttp3/Request; move-result-object p1 return-object p1 .line 236 :cond_c invoke-virtual {v1, v3}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z move-result p2 if-nez p2, :cond_d const-string p2, "HEAD" invoke-virtual {v1, p2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z move-result p2 if-nez p2, :cond_d return-object v4 :cond_d :pswitch_0 iget-object p2, p0, Lokhttp3/internal/http/RetryAndFollowUpInterceptor;->client:Lokhttp3/OkHttpClient; .line 245 invoke-virtual {p2}, Lokhttp3/OkHttpClient;->followRedirects()Z move-result p2 if-nez p2, :cond_e return-object v4 :cond_e const-string p2, "Location" .line 247 invoke-virtual {p1, p2}, Lokhttp3/Response;->header(Ljava/lang/String;)Ljava/lang/String; move-result-object p2 if-nez p2, :cond_f return-object v4 .line 249 :cond_f invoke-virtual {p1}, Lokhttp3/Response;->request()Lokhttp3/Request; move-result-object v0 invoke-virtual {v0}, Lokhttp3/Request;->url()Lokhttp3/HttpUrl; move-result-object v0 invoke-virtual {v0, p2}, Lokhttp3/HttpUrl;->resolve(Ljava/lang/String;)Lokhttp3/HttpUrl; move-result-object p2 if-nez p2, :cond_10 return-object v4 .line 255 :cond_10 invoke-virtual {p2}, Lokhttp3/HttpUrl;->scheme()Ljava/lang/String; move-result-object v0 invoke-virtual {p1}, Lokhttp3/Response;->request()Lokhttp3/Request; move-result-object v2 invoke-virtual {v2}, Lokhttp3/Request;->url()Lokhttp3/HttpUrl; move-result-object v2 invoke-virtual {v2}, Lokhttp3/HttpUrl;->scheme()Ljava/lang/String; move-result-object v2 invoke-virtual {v0, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z move-result v0 if-nez v0, :cond_11 iget-object v0, p0, Lokhttp3/internal/http/RetryAndFollowUpInterceptor;->client:Lokhttp3/OkHttpClient; .line 256 invoke-virtual {v0}, Lokhttp3/OkHttpClient;->followSslRedirects()Z move-result v0 if-nez v0, :cond_11 return-object v4 .line 259 :cond_11 invoke-virtual {p1}, Lokhttp3/Response;->request()Lokhttp3/Request; move-result-object v0 invoke-virtual {v0}, Lokhttp3/Request;->newBuilder()Lokhttp3/Request$Builder; move-result-object v0 .line 260 invoke-static {v1}, Lokhttp3/internal/http/HttpMethod;->permitsRequestBody(Ljava/lang/String;)Z move-result v2 if-eqz v2, :cond_14 .line 261 invoke-static {v1}, Lokhttp3/internal/http/HttpMethod;->redirectsWithBody(Ljava/lang/String;)Z move-result v2 .line 262 invoke-static {v1}, Lokhttp3/internal/http/HttpMethod;->redirectsToGet(Ljava/lang/String;)Z move-result v5 if-eqz v5, :cond_12 .line 263 invoke-virtual {v0, v3, v4}, Lokhttp3/Request$Builder;->method(Ljava/lang/String;Lokhttp3/RequestBody;)Lokhttp3/Request$Builder; goto :goto_1 :cond_12 if-eqz v2, :cond_13 .line 265 invoke-virtual {p1}, Lokhttp3/Response;->request()Lokhttp3/Request; move-result-object v3 invoke-virtual {v3}, Lokhttp3/Request;->body()Lokhttp3/RequestBody; move-result-object v4 .line 266 :cond_13 invoke-virtual {v0, v1, v4}, Lokhttp3/Request$Builder;->method(Ljava/lang/String;Lokhttp3/RequestBody;)Lokhttp3/Request$Builder; :goto_1 if-nez v2, :cond_14 const-string v1, "Transfer-Encoding" .line 269 invoke-virtual {v0, v1}, Lokhttp3/Request$Builder;->removeHeader(Ljava/lang/String;)Lokhttp3/Request$Builder; const-string v1, "Content-Length" .line 270 invoke-virtual {v0, v1}, Lokhttp3/Request$Builder;->removeHeader(Ljava/lang/String;)Lokhttp3/Request$Builder; const-string v1, "Content-Type" .line 271 invoke-virtual {v0, v1}, Lokhttp3/Request$Builder;->removeHeader(Ljava/lang/String;)Lokhttp3/Request$Builder; .line 278 :cond_14 invoke-virtual {p1}, Lokhttp3/Response;->request()Lokhttp3/Request; move-result-object p1 invoke-virtual {p1}, Lokhttp3/Request;->url()Lokhttp3/HttpUrl; move-result-object p1 invoke-static {p1, p2}, Lokhttp3/internal/Util;->sameConnection(Lokhttp3/HttpUrl;Lokhttp3/HttpUrl;)Z move-result p1 if-nez p1, :cond_15 const-string p1, "Authorization" .line 279 invoke-virtual {v0, p1}, Lokhttp3/Request$Builder;->removeHeader(Ljava/lang/String;)Lokhttp3/Request$Builder; .line 282 :cond_15 invoke-virtual {v0, p2}, Lokhttp3/Request$Builder;->url(Lokhttp3/HttpUrl;)Lokhttp3/Request$Builder; move-result-object p1 invoke-virtual {p1}, Lokhttp3/Request$Builder;->build()Lokhttp3/Request; move-result-object p1 return-object p1 .line 215 :cond_16 new-instance p1, Ljava/lang/IllegalStateException; invoke-direct {p1}, Ljava/lang/IllegalStateException;->()V throw p1 nop :pswitch_data_0 .packed-switch 0x12c :pswitch_0 :pswitch_0 :pswitch_0 :pswitch_0 .end packed-switch .end method .method public intercept(Lokhttp3/Interceptor$Chain;)Lokhttp3/Response; .locals 8 .line 72 invoke-interface {p1}, Lokhttp3/Interceptor$Chain;->request()Lokhttp3/Request; move-result-object v0 .line 73 check-cast p1, Lokhttp3/internal/http/RealInterceptorChain; .line 74 invoke-virtual {p1}, Lokhttp3/internal/http/RealInterceptorChain;->transmitter()Lokhttp3/internal/connection/Transmitter; move-result-object v1 const/4 v2, 0x0 const/4 v3, 0x0 move v5, v2 move-object v4, v3 .line 79 :goto_0 invoke-virtual {v1, v0}, Lokhttp3/internal/connection/Transmitter;->prepareToConnect(Lokhttp3/Request;)V .line 81 invoke-virtual {v1}, Lokhttp3/internal/connection/Transmitter;->isCanceled()Z move-result v6 if-nez v6, :cond_9 .line 88 :try_start_0 invoke-virtual {p1, v0, v1, v3}, Lokhttp3/internal/http/RealInterceptorChain;->proceed(Lokhttp3/Request;Lokhttp3/internal/connection/Transmitter;Lokhttp3/internal/connection/Exchange;)Lokhttp3/Response; move-result-object v0 :try_end_0 .catch Lokhttp3/internal/connection/RouteException; {:try_start_0 .. :try_end_0} :catch_1 .catch Ljava/io/IOException; {:try_start_0 .. :try_end_0} :catch_0 .catchall {:try_start_0 .. :try_end_0} :catchall_0 if-eqz v4, :cond_0 .line 110 invoke-virtual {v0}, Lokhttp3/Response;->newBuilder()Lokhttp3/Response$Builder; move-result-object v0 .line 111 invoke-virtual {v4}, Lokhttp3/Response;->newBuilder()Lokhttp3/Response$Builder; move-result-object v4 .line 112 invoke-virtual {v4, v3}, Lokhttp3/Response$Builder;->body(Lokhttp3/ResponseBody;)Lokhttp3/Response$Builder; move-result-object v4 .line 113 invoke-virtual {v4}, Lokhttp3/Response$Builder;->build()Lokhttp3/Response; move-result-object v4 .line 111 invoke-virtual {v0, v4}, Lokhttp3/Response$Builder;->priorResponse(Lokhttp3/Response;)Lokhttp3/Response$Builder; move-result-object v0 .line 114 invoke-virtual {v0}, Lokhttp3/Response$Builder;->build()Lokhttp3/Response; move-result-object v0 :cond_0 move-object v4, v0 sget-object v0, Lokhttp3/internal/Internal;->instance:Lokhttp3/internal/Internal; .line 117 invoke-virtual {v0, v4}, Lokhttp3/internal/Internal;->exchange(Lokhttp3/Response;)Lokhttp3/internal/connection/Exchange; move-result-object v0 if-eqz v0, :cond_1 .line 118 invoke-virtual {v0}, Lokhttp3/internal/connection/Exchange;->connection()Lokhttp3/internal/connection/RealConnection; move-result-object v6 invoke-virtual {v6}, Lokhttp3/internal/connection/RealConnection;->route()Lokhttp3/Route; move-result-object v6 goto :goto_1 :cond_1 move-object v6, v3 .line 119 :goto_1 invoke-virtual {p0, v4, v6}, Lokhttp3/internal/http/RetryAndFollowUpInterceptor;->followUpRequest(Lokhttp3/Response;Lokhttp3/Route;)Lokhttp3/Request; move-result-object v6 if-nez v6, :cond_3 if-eqz v0, :cond_2 .line 122 invoke-virtual {v0}, Lokhttp3/internal/connection/Exchange;->isDuplex()Z move-result p1 if-eqz p1, :cond_2 .line 123 invoke-virtual {v1}, Lokhttp3/internal/connection/Transmitter;->timeoutEarlyExit()V :cond_2 return-object v4 .line 128 :cond_3 invoke-virtual {v6}, Lokhttp3/Request;->body()Lokhttp3/RequestBody; move-result-object v7 if-eqz v7, :cond_4 .line 129 invoke-virtual {v7}, Lokhttp3/RequestBody;->isOneShot()Z move-result v7 if-eqz v7, :cond_4 return-object v4 .line 133 :cond_4 invoke-virtual {v4}, Lokhttp3/Response;->body()Lokhttp3/ResponseBody; move-result-object v7 invoke-static {v7}, Lokhttp3/internal/Util;->closeQuietly(Ljava/io/Closeable;)V .line 134 invoke-virtual {v1}, Lokhttp3/internal/connection/Transmitter;->hasExchange()Z move-result v7 if-eqz v7, :cond_5 .line 135 invoke-virtual {v0}, Lokhttp3/internal/connection/Exchange;->detachWithViolence()V :cond_5 add-int/lit8 v5, v5, 0x1 const/16 v0, 0x14 if-gt v5, v0, :cond_6 move-object v0, v6 goto :goto_0 .line 139 :cond_6 new-instance p1, Ljava/net/ProtocolException; new-instance v0, Ljava/lang/StringBuilder; invoke-direct {v0}, Ljava/lang/StringBuilder;->()V const-string v1, "Too many follow-up requests: " invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {v0, v5}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v0 invoke-direct {p1, v0}, Ljava/net/ProtocolException;->(Ljava/lang/String;)V throw p1 :catchall_0 move-exception p1 goto :goto_3 :catch_0 move-exception v6 .line 98 :try_start_1 instance-of v7, v6, Lokhttp3/internal/http2/ConnectionShutdownException; xor-int/lit8 v7, v7, 0x1 .line 99 invoke-virtual {p0, v6, v1, v7, v0}, Lokhttp3/internal/http/RetryAndFollowUpInterceptor;->recover(Ljava/io/IOException;Lokhttp3/internal/connection/Transmitter;ZLokhttp3/Request;)Z move-result v7 :try_end_1 .catchall {:try_start_1 .. :try_end_1} :catchall_0 if-eqz v7, :cond_7 .line 104 :goto_2 invoke-virtual {v1}, Lokhttp3/internal/connection/Transmitter;->exchangeDoneDueToException()V goto/16 :goto_0 .line 99 :cond_7 :try_start_2 throw v6 :catch_1 move-exception v6 .line 92 invoke-virtual {v6}, Lokhttp3/internal/connection/RouteException;->getLastConnectException()Ljava/io/IOException; move-result-object v7 invoke-virtual {p0, v7, v1, v2, v0}, Lokhttp3/internal/http/RetryAndFollowUpInterceptor;->recover(Ljava/io/IOException;Lokhttp3/internal/connection/Transmitter;ZLokhttp3/Request;)Z move-result v7 if-eqz v7, :cond_8 goto :goto_2 .line 93 :cond_8 invoke-virtual {v6}, Lokhttp3/internal/connection/RouteException;->getFirstConnectException()Ljava/io/IOException; move-result-object p1 throw p1 :try_end_2 .catchall {:try_start_2 .. :try_end_2} :catchall_0 .line 104 :goto_3 invoke-virtual {v1}, Lokhttp3/internal/connection/Transmitter;->exchangeDoneDueToException()V throw p1 .line 82 :cond_9 new-instance p1, Ljava/io/IOException; const-string v0, "Canceled" invoke-direct {p1, v0}, Ljava/io/IOException;->(Ljava/lang/String;)V throw p1 .end method .method public final isRecoverable(Ljava/io/IOException;Z)Z .locals 3 .line 179 instance-of v0, p1, Ljava/net/ProtocolException; const/4 v1, 0x0 if-eqz v0, :cond_0 return v1 .line 185 :cond_0 instance-of v0, p1, Ljava/io/InterruptedIOException; const/4 v2, 0x1 if-eqz v0, :cond_2 .line 186 instance-of p1, p1, Ljava/net/SocketTimeoutException; if-eqz p1, :cond_1 if-nez p2, :cond_1 move v1, v2 :cond_1 return v1 .line 191 :cond_2 instance-of p2, p1, Ljavax/net/ssl/SSLHandshakeException; if-eqz p2, :cond_3 .line 194 invoke-virtual {p1}, Ljava/lang/Throwable;->getCause()Ljava/lang/Throwable; move-result-object p2 instance-of p2, p2, Ljava/security/cert/CertificateException; if-eqz p2, :cond_3 return v1 .line 198 :cond_3 instance-of p1, p1, Ljavax/net/ssl/SSLPeerUnverifiedException; if-eqz p1, :cond_4 return v1 :cond_4 return v2 .end method .method public final recover(Ljava/io/IOException;Lokhttp3/internal/connection/Transmitter;ZLokhttp3/Request;)Z .locals 2 iget-object v0, p0, Lokhttp3/internal/http/RetryAndFollowUpInterceptor;->client:Lokhttp3/OkHttpClient; .line 156 invoke-virtual {v0}, Lokhttp3/OkHttpClient;->retryOnConnectionFailure()Z move-result v0 const/4 v1, 0x0 if-nez v0, :cond_0 return v1 :cond_0 if-eqz p3, :cond_1 .line 159 invoke-virtual {p0, p1, p4}, Lokhttp3/internal/http/RetryAndFollowUpInterceptor;->requestIsOneShot(Ljava/io/IOException;Lokhttp3/Request;)Z move-result p4 if-eqz p4, :cond_1 return v1 .line 162 :cond_1 invoke-virtual {p0, p1, p3}, Lokhttp3/internal/http/RetryAndFollowUpInterceptor;->isRecoverable(Ljava/io/IOException;Z)Z move-result p1 if-nez p1, :cond_2 return v1 .line 165 :cond_2 invoke-virtual {p2}, Lokhttp3/internal/connection/Transmitter;->canRetry()Z move-result p1 if-nez p1, :cond_3 return v1 :cond_3 const/4 p1, 0x1 return p1 .end method .method public final requestIsOneShot(Ljava/io/IOException;Lokhttp3/Request;)Z .locals 0 .line 172 invoke-virtual {p2}, Lokhttp3/Request;->body()Lokhttp3/RequestBody; move-result-object p2 if-eqz p2, :cond_0 .line 173 invoke-virtual {p2}, Lokhttp3/RequestBody;->isOneShot()Z move-result p2 if-nez p2, :cond_1 :cond_0 instance-of p1, p1, Ljava/io/FileNotFoundException; if-eqz p1, :cond_2 :cond_1 const/4 p1, 0x1 goto :goto_0 :cond_2 const/4 p1, 0x0 :goto_0 return p1 .end method .method public final retryAfter(Lokhttp3/Response;I)I .locals 1 const-string v0, "Retry-After" .line 330 invoke-virtual {p1, v0}, Lokhttp3/Response;->header(Ljava/lang/String;)Ljava/lang/String; move-result-object p1 if-nez p1, :cond_0 return p2 :cond_0 const-string p2, "\\d+" .line 338 invoke-virtual {p1, p2}, Ljava/lang/String;->matches(Ljava/lang/String;)Z move-result p2 if-eqz p2, :cond_1 .line 339 invoke-static {p1}, Ljava/lang/Integer;->valueOf(Ljava/lang/String;)Ljava/lang/Integer; move-result-object p1 invoke-virtual {p1}, Ljava/lang/Integer;->intValue()I move-result p1 return p1 :cond_1 const p1, 0x7fffffff return p1 .end method