Commit b5b474f6 authored by Nick Kew's avatar Nick Kew
Browse files

Fix style (indentation at least) to apache style rules before reviewing top of this.

No functional change.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@429875 13f79535-47bb-0310-9956-ffa450edef68
parent 79043674
Loading
Loading
Loading
Loading
+411 −311
Original line number Diff line number Diff line
@@ -49,21 +49,27 @@ PROXY_DECLARE(int) ap_proxy_hex2c(const char *x)

#if !APR_CHARSET_EBCDIC
    ch = x[0];
    if (apr_isdigit(ch))
    if (apr_isdigit(ch)) {
        i = ch - '0';
    else if (apr_isupper(ch))
    }
    else if (apr_isupper(ch)) {
        i = ch - ('A' - 10);
    else
    }
    else {
        i = ch - ('a' - 10);
    }
    i <<= 4;

    ch = x[1];
    if (apr_isdigit(ch))
    if (apr_isdigit(ch)) {
        i += ch - '0';
    else if (apr_isupper(ch))
    }
    else if (apr_isupper(ch)) {
        i += ch - ('A' - 10);
    else
    }
    else {
        i += ch - ('a' - 10);
    }
    return i;
#else /*APR_CHARSET_EBCDIC*/
    /*
@@ -98,16 +104,20 @@ PROXY_DECLARE(void) ap_proxy_c2hex(int ch, char *x)

    x[0] = '%';
    i = (ch & 0xF0) >> 4;
    if (i >= 10)
    if (i >= 10) {
        x[1] = ('A' - 10) + i;
    else
    }
    else {
        x[1] = '0' + i;
    }

    i = ch & 0x0F;
    if (i >= 10)
    if (i >= 10) {
        x[2] = ('A' - 10) + i;
    else
    }
    else {
        x[2] = '0' + i;
    }
#else /*APR_CHARSET_EBCDIC*/
    static const char ntoa[] = { "0123456789ABCDEF" };
    char buf[1];
@@ -134,8 +144,9 @@ PROXY_DECLARE(void) ap_proxy_c2hex(int ch, char *x)
 * and encodes those which must be encoded, and does not touch
 * those which must not be touched.
 */
PROXY_DECLARE(char *)ap_proxy_canonenc(apr_pool_t *p, const char *x, int len, enum enctype t,
    int forcedec, int proxyreq)
