mirror of
https://github.com/apache/httpd.git
synced 2025-08-08 15:02:10 +03:00
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
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user