/* Some max char string sizes, for shm fields */
#define PROXY_WORKER_MAX_SCHEME_SIZE 16
#define PROXY_WORKER_MAX_ROUTE_SIZE 64
+#define PROXY_BALANCER_MAX_ROUTE_SIZE PROXY_WORKER_MAX_ROUTE_SIZE
#define PROXY_WORKER_MAX_NAME_SIZE 96
#define PROXY_BALANCER_MAX_NAME_SIZE PROXY_WORKER_MAX_NAME_SIZE
#define PROXY_WORKER_MAX_HOSTNAME_SIZE 64
char nonce[APR_UUID_FORMATTED_LENGTH + 1];
char name[PROXY_BALANCER_MAX_NAME_SIZE];
char sname[PROXY_BALANCER_MAX_NAME_SIZE];
- char alias[PROXY_BALANCER_MAX_NAME_SIZE];
+ char vpath[PROXY_BALANCER_MAX_ROUTE_SIZE];
+ char vhost[PROXY_BALANCER_MAX_HOSTNAME_SIZE];
apr_interval_time_t timeout; /* Timeout for waiting on free connection */
apr_time_t wupdated; /* timestamp of last change to workers list */
int max_attempts; /* Number of attempts before failing */
proxy_balancer_shared *bshared;
char *c, *q, *uri = apr_pstrdup(p, url);
const char *sname;
+ apr_uri_t puri;
/* We should never get here without a valid BALANCER_PREFIX... */
*balancer = apr_array_push(conf->balancers);
memset(*balancer, 0, sizeof(proxy_balancer));
+ apr_uri_parse(p, alias, &puri);
+
/*
* NOTE: The default method is byrequests, which we assume
* exists!
if (PROXY_STRNCPY(bshared->sname, sname) != APR_SUCCESS) {
return apr_psprintf(p, "balancer safe-name (%s) too long", sname);
}
- if (PROXY_STRNCPY(bshared->alias, alias) != APR_SUCCESS) {
- return apr_psprintf(p, "balancer front-end url (%s) too long", alias);
+ if (PROXY_STRNCPY(bshared->vpath, puri.path) != APR_SUCCESS) {
+ return apr_psprintf(p, "balancer front-end virtual-path (%s) too long", puri.path);
}
bshared->hash = ap_proxy_hashfunc(bshared->name, PROXY_HASHFUNC_DEFAULT);
(*balancer)->hash = bshared->hash;