PROXY_DECLARE(char *)ap_proxy_canonenc(apr_pool_t *p, const char *x, int len,
                                       enum enctype t, int forcedec,
                                       int proxyreq)
{
    int i, j, ch;
    char *y;
@@ -150,23 +161,31 @@ PROXY_DECLARE(char *)ap_proxy_canonenc(apr_pool_t *p, const char *x, int len, en
 * it may be form-encoded. (Although RFC 1738 doesn't allow this -
 * it only permits ; / ? : @ = & as reserved chars.)
 */
    if (t == enc_path)
    if (t == enc_path) {
        allowed = "$-_.+!*'(),;:@&=";
    else if (t == enc_search)
    }
    else if (t == enc_search) {
        allowed = "$-_.!*'(),;:@&=";
    else if (t == enc_user)
    }
    else if (t == enc_user) {
        allowed = "$-_.+!*'(),;@&=";
    else if (t == enc_fpath)
    }
    else if (t == enc_fpath) {
        allowed = "$-_.+!*'(),?:@&=";
    else            /* if (t == enc_parm) */
    }
    else {            /* if (t == enc_parm) */
        allowed = "$-_.+!*'(),?/:@&=";
    }

    if (t == enc_path)
    if (t == enc_path) {
        reserved = "/";
    else if (t == enc_search)
    }
    else if (t == enc_search) {
        reserved = "+";
    else
    }
    else {
        reserved = "";
    }

    y = apr_palloc(p, 3 * len + 1);

@@ -182,8 +201,9 @@ PROXY_DECLARE(char *)ap_proxy_canonenc(apr_pool_t *p, const char *x, int len, en
 * unless specifically forced
 */
        if ((forcedec || (proxyreq && proxyreq != PROXYREQ_REVERSE)) && ch == '%') {
        if (!apr_isxdigit(x[i + 1]) || !apr_isxdigit(x[i + 2]))
            if (!apr_isxdigit(x[i + 1]) || !apr_isxdigit(x[i + 2])) {
                return NULL;
            }
            ch = ap_proxy_hex2c(&x[i + 1]);
            i += 2;
            if (ch != 0 && strchr(reserved, ch)) {  /* keep it encoded */
@@ -197,9 +217,10 @@ PROXY_DECLARE(char *)ap_proxy_canonenc(apr_pool_t *p, const char *x, int len, en
            ap_proxy_c2hex(ch, &y[j]);
            j += 2;
        }
    else
        else {
            y[j] = ch;
        }
    }
    y[j] = '\0';
    return y;
}
@@ -223,14 +244,17 @@ PROXY_DECLARE(char *)
    apr_port_t tmp_port;
    apr_status_t rv;

    if (url[0] != '/' || url[1] != '/')
    if (url[0] != '/' || url[1] != '/') {
        return "Malformed URL";
    }
    host = url + 2;
    url = strchr(host, '/');
    if (url == NULL)
    if (url == NULL) {
        url = "";
    else
    }
    else {
        *(url++) = '\0';    /* skip seperating '/' */
    }

    /* find _last_ '@' since it might occur in user/password part */
    strp = strrchr(host, '@');
@@ -245,14 +269,16 @@ PROXY_DECLARE(char *)
        if (strp != NULL) {
            *strp = '\0';
            password = ap_proxy_canonenc(p, strp + 1, strlen(strp + 1), enc_user, 1, 0);
        if (password == NULL)
            if (password == NULL) {
                return "Bad %-escape in URL (password)";
            }
        }

        user = ap_proxy_canonenc(p, user, strlen(user), enc_user, 1, 0);
    if (user == NULL)
        if (user == NULL) {
            return "Bad %-escape in URL (username)";
        }
    }
    if (userp != NULL) {
        *userp = user;
    }
@@ -301,44 +327,59 @@ PROXY_DECLARE(const char *)
    /* check for RFC 850 date */
    if (q != NULL && q - x > 3 && q[1] == ' ') {
        *q = '\0';
    for (wk = 0; wk < 7; wk++)
        if (strcmp(x, lwday[wk]) == 0)
        for (wk = 0; wk < 7; wk++) {
            if (strcmp(x, lwday[wk]) == 0) {
                break;
	    }
        }
        *q = ',';
    if (wk == 7)
        if (wk == 7) {
            return x;       /* not a valid date */
        }
        if (q[4] != '-' || q[8] != '-' || q[11] != ' ' || q[14] != ':' ||
        q[17] != ':' || strcmp(&q[20], " GMT") != 0)
            q[17] != ':' || strcmp(&q[20], " GMT") != 0) {
            return x;
        }
        if (sscanf(q + 2, "%u-%3s-%u %u:%u:%u %3s", &mday, month, &year,
           &hour, &min, &sec, zone) != 7)
               &hour, &min, &sec, zone) != 7) {
            return x;
    if (year < 70)
        }
        if (year < 70) {
            year += 2000;
    else
	}
        else {
            year += 1900;
        }
    }
    else {
/* check for acstime() date */
        if (x[3] != ' ' || x[7] != ' ' || x[10] != ' ' || x[13] != ':' ||
        x[16] != ':' || x[19] != ' ' || x[24] != '\0')
            x[16] != ':' || x[19] != ' ' || x[24] != '\0') {
            return x;
	}
        if (sscanf(x, "%3s %3s %u %u:%u:%u %u", week, month, &mday, &hour,
           &min, &sec, &year) != 7)
                   &min, &sec, &year) != 7) {
            return x;
    for (wk = 0; wk < 7; wk++)
        if (strcmp(week, apr_day_snames[wk]) == 0)
	}
        for (wk = 0; wk < 7; wk++) {
            if (strcmp(week, apr_day_snames[wk]) == 0) {
                break;
    if (wk == 7)
	    }
	}
        if (wk == 7) {
            return x;
	}
    }

