]> granicus.if.org Git - apache/commitdiff
Expose this as part of the API. That way, other code/modules
authorJim Jagielski <jim@apache.org>
Tue, 8 Feb 2011 13:59:36 +0000 (13:59 +0000)
committerJim Jagielski <jim@apache.org>
Tue, 8 Feb 2011 13:59:36 +0000 (13:59 +0000)
which want to overload mod_proxy's trans phase can use it to
handle ProxyPass as well, without requiring monkeying
with conf->aliases...

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1068400 13f79535-47bb-0310-9956-ffa450edef68

modules/proxy/mod_proxy.c
modules/proxy/mod_proxy.h

index cefc3d0eada8ecd2c74642dd020d4b5f28f0237a..76bb195e2b64d840018c2177c25828b13ce7e903 100644 (file)
@@ -539,8 +539,8 @@ static apr_array_header_t *proxy_vars(request_rec *r,
     return ret;
 }
 
-static int proxy_trans_match(request_rec *r, struct proxy_alias *ent,
-        proxy_dir_conf *dconf)
+PROXY_DECLARE(int) ap_proxy_trans_match(request_rec *r, struct proxy_alias *ent,
+                                        proxy_dir_conf *dconf)
 {
     int len;
     const char *fake;
@@ -552,7 +552,7 @@ static int proxy_trans_match(request_rec *r, struct proxy_alias *ent,
     unsigned int nocanon = ent->flags & PROXYPASS_NOCANON;
     const char *use_uri = nocanon ? r->unparsed_uri : r->uri;
 
-    if ((dconf->interpolate_env == 1) && (ent->flags & PROXYPASS_INTERPOLATE)) {
+    if (dconf && (dconf->interpolate_env == 1) && (ent->flags & PROXYPASS_INTERPOLATE)) {
         fake = proxy_interpolate(r, ent->fake);
         real = proxy_interpolate(r, ent->real);
     }
@@ -653,7 +653,7 @@ static int proxy_trans(request_rec *r)
 
     /* short way - this location is reverse proxied? */
     if (dconf->alias) {
-        int rv = proxy_trans_match(r, dconf->alias, dconf);
+        int rv = ap_proxy_trans_match(r, dconf->alias, dconf);
         if (DONE != rv) {
             return rv;
         }
@@ -666,7 +666,7 @@ static int proxy_trans(request_rec *r)
     if (conf->aliases->nelts) {
         ent = (struct proxy_alias *) conf->aliases->elts;
         for (i = 0; i < conf->aliases->nelts; i++) {
-            int rv = proxy_trans_match(r, &ent[i], dconf);
+            int rv = ap_proxy_trans_match(r, &ent[i], dconf);
             if (DONE != rv) {
                 return rv;
             }
index 5615fbbabfb865f75ad5185b58b41cd591ba2d74..c106c43952ee68ff0e425b8ef7a33a2a7423feb6 100644 (file)
@@ -863,6 +863,17 @@ PROXY_DECLARE(char *) ap_proxy_parse_wstatus(apr_pool_t *p, proxy_worker *w);
 PROXY_DECLARE(apr_status_t) ap_proxy_update_members(proxy_balancer *b, server_rec *s,
                                                     proxy_server_conf *conf);
 
+
+/**
+ * Find the matched alias for this request and setup for proxy handler
+ * @param r     request
+ * @param ent   proxy_alias record
+ * @param dconf per-dir config or NULL
+ * @return      DECLINED, DONE or OK if matched
+ */
+PROXY_DECLARE(int) ap_proxy_trans_match(request_rec *r, struct proxy_alias *ent,
+                                        proxy_dir_conf *dconf);
+
 #define PROXY_LBMETHOD "proxylbmethod"
 
 /* The number of dynamic workers that can be added when reconfiguring.