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

Allow determination of whether to use ';' as

a sticky session path delim/sep (ala mod_jk) to
be runtime (and balancer-wise) configurable.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@687754 13f79535-47bb-0310-9956-ffa450edef68
parent 540f501b
Loading
Loading
Loading
Loading
+7 −0
Changes for docs/manual/mod/mod_proxy.xml: 7 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -841,6 +841,13 @@ expressions</description>
        and url encoded id (like servlet containers) use | to to separate them.
        The first part is for the cookie the second for the path.
    </td></tr>
    <tr><td>scolonpathdelim</td>
        <td>Off</td>
        <td>If set to <code>On</code> the semi-colon character ';' will be
        used as an additional sticky session path deliminator/separator. This
        is mainly used to emulate mod_jk's behavior when dealing with paths such
        as <code>JSESSIONID=6736bcf34;foo=aabfa</code>
    </td></tr>
    <tr><td>timeout</td>
        <td>0</td>
        <td>Balancer timeout in seconds. If set this will be the maximum time
+2 −1
Changes for include/ap_mmn.h: 2 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -165,6 +165,7 @@
 * 20080722.0 (2.3.0-dev)  remove has_realm_hash() from authn_provider struct
 * 20080722.1 (2.3.0-dev)  Add conn_timeout and conn_timeout_set to
 *                         proxy_worker struct.
 * 20080722.2 (2.3.0-dev)  Add scolonsep to proxy_balancer
 *
 */

@@ -173,7 +174,7 @@
#ifndef MODULE_MAGIC_NUMBER_MAJOR
#define MODULE_MAGIC_NUMBER_MAJOR 20080722
#endif
#define MODULE_MAGIC_NUMBER_MINOR 1                     /* 0...n */
#define MODULE_MAGIC_NUMBER_MINOR 2                     /* 0...n */

/**
 * Determine if the server's current MODULE_MAGIC_NUMBER is at least a
+12 −0
Changes for modules/proxy/mod_proxy.c: 12 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -360,6 +360,18 @@ static const char *set_balancer_param(proxy_server_conf *conf,
        }
        return "unknown lbmethod";
    }
    else if (!strcasecmp(key, "scolonpathdelim")) {
        /* If set to 'on' then ';' will also be
         * used as a session path separator/delim (ala
         * mod_jk)
         */
        if (!strcasecmp(val, "on"))
            balancer->scolonsep = 1;
        else if (!strcasecmp(val, "off"))
            balancer->scolonsep = 0;
        else
            return "scolonpathdelim must be On|Off";
    }
    else {
        return "unknown Balancer parameter";
    }
+1 −0
Changes for modules/proxy/mod_proxy.h: 1 added line, 0 removed lines.
Original line number Diff line number Diff line
@@ -382,6 +382,7 @@ struct proxy_balancer {
#endif
    void            *context;   /* general purpose storage */
    const char      *sticky_path;  /* URL sticky session identifier */
    int             scolonsep;     /* true if ';' seps sticky session paths */
};

struct proxy_balancer_method {
+7 −3
Changes for modules/proxy/mod_proxy_balancer.c: 7 added lines, 3 removed lines.
Original line number Diff line number Diff line
@@ -128,10 +128,14 @@ static int init_balancer_members(proxy_server_conf *conf, server_rec *s,
 * Something like 'JSESSIONID=12345...N'
 */
static char *get_path_param(apr_pool_t *pool, char *url,
                            const char *name)
                            const char *name, int scolon_sep)
{
    char *path = NULL;
    char *pathdelims = "?&";

    if (scolon_sep) {
        pathdelims = ";?&";
    }
    for (path = strstr(url, name); path; path = strstr(path + 1, name)) {
        path += strlen(name);
        if (*path == '=') {
@@ -141,7 +145,7 @@ static char *get_path_param(apr_pool_t *pool, char *url,
            ++path;
            if (strlen(path)) {
                char *q;
                path = apr_strtok(apr_pstrdup(pool, path), ";?&", &q);
                path = apr_strtok(apr_pstrdup(pool, path), pathdelims, &q);
                return path;
            }
        }
@@ -261,7 +265,7 @@ static proxy_worker *find_session_route(proxy_balancer *balancer,
    if (!balancer->sticky)
        return NULL;
    /* Try to find the sticky route inside url */
    *route = get_path_param(r->pool, *url, balancer->sticky_path);
    *route = get_path_param(r->pool, *url, balancer->sticky_path, balancer->scolonsep);
    if (*route) {
        ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
                     "proxy: BALANCER: Found value %s for "