/* check date */
    for (mon = 0; mon < 12; mon++)
    if (strcmp(month, apr_month_snames[mon]) == 0)
    for (mon = 0; mon < 12; mon++) {
        if (strcmp(month, apr_month_snames[mon]) == 0) {
            break;
    if (mon == 12)
	}
    }
    if (mon == 12) {
        return x;
    }

    q = apr_palloc(p, 30);
    apr_snprintf(q, 30, "%s, %.2d %s %d %.2d:%.2d:%.2d GMT", apr_day_snames[wk],
@@ -392,17 +433,20 @@ PROXY_DECLARE(int) ap_proxy_liststr(const char *list, const char *val)
        p = ap_strchr_c(list, ',');
        if (p != NULL) {
            i = p - list;
        do
            do {
                p++;
        while (apr_isspace(*p));
            } while (apr_isspace(*p));
        }
    else
        else {
            i = strlen(list);
        }

    while (i > 0 && apr_isspace(list[i - 1]))
        while (i > 0 && apr_isspace(list[i - 1])) {
            i--;
    if (i == len && strncasecmp(list, val, len) == 0)
        }
        if (i == len && strncasecmp(list, val, len) == 0) {
            return 1;
        }
        list = p;
    }
    return 0;
@@ -426,24 +470,28 @@ PROXY_DECLARE(char *)ap_proxy_removestr(apr_pool_t *pool, const char *list, cons
        p = ap_strchr_c(list, ',');
        if (p != NULL) {
            i = p - list;
        do
            do {
                p++;
        while (apr_isspace(*p));
	    } while (apr_isspace(*p));
        }
    else
        else {
            i = strlen(list);
	}

    while (i > 0 && apr_isspace(list[i - 1]))
        while (i > 0 && apr_isspace(list[i - 1])) {
            i--;
	}
        if (i == len && strncasecmp(list, val, len) == 0) {
            /* do nothing */
        }
        else {
        if (new)
            if (new) {
                new = apr_pstrcat(pool, new, ",", apr_pstrndup(pool, list, i), NULL);
        else
	    }
            else {
                new = apr_pstrndup(pool, list, i);
	    }
        }
        list = p;
    }
    return new;
@@ -460,18 +508,23 @@ PROXY_DECLARE(int) ap_proxy_hex2sec(const char *x)
    for (i = 0, j = 0; i < 8; i++) {
        ch = x[i];
        j <<= 4;
    if (apr_isdigit(ch))
        if (apr_isdigit(ch)) {
            j |= ch - '0';
    else if (apr_isupper(ch))
	}
        else if (apr_isupper(ch)) {
            j |= ch - ('A' - 10);
    else
	}
        else {
            j |= ch - ('a' - 10);
	}
    if (j == 0xffffffff)
    }
    if (j == 0xffffffff) {
        return -1;      /* so that it works with 8-byte ints */
    else
    }
    else {
        return j;
    }
}

/*
 * Converts a time integer to 8 hex digits
@@ -484,11 +537,13 @@ PROXY_DECLARE(void) ap_proxy_sec2hex(int t, char *y)
    for (i = 7; i >= 0; i--) {
        ch = j & 0xF;
        j >>= 4;
    if (ch >= 10)
        if (ch >= 10) {
            y[i] = ch + ('A' - 10);
    else
	}
        else {
            y[i] = ch + '0';
	}
    }
    y[8] = '\0';
}

@@ -520,21 +575,22 @@ static const char *
    char *url, *user = NULL, *password = NULL, *err, *host;
    apr_port_t port;

    if (r->hostname != NULL)
    if (r->hostname != NULL) {
        return r->hostname;
    }

    /* Set url to the first char after "scheme://" */
    if ((url = strchr(r->uri, ':')) == NULL
    || url[1] != '/' || url[2] != '/')
    if ((url = strchr(r->uri, ':')) == NULL || url[1] != '/' || url[2] != '/') {
        return NULL;
    }

    url = apr_pstrdup(r->pool, &url[1]);    /* make it point to "//", which is what proxy_canon_netloc expects */

    err = ap_proxy_canon_netloc(r->pool, &url, &user, &password, &host, &port);

    if (err != NULL)
    ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
             "%s", err);
    if (err != NULL) {
        ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "%s", err);
    }

    r->hostname = host;

