Commit 57bc25b3 authored by Jim Jagielski's avatar Jim Jagielski
Browse files

Move to a different impl which was my 1st concept and that which

Ruediger likes. Instead of adjusting pointers to areas
within the URL, simply copy it over and change it as needed.
Easier logic and not that much slower for normal cases.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@330085 13f79535-47bb-0310-9956-ffa450edef68
parent 77475124
Loading
Loading
Loading
Loading
+1 −1
Changes for CHANGES: 1 added line, 1 removed line.
Original line number Diff line number Diff line
@@ -4,7 +4,7 @@ Changes with Apache 2.3.0
  *) mod_proxy_balancer: When finding best worker, use case insensitive
     match for scheme and host, but case sensitive for the rest of
     the path. [Jim Jagielski]
     the path. [Jim Jagielski, Ruediger Pluem]
  *) Asynchronous write completion for the Event MPM.  [Brian Pane]
+15 −21
Changes for modules/proxy/proxy_util.c: 15 added lines, 21 removed lines.
Original line number Diff line number Diff line
@@ -1216,26 +1216,33 @@ PROXY_DECLARE(proxy_worker *) ap_proxy_get_worker(apr_pool_t *p,
    int max_match = 0;
    int url_length;
    int worker_name_length;
    int sh_length;
    const char *c;
    char *url_copy;
    int i;

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

    url_copy = apr_pstrdup(p, url);
    url_length = strlen(url);

    /*
     * We need to find the start of the path and
     * therefore we know the length of the scheme://hostname/
     * part.
     * part to we can force-lowercase everything up to
     * the start of the path.
     */
    c = ap_strchr_c(c+3, '/');
    if (c)
        sh_length = c - url;
    else
        sh_length = url_length;
    if (c) {
        char *pathstart;
        pathstart = url_copy + (c - url);
        *pathstart = '\0';
        ap_str_tolower(url_copy);
        *pathstart = '/';
    } else {
        ap_str_tolower(url_copy);
    }
    
    worker = (proxy_worker *)conf->workers->elts;

@@ -1244,22 +1251,9 @@ PROXY_DECLARE(proxy_worker *) ap_proxy_get_worker(apr_pool_t *p,
     * fits best to the URL.
     */
    for (i = 0; i < conf->workers->nelts; i++) {
        int prefix;
        int bypass;
        worker_name_length = strlen(worker->name);
        if (worker_name_length <= sh_length) {
            prefix = worker_name_length;
            bypass = 1;
        } else {
            prefix = sh_length;
            bypass = 0;
        }
        if ( (worker_name_length <= url_length)
        if ( ((worker_name_length = strlen(worker->name)) <= url_length)
           && (worker_name_length > max_match)
           && (strncasecmp(url, worker->name, prefix) == 0)
           && (bypass || (strncmp(url + prefix, worker->name + prefix,
                          worker_name_length - prefix) == 0)) )
        {
           && (strncmp(url_copy, worker->name, worker_name_length) == 0) ) {
            max_worker = worker;
            max_match = worker_name_length;
        }