]> granicus.if.org Git - apache/blobdiff - modules/proxy/proxy_util.c
Simplify connection address and port resolving for non-cachable workers (gereric...
[apache] / modules / proxy / proxy_util.c
index 1527a22d97359cd9ecfe51893d5a72723a4e634c..e923d04278e37bfa49578535f3e4026afb6e7952 100644 (file)
@@ -1610,8 +1610,6 @@ ap_proxy_determine_connection(apr_pool_t *p, request_rec *r,
 {
     int server_port;
     apr_status_t err = APR_SUCCESS;
-    const char   *hostname;
-    apr_port_t   port;
     
     /*
      * Break up the URL to determine the host to connect to
@@ -1642,34 +1640,30 @@ ap_proxy_determine_connection(apr_pool_t *p, request_rec *r,
                            uri->fragment ? "#" : "",
                            uri->fragment ? uri->fragment : "", NULL);
     }
-    if (!conn->hostname) {
+    if (!worker->is_address_reusable) {
         if (proxyname) {
-            conn->hostname = apr_pstrdup(conn->pool, proxyname);
+            conn->hostname = proxyname;
             conn->port = proxyport;
         } else {
-            conn->hostname = apr_pstrdup(conn->pool, uri->hostname);
+            conn->hostname = uri->hostname;
             conn->port = uri->port;
         }
     }
-    if (!worker->is_address_reusable) {
+    else if (!conn->hostname) {
         if (proxyname) {
-            hostname = proxyname;
-            port = proxyport;
+            conn->hostname = apr_pstrdup(conn->pool, proxyname);
+            conn->port = proxyport;
         } else {
-            hostname = uri->hostname;
-            port = uri->port;
+            conn->hostname = apr_pstrdup(conn->pool, uri->hostname);
+            conn->port = uri->port;
         }
     }
-    else {
-        hostname = conn->hostname;
-        port = conn->port;
-    }
     /* TODO: add address cache for forward proxies */
     if (r->proxyreq == PROXYREQ_PROXY || r->proxyreq == PROXYREQ_REVERSE ||
         !worker->is_address_reusable) {
         err = apr_sockaddr_info_get(&(conn->addr),
-                                    hostname, APR_UNSPEC,
-                                    port, 0,
+                                    conn->hostname, APR_UNSPEC,
+                                    conn->port, 0,
                                     conn->pool);
     }
     else if (!worker->cp->addr) {
@@ -1685,8 +1679,8 @@ ap_proxy_determine_connection(apr_pool_t *p, request_rec *r,
         * inside dynamic config to force the lookup.
         */
         err = apr_sockaddr_info_get(&(worker->cp->addr),
-                                    hostname, APR_UNSPEC,
-                                    port, 0,
+                                    conn->hostname, APR_UNSPEC,
+                                    conn->port, 0,
                                     worker->cp->pool);
         conn->addr = worker->cp->addr;
         PROXY_THREAD_UNLOCK(worker);
@@ -1694,7 +1688,7 @@ ap_proxy_determine_connection(apr_pool_t *p, request_rec *r,
     if (err != APR_SUCCESS) {
         return ap_proxyerror(r, HTTP_BAD_GATEWAY,
                              apr_pstrcat(p, "DNS lookup failure for: ",
-                                         hostname, NULL));
+                                         conn->hostname, NULL));
     }
 
     /* Get the server port for the Via headers */
@@ -1712,6 +1706,9 @@ ap_proxy_determine_connection(apr_pool_t *p, request_rec *r,
         return ap_proxyerror(r, HTTP_FORBIDDEN,
                              "Connect to remote machine blocked");
     }
+    ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
+                 "proxy: connected %s to %s:%d", *url, conn->hostname,
+                 conn->port);
     return OK;
 }