@@ -569,16 +625,19 @@ PROXY_DECLARE(int) ap_proxy_is_ipaddr(struct dirconn_entry *This, apr_pool_t *p)
    for (quads = 0; quads < 4 && *addr != '\0'; ++quads) {
        char *tmp;

    if (*addr == '/' && quads > 0)  /* netmask starts here. */
        if (*addr == '/' && quads > 0) {  /* netmask starts here. */
            break;
	}

    if (!apr_isdigit(*addr))
        if (!apr_isdigit(*addr)) {
            return 0;       /* no digit at start of quad */
	}

        ip_addr[quads] = strtol(addr, &tmp, 0);

    if (tmp == addr)    /* expected a digit, found something else */
        if (tmp == addr) {  /* expected a digit, found something else */
            return 0;
	}

        if (ip_addr[quads] < 0 || ip_addr[quads] > 255) {
            /* invalid octet */
@@ -587,12 +646,14 @@ PROXY_DECLARE(int) ap_proxy_is_ipaddr(struct dirconn_entry *This, apr_pool_t *p)

        addr = tmp;

    if (*addr == '.' && quads != 3)
        if (*addr == '.' && quads != 3) {
            ++addr;     /* after the 4th quad, a dot would be illegal */
	}
    }

    for (This->addr.s_addr = 0, i = 0; i < quads; ++i)
    for (This->addr.s_addr = 0, i = 0; i < quads; ++i) {
        This->addr.s_addr |= htonl(ip_addr[i] << (24 - 8 * i));
    }

    if (addr[0] == '/' && apr_isdigit(addr[1])) {   /* net mask follows: */
        char *tmp;
@@ -601,13 +662,15 @@ PROXY_DECLARE(int) ap_proxy_is_ipaddr(struct dirconn_entry *This, apr_pool_t *p)

        bits = strtol(addr, &tmp, 0);

    if (tmp == addr)    /* expected a digit, found something else */
        if (tmp == addr) {   /* expected a digit, found something else */
            return 0;
	}

        addr = tmp;

    if (bits < 0 || bits > 32)  /* netmask must be between 0 and 32 */
        if (bits < 0 || bits > 32) { /* netmask must be between 0 and 32 */
            return 0;
	}

    }
    else {
@@ -616,21 +679,24 @@ PROXY_DECLARE(int) ap_proxy_is_ipaddr(struct dirconn_entry *This, apr_pool_t *p)
         * number of trailing .0's; reduce #quads appropriately
         * (so that 192.168.0.0 is equivalent to 192.168.)
         */
    while (quads > 0 && ip_addr[quads - 1] == 0)
        while (quads > 0 && ip_addr[quads - 1] == 0) {
            --quads;
	}

        /* "IP Address should be given in dotted-quad form, optionally followed by a netmask (e.g., 192.168.111.0/24)"; */
    if (quads < 1)
        if (quads < 1) {
            return 0;
	}

        /* every zero-byte counts as 8 zero-bits */
        bits = 8 * quads;

    if (bits != 32)     /* no warning for fully qualified IP address */
        if (bits != 32) {     /* no warning for fully qualified IP address */
            ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
                         "Warning: NetMask not supplied with IP-Addr; guessing: %s/%ld",
                         inet_ntoa(This->addr), bits);
	}
    }

    This->mask.s_addr = htonl(APR_INADDR_NONE << (32 - bits));

