.class public Lorg/apache/http/impl/execchain/MinimalClientExec; .super Ljava/lang/Object; .source "MinimalClientExec.java" # interfaces .implements Lorg/apache/http/impl/execchain/ClientExecChain; # instance fields .field private final connManager:Lorg/apache/http/conn/HttpClientConnectionManager; .field private final httpProcessor:Lorg/apache/http/protocol/HttpProcessor; .field private final keepAliveStrategy:Lorg/apache/http/conn/ConnectionKeepAliveStrategy; .field private final log:Lorg/apache/commons/logging/Log; .field private final requestExecutor:Lorg/apache/http/protocol/HttpRequestExecutor; .field private final reuseStrategy:Lorg/apache/http/ConnectionReuseStrategy; # direct methods .method public constructor (Lorg/apache/http/protocol/HttpRequestExecutor;Lorg/apache/http/conn/HttpClientConnectionManager;Lorg/apache/http/ConnectionReuseStrategy;Lorg/apache/http/conn/ConnectionKeepAliveStrategy;)V .registers 11 .line 96 invoke-direct {p0}, Ljava/lang/Object;->()V .line 84 invoke-virtual {p0}, Ljava/lang/Object;->getClass()Ljava/lang/Class; move-result-object v0 invoke-static {v0}, Lorg/apache/commons/logging/LogFactory;->getLog(Ljava/lang/Class;)Lorg/apache/commons/logging/Log; move-result-object v0 iput-object v0, p0, Lorg/apache/http/impl/execchain/MinimalClientExec;->log:Lorg/apache/commons/logging/Log; .line 97 const-string v0, "HTTP request executor" invoke-static {p1, v0}, Lorg/apache/http/util/Args;->notNull(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object; .line 98 const-string v0, "Client connection manager" invoke-static {p2, v0}, Lorg/apache/http/util/Args;->notNull(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object; .line 99 const-string v0, "Connection reuse strategy" invoke-static {p3, v0}, Lorg/apache/http/util/Args;->notNull(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object; .line 100 const-string v0, "Connection keep alive strategy" invoke-static {p4, v0}, Lorg/apache/http/util/Args;->notNull(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object; .line 101 new-instance v0, Lorg/apache/http/protocol/ImmutableHttpProcessor; const/4 v1, 0x4 new-array v1, v1, [Lorg/apache/http/HttpRequestInterceptor; new-instance v2, Lorg/apache/http/protocol/RequestContent; invoke-direct {v2}, Lorg/apache/http/protocol/RequestContent;->()V const/4 v3, 0x0 aput-object v2, v1, v3 new-instance v2, Lorg/apache/http/protocol/RequestTargetHost; invoke-direct {v2}, Lorg/apache/http/protocol/RequestTargetHost;->()V const/4 v3, 0x1 aput-object v2, v1, v3 new-instance v2, Lorg/apache/http/client/protocol/RequestClientConnControl; invoke-direct {v2}, Lorg/apache/http/client/protocol/RequestClientConnControl;->()V const/4 v3, 0x2 aput-object v2, v1, v3 new-instance v2, Lorg/apache/http/protocol/RequestUserAgent; const-string v3, "org.apache.http.client" invoke-virtual {p0}, Ljava/lang/Object;->getClass()Ljava/lang/Class; move-result-object v4 const-string v5, "Apache-HttpClient" invoke-static {v5, v3, v4}, Lorg/apache/http/util/VersionInfo;->getUserAgent(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/String; move-result-object v3 invoke-direct {v2, v3}, Lorg/apache/http/protocol/RequestUserAgent;->(Ljava/lang/String;)V const/4 v3, 0x3 aput-object v2, v1, v3 invoke-direct {v0, v1}, Lorg/apache/http/protocol/ImmutableHttpProcessor;->([Lorg/apache/http/HttpRequestInterceptor;)V iput-object v0, p0, Lorg/apache/http/impl/execchain/MinimalClientExec;->httpProcessor:Lorg/apache/http/protocol/HttpProcessor; .line 107 iput-object p1, p0, Lorg/apache/http/impl/execchain/MinimalClientExec;->requestExecutor:Lorg/apache/http/protocol/HttpRequestExecutor; .line 108 iput-object p2, p0, Lorg/apache/http/impl/execchain/MinimalClientExec;->connManager:Lorg/apache/http/conn/HttpClientConnectionManager; .line 109 iput-object p3, p0, Lorg/apache/http/impl/execchain/MinimalClientExec;->reuseStrategy:Lorg/apache/http/ConnectionReuseStrategy; .line 110 iput-object p4, p0, Lorg/apache/http/impl/execchain/MinimalClientExec;->keepAliveStrategy:Lorg/apache/http/conn/ConnectionKeepAliveStrategy; return-void .end method .method static rewriteRequestURI(Lorg/apache/http/client/methods/HttpRequestWrapper;Lorg/apache/http/conn/routing/HttpRoute;)V .registers 5 .annotation system Ldalvik/annotation/Throws; value = { Lorg/apache/http/ProtocolException; } .end annotation .line 117 :try_start_0 invoke-virtual {p0}, Lorg/apache/http/client/methods/HttpRequestWrapper;->getURI()Ljava/net/URI; move-result-object p1 if-eqz p1, :cond_1a .line 120 invoke-virtual {p1}, Ljava/net/URI;->isAbsolute()Z move-result v0 if-eqz v0, :cond_13 const/4 v0, 0x0 const/4 v1, 0x1 .line 121 invoke-static {p1, v0, v1}, Lorg/apache/http/client/utils/URIUtils;->rewriteURI(Ljava/net/URI;Lorg/apache/http/HttpHost;Z)Ljava/net/URI; move-result-object p1 goto :goto_17 .line 123 :cond_13 invoke-static {p1}, Lorg/apache/http/client/utils/URIUtils;->rewriteURI(Ljava/net/URI;)Ljava/net/URI; move-result-object p1 .line 125 :goto_17 invoke-virtual {p0, p1}, Lorg/apache/http/client/methods/HttpRequestWrapper;->setURI(Ljava/net/URI;)V :try_end_1a .catch Ljava/net/URISyntaxException; {:try_start_0 .. :try_end_1a} :catch_1b :cond_1a return-void :catch_1b move-exception p1 .line 128 new-instance v0, Lorg/apache/http/ProtocolException; new-instance v1, Ljava/lang/StringBuilder; const-string v2, "Invalid URI: " invoke-direct {v1, v2}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V invoke-virtual {p0}, Lorg/apache/http/client/methods/HttpRequestWrapper;->getRequestLine()Lorg/apache/http/RequestLine; move-result-object p0 invoke-interface {p0}, Lorg/apache/http/RequestLine;->getUri()Ljava/lang/String; move-result-object p0 invoke-virtual {v1, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object p0 invoke-virtual {p0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object p0 invoke-direct {v0, p0, p1}, Lorg/apache/http/ProtocolException;->(Ljava/lang/String;Ljava/lang/Throwable;)V throw v0 .end method # virtual methods .method public execute(Lorg/apache/http/conn/routing/HttpRoute;Lorg/apache/http/client/methods/HttpRequestWrapper;Lorg/apache/http/client/protocol/HttpClientContext;Lorg/apache/http/client/methods/HttpExecutionAware;)Lorg/apache/http/client/methods/CloseableHttpResponse; .registers 12 .annotation system Ldalvik/annotation/Throws; value = { Ljava/io/IOException;, Lorg/apache/http/HttpException; } .end annotation .line 138 const-string v0, "HTTP route" invoke-static {p1, v0}, Lorg/apache/http/util/Args;->notNull(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object; .line 139 const-string v0, "HTTP request" invoke-static {p2, v0}, Lorg/apache/http/util/Args;->notNull(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object; .line 140 const-string v0, "HTTP context" invoke-static {p3, v0}, Lorg/apache/http/util/Args;->notNull(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object; .line 142 invoke-static {p2, p1}, Lorg/apache/http/impl/execchain/MinimalClientExec;->rewriteRequestURI(Lorg/apache/http/client/methods/HttpRequestWrapper;Lorg/apache/http/conn/routing/HttpRoute;)V .line 144 iget-object v0, p0, Lorg/apache/http/impl/execchain/MinimalClientExec;->connManager:Lorg/apache/http/conn/HttpClientConnectionManager; const/4 v1, 0x0 invoke-interface {v0, p1, v1}, Lorg/apache/http/conn/HttpClientConnectionManager;->requestConnection(Lorg/apache/http/conn/routing/HttpRoute;Ljava/lang/Object;)Lorg/apache/http/conn/ConnectionRequest; move-result-object v0 .line 145 const-string v2, "Request aborted" if-eqz p4, :cond_30 .line 146 invoke-interface {p4}, Lorg/apache/http/client/methods/HttpExecutionAware;->isAborted()Z move-result v3 if-nez v3, :cond_27 .line 150 invoke-interface {p4, v0}, Lorg/apache/http/client/methods/HttpExecutionAware;->setCancellable(Lorg/apache/http/concurrent/Cancellable;)V goto :goto_30 .line 147 :cond_27 invoke-interface {v0}, Lorg/apache/http/conn/ConnectionRequest;->cancel()Z .line 148 new-instance p1, Lorg/apache/http/impl/execchain/RequestAbortedException; invoke-direct {p1, v2}, Lorg/apache/http/impl/execchain/RequestAbortedException;->(Ljava/lang/String;)V throw p1 .line 154 :cond_30 :goto_30 invoke-virtual {p3}, Lorg/apache/http/client/protocol/HttpClientContext;->getRequestConfig()Lorg/apache/http/client/config/RequestConfig; move-result-object v3 .line 158 :try_start_34 invoke-virtual {v3}, Lorg/apache/http/client/config/RequestConfig;->getConnectionRequestTimeout()I move-result v4 if-lez v4, :cond_3c int-to-long v4, v4 goto :goto_3e :cond_3c const-wide/16 v4, 0x0 .line 159 :goto_3e sget-object v6, Ljava/util/concurrent/TimeUnit;->MILLISECONDS:Ljava/util/concurrent/TimeUnit; invoke-interface {v0, v4, v5, v6}, Lorg/apache/http/conn/ConnectionRequest;->get(JLjava/util/concurrent/TimeUnit;)Lorg/apache/http/HttpClientConnection; move-result-object v0 :try_end_44 .catch Ljava/lang/InterruptedException; {:try_start_34 .. :try_end_44} :catch_13d .catch Ljava/util/concurrent/ExecutionException; {:try_start_34 .. :try_end_44} :catch_12c .line 171 new-instance v4, Lorg/apache/http/impl/execchain/ConnectionHolder; iget-object v5, p0, Lorg/apache/http/impl/execchain/MinimalClientExec;->log:Lorg/apache/commons/logging/Log; iget-object v6, p0, Lorg/apache/http/impl/execchain/MinimalClientExec;->connManager:Lorg/apache/http/conn/HttpClientConnectionManager; invoke-direct {v4, v5, v6, v0}, Lorg/apache/http/impl/execchain/ConnectionHolder;->(Lorg/apache/commons/logging/Log;Lorg/apache/http/conn/HttpClientConnectionManager;Lorg/apache/http/HttpClientConnection;)V if-eqz p4, :cond_62 .line 174 :try_start_4f invoke-interface {p4}, Lorg/apache/http/client/methods/HttpExecutionAware;->isAborted()Z move-result v5 if-nez v5, :cond_59 .line 178 invoke-interface {p4, v4}, Lorg/apache/http/client/methods/HttpExecutionAware;->setCancellable(Lorg/apache/http/concurrent/Cancellable;)V goto :goto_62 .line 175 :cond_59 invoke-virtual {v4}, Lorg/apache/http/impl/execchain/ConnectionHolder;->close()V .line 176 new-instance p1, Lorg/apache/http/impl/execchain/RequestAbortedException; invoke-direct {p1, v2}, Lorg/apache/http/impl/execchain/RequestAbortedException;->(Ljava/lang/String;)V throw p1 .line 182 :cond_62 :goto_62 invoke-interface {v0}, Lorg/apache/http/HttpClientConnection;->isOpen()Z move-result p4 if-nez p4, :cond_7a .line 183 invoke-virtual {v3}, Lorg/apache/http/client/config/RequestConfig;->getConnectTimeout()I move-result p4 .line 184 iget-object v2, p0, Lorg/apache/http/impl/execchain/MinimalClientExec;->connManager:Lorg/apache/http/conn/HttpClientConnectionManager; if-lez p4, :cond_71 goto :goto_72 :cond_71 const/4 p4, 0x0 :goto_72 invoke-interface {v2, v0, p1, p4, p3}, Lorg/apache/http/conn/HttpClientConnectionManager;->connect(Lorg/apache/http/HttpClientConnection;Lorg/apache/http/conn/routing/HttpRoute;ILorg/apache/http/protocol/HttpContext;)V .line 189 iget-object p4, p0, Lorg/apache/http/impl/execchain/MinimalClientExec;->connManager:Lorg/apache/http/conn/HttpClientConnectionManager; invoke-interface {p4, v0, p1, p3}, Lorg/apache/http/conn/HttpClientConnectionManager;->routeComplete(Lorg/apache/http/HttpClientConnection;Lorg/apache/http/conn/routing/HttpRoute;Lorg/apache/http/protocol/HttpContext;)V .line 191 :cond_7a invoke-virtual {v3}, Lorg/apache/http/client/config/RequestConfig;->getSocketTimeout()I move-result p4 if-ltz p4, :cond_83 .line 193 invoke-interface {v0, p4}, Lorg/apache/http/HttpClientConnection;->setSocketTimeout(I)V .line 197 :cond_83 invoke-virtual {p2}, Lorg/apache/http/client/methods/HttpRequestWrapper;->getOriginal()Lorg/apache/http/HttpRequest; move-result-object p4 .line 198 instance-of v2, p4, Lorg/apache/http/client/methods/HttpUriRequest; if-eqz v2, :cond_a9 .line 199 check-cast p4, Lorg/apache/http/client/methods/HttpUriRequest; invoke-interface {p4}, Lorg/apache/http/client/methods/HttpUriRequest;->getURI()Ljava/net/URI; move-result-object p4 .line 200 invoke-virtual {p4}, Ljava/net/URI;->isAbsolute()Z move-result v2 if-eqz v2, :cond_a9 .line 201 new-instance v2, Lorg/apache/http/HttpHost; invoke-virtual {p4}, Ljava/net/URI;->getHost()Ljava/lang/String; move-result-object v3 invoke-virtual {p4}, Ljava/net/URI;->getPort()I move-result v5 invoke-virtual {p4}, Ljava/net/URI;->getScheme()Ljava/lang/String; move-result-object p4 invoke-direct {v2, v3, v5, p4}, Lorg/apache/http/HttpHost;->(Ljava/lang/String;ILjava/lang/String;)V goto :goto_aa :cond_a9 move-object v2, v1 :goto_aa if-nez v2, :cond_b0 .line 205 invoke-virtual {p1}, Lorg/apache/http/conn/routing/HttpRoute;->getTargetHost()Lorg/apache/http/HttpHost; move-result-object v2 .line 208 :cond_b0 const-string p4, "http.target_host" invoke-virtual {p3, p4, v2}, Lorg/apache/http/client/protocol/HttpClientContext;->setAttribute(Ljava/lang/String;Ljava/lang/Object;)V .line 209 const-string p4, "http.request" invoke-virtual {p3, p4, p2}, Lorg/apache/http/client/protocol/HttpClientContext;->setAttribute(Ljava/lang/String;Ljava/lang/Object;)V .line 210 const-string p4, "http.connection" invoke-virtual {p3, p4, v0}, Lorg/apache/http/client/protocol/HttpClientContext;->setAttribute(Ljava/lang/String;Ljava/lang/Object;)V .line 211 const-string p4, "http.route" invoke-virtual {p3, p4, p1}, Lorg/apache/http/client/protocol/HttpClientContext;->setAttribute(Ljava/lang/String;Ljava/lang/Object;)V .line 213 iget-object p1, p0, Lorg/apache/http/impl/execchain/MinimalClientExec;->httpProcessor:Lorg/apache/http/protocol/HttpProcessor; invoke-interface {p1, p2, p3}, Lorg/apache/http/protocol/HttpProcessor;->process(Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)V .line 214 iget-object p1, p0, Lorg/apache/http/impl/execchain/MinimalClientExec;->requestExecutor:Lorg/apache/http/protocol/HttpRequestExecutor; invoke-virtual {p1, p2, v0, p3}, Lorg/apache/http/protocol/HttpRequestExecutor;->execute(Lorg/apache/http/HttpRequest;Lorg/apache/http/HttpClientConnection;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/HttpResponse; move-result-object p1 .line 215 iget-object p2, p0, Lorg/apache/http/impl/execchain/MinimalClientExec;->httpProcessor:Lorg/apache/http/protocol/HttpProcessor; invoke-interface {p2, p1, p3}, Lorg/apache/http/protocol/HttpProcessor;->process(Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)V .line 218 iget-object p2, p0, Lorg/apache/http/impl/execchain/MinimalClientExec;->reuseStrategy:Lorg/apache/http/ConnectionReuseStrategy; invoke-interface {p2, p1, p3}, Lorg/apache/http/ConnectionReuseStrategy;->keepAlive(Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)Z move-result p2 if-eqz p2, :cond_eb .line 220 iget-object p2, p0, Lorg/apache/http/impl/execchain/MinimalClientExec;->keepAliveStrategy:Lorg/apache/http/conn/ConnectionKeepAliveStrategy; invoke-interface {p2, p1, p3}, Lorg/apache/http/conn/ConnectionKeepAliveStrategy;->getKeepAliveDuration(Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)J move-result-wide p2 .line 221 sget-object p4, Ljava/util/concurrent/TimeUnit;->MILLISECONDS:Ljava/util/concurrent/TimeUnit; invoke-virtual {v4, p2, p3, p4}, Lorg/apache/http/impl/execchain/ConnectionHolder;->setValidFor(JLjava/util/concurrent/TimeUnit;)V .line 222 invoke-virtual {v4}, Lorg/apache/http/impl/execchain/ConnectionHolder;->markReusable()V goto :goto_ee .line 224 :cond_eb invoke-virtual {v4}, Lorg/apache/http/impl/execchain/ConnectionHolder;->markNonReusable()V .line 228 :goto_ee invoke-interface {p1}, Lorg/apache/http/HttpResponse;->getEntity()Lorg/apache/http/HttpEntity; move-result-object p2 if-eqz p2, :cond_101 .line 229 invoke-interface {p2}, Lorg/apache/http/HttpEntity;->isStreaming()Z move-result p2 if-nez p2, :cond_fb goto :goto_101 .line 234 :cond_fb new-instance p2, Lorg/apache/http/impl/execchain/HttpResponseProxy; invoke-direct {p2, p1, v4}, Lorg/apache/http/impl/execchain/HttpResponseProxy;->(Lorg/apache/http/HttpResponse;Lorg/apache/http/impl/execchain/ConnectionHolder;)V return-object p2 .line 231 :cond_101 :goto_101 invoke-virtual {v4}, Lorg/apache/http/impl/execchain/ConnectionHolder;->releaseConnection()V .line 232 new-instance p2, Lorg/apache/http/impl/execchain/HttpResponseProxy; invoke-direct {p2, p1, v1}, Lorg/apache/http/impl/execchain/HttpResponseProxy;->(Lorg/apache/http/HttpResponse;Lorg/apache/http/impl/execchain/ConnectionHolder;)V :try_end_109 .catch Lorg/apache/http/impl/conn/ConnectionShutdownException; {:try_start_4f .. :try_end_109} :catch_120 .catch Lorg/apache/http/HttpException; {:try_start_4f .. :try_end_109} :catch_11b .catch Ljava/io/IOException; {:try_start_4f .. :try_end_109} :catch_116 .catch Ljava/lang/RuntimeException; {:try_start_4f .. :try_end_109} :catch_111 .catch Ljava/lang/Error; {:try_start_4f .. :try_end_109} :catch_10a return-object p2 :catch_10a move-exception p1 .line 251 iget-object p2, p0, Lorg/apache/http/impl/execchain/MinimalClientExec;->connManager:Lorg/apache/http/conn/HttpClientConnectionManager; invoke-interface {p2}, Lorg/apache/http/conn/HttpClientConnectionManager;->shutdown()V .line 252 throw p1 :catch_111 move-exception p1 .line 248 invoke-virtual {v4}, Lorg/apache/http/impl/execchain/ConnectionHolder;->abortConnection()V .line 249 throw p1 :catch_116 move-exception p1 .line 245 invoke-virtual {v4}, Lorg/apache/http/impl/execchain/ConnectionHolder;->abortConnection()V .line 246 throw p1 :catch_11b move-exception p1 .line 242 invoke-virtual {v4}, Lorg/apache/http/impl/execchain/ConnectionHolder;->abortConnection()V .line 243 throw p1 :catch_120 move-exception p1 .line 237 new-instance p2, Ljava/io/InterruptedIOException; const-string p3, "Connection has been shut down" invoke-direct {p2, p3}, Ljava/io/InterruptedIOException;->(Ljava/lang/String;)V .line 239 invoke-virtual {p2, p1}, Ljava/io/InterruptedIOException;->initCause(Ljava/lang/Throwable;)Ljava/lang/Throwable; .line 240 throw p2 :catch_12c move-exception p1 .line 164 invoke-virtual {p1}, Ljava/util/concurrent/ExecutionException;->getCause()Ljava/lang/Throwable; move-result-object p2 if-nez p2, :cond_134 goto :goto_135 :cond_134 move-object p1, p2 .line 168 :goto_135 new-instance p2, Lorg/apache/http/impl/execchain/RequestAbortedException; const-string p3, "Request execution failed" invoke-direct {p2, p3, p1}, Lorg/apache/http/impl/execchain/RequestAbortedException;->(Ljava/lang/String;Ljava/lang/Throwable;)V throw p2 :catch_13d move-exception p1 .line 161 invoke-static {}, Ljava/lang/Thread;->currentThread()Ljava/lang/Thread; move-result-object p2 invoke-virtual {p2}, Ljava/lang/Thread;->interrupt()V .line 162 new-instance p2, Lorg/apache/http/impl/execchain/RequestAbortedException; invoke-direct {p2, v2, p1}, Lorg/apache/http/impl/execchain/RequestAbortedException;->(Ljava/lang/String;Ljava/lang/Throwable;)V throw p2 .end method