@@ -640,17 +706,17 @@ PROXY_DECLARE(int) ap_proxy_is_ipaddr(struct dirconn_entry *This, apr_pool_t *p)
                     inet_ntoa(This->addr), bits);
        This->addr.s_addr &= This->mask.s_addr;
        ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
        "         Set to %s/%ld",
        inet_ntoa(This->addr), bits);
                     "         Set to %s/%ld", inet_ntoa(This->addr), bits);
    }

    if (*addr == '\0') {
        This->matcher = proxy_match_ipaddr;
        return 1;
    }
    else
    else {
        return (*addr == '\0'); /* okay iff we've parsed the whole string */
    }
}

/* Return TRUE if addr represents an IP address (or an IP network address) */
static int proxy_match_ipaddr(struct dirconn_entry *This, request_rec *r)
@@ -659,15 +725,17 @@ static int proxy_match_ipaddr(struct dirconn_entry *This, request_rec *r)
    struct in_addr addr, *ip;
    const char *host = proxy_get_host_of_request(r);

    if (host == NULL)   /* oops! */
    if (host == NULL) {   /* oops! */
       return 0;
    }

    memset(&addr, '\0', sizeof addr);
    memset(ip_addr, '\0', sizeof ip_addr);

    if (4 == sscanf(host, "%d.%d.%d.%d", &ip_addr[0], &ip_addr[1], &ip_addr[2], &ip_addr[3])) {
    for (addr.s_addr = 0, i = 0; i < 4; ++i)
        for (addr.s_addr = 0, i = 0; i < 4; ++i) {
            addr.s_addr |= htonl(ip_addr[i] << (24 - 8 * i));
	}

        if (This->addr.s_addr == (addr.s_addr & This->mask.s_addr)) {
#if DEBUGGING
@@ -698,8 +766,7 @@ static int proxy_match_ipaddr(struct dirconn_entry *This, request_rec *r)
            != APR_SUCCESS) {
#if DEBUGGING
            ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
             "2)IP-NoMatch: hostname=%s msg=Host not found",
             host);
             "2)IP-NoMatch: hostname=%s msg=Host not found", host);
#endif
            return 0;
        }
@@ -711,8 +778,7 @@ static int proxy_match_ipaddr(struct dirconn_entry *This, request_rec *r)
            if (This->addr.s_addr == (ip->s_addr & This->mask.s_addr)) {
#if DEBUGGING
                ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
                 "3)IP-Match: %s[%s] <-> ", host,
                 inet_ntoa(*ip));
                             "3)IP-Match: %s[%s] <-> ", host, inet_ntoa(*ip));
                ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
                             "%s/", inet_ntoa(This->addr));
                ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
@@ -723,8 +789,7 @@ static int proxy_match_ipaddr(struct dirconn_entry *This, request_rec *r)
#if DEBUGGING
            else {
                ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
                 "3)IP-NoMatch: %s[%s] <-> ", host,
                 inet_ntoa(*ip));
                             "3)IP-NoMatch: %s[%s] <-> ", host, inet_ntoa(*ip));
                ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
                             "%s/", inet_ntoa(This->addr));
                ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
@@ -745,12 +810,14 @@ PROXY_DECLARE(int) ap_proxy_is_domainname(struct dirconn_entry *This, apr_pool_t
    int i;

    /* Domain name must start with a '.' */
    if (addr[0] != '.')
    if (addr[0] != '.') {
        return 0;
    }

    /* rfc1035 says DNS names must consist of "[-a-zA-Z0-9]" and '.' */
    for (i = 0; apr_isalnum(addr[i]) || addr[i] == '-' || addr[i] == '.'; ++i)
    for (i = 0; apr_isalnum(addr[i]) || addr[i] == '-' || addr[i] == '.'; ++i) {
        continue;
    }

#if 0
    if (addr[i] == ':') {
@@ -760,12 +827,14 @@ PROXY_DECLARE(int) ap_proxy_is_domainname(struct dirconn_entry *This, apr_pool_t
    }
#endif

    if (addr[i] != '\0')
    if (addr[i] != '\0') {
        return 0;
    }

    /* Strip trailing dots */
    for (i = strlen(addr) - 1; i > 0 && addr[i] == '.'; --i)
    for (i = strlen(addr) - 1; i > 0 && addr[i] == '.'; --i) {
        addr[i] = '\0';
    }

    This->matcher = proxy_match_domainname;
    return 1;
@@ -777,17 +846,20 @@ static int proxy_match_domainname(struct dirconn_entry *This, request_rec *r)
    const char *host = proxy_get_host_of_request(r);
    int d_len = strlen(This->name), h_len;

    if (host == NULL)       /* some error was logged already */
    if (host == NULL) {      /* some error was logged already */
        return 0;
    }

    h_len = strlen(host);

    /* @@@ do this within the setup? */
    /* Ignore trailing dots in domain comparison: */
    while (d_len > 0 && This->name[d_len - 1] == '.')
    while (d_len > 0 && This->name[d_len - 1] == '.') {
        --d_len;
    while (h_len > 0 && host[h_len - 1] == '.')
    }
    while (h_len > 0 && host[h_len - 1] == '.') {
        --h_len;
    }
    return h_len > d_len
        && strncasecmp(&host[h_len - d_len], This->name, d_len) == 0;
}
@@ -800,20 +872,22 @@ PROXY_DECLARE(int) ap_proxy_is_hostname(struct dirconn_entry *This, apr_pool_t *
    int i;

    /* Host names must not start with a '.' */
    if (host[0] == '.')
    if (host[0] == '.') {
        return 0;

    }
    /* rfc1035 says DNS names must consist of "[-a-zA-Z0-9]" and '.' */
    for (i = 0; apr_isalnum(host[i]) || host[i] == '-' || host[i] == '.'; ++i);

    if (host[i] != '\0' || apr_sockaddr_info_get(&addr, host, APR_UNSPEC, 0, 0, p) != APR_SUCCESS)
    if (host[i] != '\0' || apr_sockaddr_info_get(&addr, host, APR_UNSPEC, 0, 0, p) != APR_SUCCESS) {
        return 0;
    }

    This->hostaddr = addr;

    /* Strip trailing dots */
    for (i = strlen(host) - 1; i > 0 && host[i] == '.'; --i)
    for (i = strlen(host) - 1; i > 0 && host[i] == '.'; --i) {
        host[i] = '\0';
    }

    This->matcher = proxy_match_hostname;
    return 1;
@@ -827,8 +901,9 @@ static int proxy_match_hostname(struct dirconn_entry *This, request_rec *r)
    int h2_len;
    int h1_len;

    if (host == NULL || host2 == NULL)
    if (host == NULL || host2 == NULL) {
        return 0; /* oops! */
    }

    h2_len = strlen(host2);
    h1_len = strlen(host);
@@ -845,10 +920,12 @@ static int proxy_match_hostname(struct dirconn_entry *This, request_rec *r)
#endif

    /* Ignore trailing dots in host2 comparison: */
    while (h2_len > 0 && host2[h2_len - 1] == '.')
    while (h2_len > 0 && host2[h2_len - 1] == '.') {
        --h2_len;
    while (h1_len > 0 && host[h1_len - 1] == '.')
    }
    while (h1_len > 0 && host[h1_len - 1] == '.') {
        --h1_len;
    }
    return h1_len == h2_len
        && strncasecmp(host, host2, h1_len) == 0;
}
@@ -1176,15 +1253,18 @@ PROXY_DECLARE(proxy_balancer *) ap_proxy_get_balancer(apr_pool_t *p,
    int i;

    c = strchr(uri, ':');
    if (c == NULL || c[1] != '/' || c[2] != '/' || c[3] == '\0')
    if (c == NULL || c[1] != '/' || c[2] != '/' || c[3] == '\0') {
       return NULL;
    }
    /* remove path from uri */
    if ((c = strchr(c + 3, '/')))
    if ((c = strchr(c + 3, '/'))) {
        *c = '\0';
    }
    balancer = (proxy_balancer *)conf->balancers->elts;
    for (i = 0; i < conf->balancers->nelts; i++) {
        if (strcasecmp(balancer->name, uri) == 0)
        if (strcasecmp(balancer->name, uri) == 0) {
            return balancer;
	}
        balancer++;
    }
    return NULL;
@@ -1247,8 +1327,9 @@ PROXY_DECLARE(proxy_worker *) ap_proxy_get_worker(apr_pool_t *p,
    int i;

    c = ap_strchr_c(url, ':');
    if (c == NULL || c[1] != '/' || c[2] != '/' || c[3] == '\0')
    if (c == NULL || c[1] != '/' || c[2] != '/' || c[3] == '\0') {
       return NULL;
    }

    url_copy = apr_pstrdup(p, url);
    url_length = strlen(url);
@@ -1266,7 +1347,8 @@ PROXY_DECLARE(proxy_worker *) ap_proxy_get_worker(apr_pool_t *p,
        *pathstart = '\0';
        ap_str_tolower(url_copy);
        *pathstart = '/';
    } else {
    }
    else {
        ap_str_tolower(url_copy);
    }

@@ -1445,11 +1527,10 @@ PROXY_DECLARE(int) ap_proxy_post_request(proxy_worker *worker,
                                         proxy_server_conf *conf)
{
    int access_status;
    if (balancer)
    if (balancer) {
        access_status = proxy_run_post_request(worker, balancer, r, conf);
    }
    else {


        access_status = OK;
    }

@@ -1538,8 +1619,9 @@ static apr_status_t connection_cleanup(void *theconn)
     * If the connection pool is NULL the worker
     * cleanup has been run. Just return.
     */
    if (!worker->cp)
    if (!worker->cp) {
        return APR_SUCCESS;
    }

#if APR_HAS_THREADS
    /* Sanity check: Did we already return the pooled connection? */
@@ -1571,7 +1653,7 @@ static apr_status_t connection_cleanup(void *theconn)
        worker->cp->conn = conn;
    }

    /* Allways return the SUCCESS */
    /* Always return the SUCCESS */
    return APR_SUCCESS;
}

@@ -1609,8 +1691,9 @@ static apr_status_t connection_destructor(void *resource, void *params,
    proxy_conn_rec *conn = (proxy_conn_rec *)resource;

    /* Destroy the pool only if not called from reslist_destroy */
    if (conn->worker->cp->pool)
    if (conn->worker->cp->pool) {
        apr_pool_destroy(conn->pool);
    }

    return APR_SUCCESS;
}
@@ -1666,14 +1749,18 @@ PROXY_DECLARE(void) ap_proxy_initialize_worker_share(proxy_server_conf *conf,
              worker->name);
        return;
    }
    if (worker->route)
    if (worker->route) {
        strcpy(worker->s->route, worker->route);
    else
    }
    else {
        *worker->s->route = '\0';
    if (worker->redirect)
    }
    if (worker->redirect) {
        strcpy(worker->s->redirect, worker->redirect);
    else
    }
    else {
        *worker->s->redirect = '\0';
    }

    worker->s->status |= (worker->status | PROXY_WORKER_INITIALIZED);

@@ -1693,8 +1780,9 @@ PROXY_DECLARE(apr_status_t) ap_proxy_initialize_worker(proxy_worker *worker, ser
    }

    /* Set default parameters */
    if (!worker->retry)
    if (!worker->retry) {
        worker->retry = apr_time_from_sec(PROXY_WORKER_DEFAULT_RETRY);
    }
    /* By default address is reusable */
    worker->is_address_reusable = 1;

@@ -1702,14 +1790,17 @@ PROXY_DECLARE(apr_status_t) ap_proxy_initialize_worker(proxy_worker *worker, ser
    ap_mpm_query(AP_MPMQ_MAX_THREADS, &mpm_threads);
    if (mpm_threads > 1) {
        /* Set hard max to no more then mpm_threads */
        if (worker->hmax == 0 || worker->hmax > mpm_threads)
        if (worker->hmax == 0 || worker->hmax > mpm_threads) {
            worker->hmax = mpm_threads;
        if (worker->smax == 0 || worker->smax > worker->hmax)
	}
        if (worker->smax == 0 || worker->smax > worker->hmax) {
            worker->smax = worker->hmax;
	}
        /* Set min to be lower then smax */
        if (worker->min > worker->smax)
        if (worker->min > worker->smax) {
            worker->min = worker->smax;
	}
    }
    else {
        /* This will supress the apr_reslist creation */
        worker->min = worker->smax = worker->hmax = 0;
@@ -1732,8 +1823,9 @@ PROXY_DECLARE(apr_status_t) ap_proxy_initialize_worker(proxy_worker *worker, ser

#if (APR_MAJOR_VERSION > 0)
        /* Set the acquire timeout */
        if (rv == APR_SUCCESS && worker->acquire_set)
        if (rv == APR_SUCCESS && worker->acquire_set) {
            apr_reslist_timeout_set(worker->cp->res, worker->acquire);
	}
#endif
    }
    else
@@ -1770,12 +1862,14 @@ PROXY_DECLARE(int) ap_proxy_retry_worker(const char *proxy_function,
                         proxy_function, worker->hostname);
            return OK;
        }
        else
        else {
            return DECLINED;
	}
    else
    }
    else {
        return OK;
    }
}

PROXY_DECLARE(int) ap_proxy_acquire_connection(const char *proxy_function,
                                               proxy_conn_rec **conn,
@@ -1803,8 +1897,9 @@ PROXY_DECLARE(int) ap_proxy_acquire_connection(const char *proxy_function,
#endif
    {
        /* create the new connection if the previous was destroyed */
        if (!worker->cp->conn)
        if (!worker->cp->conn) {
            connection_constructor((void **)conn, worker, worker->cp->pool);
	}
        else {
            *conn = worker->cp->conn;
            worker->cp->conn = NULL;
@@ -1909,7 +2004,8 @@ ap_proxy_determine_connection(apr_pool_t *p, request_rec *r,
        if (proxyname) {
            conn->hostname = apr_pstrdup(conn->pool, proxyname);
            conn->port = proxyport;
        } else {
        }
	else {
            conn->hostname = apr_pstrdup(conn->pool, uri->hostname);
            conn->port = uri->port;
        }
@@ -1946,8 +2042,9 @@ ap_proxy_determine_connection(apr_pool_t *p, request_rec *r,
        conn->addr = worker->cp->addr;
        PROXY_THREAD_UNLOCK(worker);
    }
    else
    else {
        conn->addr = worker->cp->addr;
    }

    if (err != APR_SUCCESS) {
        return ap_proxyerror(r, HTTP_BAD_GATEWAY,
@@ -1960,7 +2057,8 @@ ap_proxy_determine_connection(apr_pool_t *p, request_rec *r,
        server_port = ap_get_server_port(r);
        if (ap_is_default_port(server_port, r)) {
            strcpy(server_portstr,"");
        } else {
        }
	else {
            apr_snprintf(server_portstr, server_portstr_size, ":%d",
                         server_port);
        }
@@ -1991,11 +2089,13 @@ static int is_socket_connected(apr_socket_t *sock)
    socket_status = apr_socket_recv(sock, test_buffer, &buffer_len);
    /* put back old timeout */
    apr_socket_timeout_set(sock, current_timeout);
    if (APR_STATUS_IS_EOF(socket_status))
    if (APR_STATUS_IS_EOF(socket_status)) {
        return 0;
    else
    }
    else {
        return 1;
    }
}

PROXY_DECLARE(int) ap_proxy_connect_backend(const char *proxy_function,
                                            proxy_conn_rec *conn,