mturk       2004/11/29 23:30:42

  Modified:    jk/native/apache-1.3 mod_jk.c
               jk/native/apache-2.0 mod_jk.c
               jk/native/common jk_uri_worker_map.c
  Log:
  Add JkUnMount for blocking context. This is something from JK2.
  
  Revision  Changes    Path
  1.53      +36 -2     jakarta-tomcat-connectors/jk/native/apache-1.3/mod_jk.c
  
  Index: mod_jk.c
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/apache-1.3/mod_jk.c,v
  retrieving revision 1.52
  retrieving revision 1.53
  diff -u -r1.52 -r1.53
  --- mod_jk.c  12 Nov 2004 18:45:24 -0000      1.52
  +++ mod_jk.c  30 Nov 2004 07:30:41 -0000      1.53
  @@ -673,7 +673,7 @@
                                                     &jk_module);
       char *old;
       if (context[0] != '/')
  -        return "Context should start with /";
  +        return "Mount context should start with /";
   
       /*
        * Add the new worker to the alias map.
  @@ -683,6 +683,33 @@
   }
   
   /*
  + * JkUnMount directive handling
  + *
  + * JkUnMount URI(context) worker
  + */
  +
  +static const char *jk_unmount_context(cmd_parms * cmd,
  +                                      void *dummy,
  +                                      const char *context,
  +                                      const char *worker,
  +                                      const char *maybe_cookie)
  +{
  +    server_rec *s = cmd->server;
  +    jk_server_conf_t *conf =
  +        (jk_server_conf_t *) ap_get_module_config(s->module_config,
  +                                                  &jk_module);
  +    char *old , *uri;
  +    if (context[0] != '/')
  +        return "Unmount context should start with /";
  +    uri = ap_pstrcat(cmd->temp_pool, "!", context, NULL);
  +    /*
  +     * Add the new worker to the alias map.
  +     */
  +    jk_map_put(conf->uri_to_context, uri, worker, (void **)&old);
  +    return NULL;
  +}
  +
  +/*
    * JkAutoMount directive handling 
    *
    * JkAutoMount worker [virtualhost]
  @@ -1430,6 +1457,13 @@
        "A mount point from a context to a servlet-engine worker"},
   
       /*
  +     * JkUnMount unmounts a url prefix to a worker (the worker need to be
  +     * defined in the worker properties file.
  +     */
  +    {"JkUnMount", jk_unmount_context, NULL, RSRC_CONF, TAKE23,
  +     "A no mount point from a context to a servlet-engine worker"},
  +
  +     /*
        * JkMountCopy specifies if mod_jk should copy the mount points
        * from the main server to the virtual servers.
        */
  
  
  
  1.102     +36 -2     jakarta-tomcat-connectors/jk/native/apache-2.0/mod_jk.c
  
  Index: mod_jk.c
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/apache-2.0/mod_jk.c,v
  retrieving revision 1.101
  retrieving revision 1.102
  diff -u -r1.101 -r1.102
  --- mod_jk.c  12 Nov 2004 18:45:24 -0000      1.101
  +++ mod_jk.c  30 Nov 2004 07:30:42 -0000      1.102
  @@ -714,7 +714,7 @@
                                                     &jk_module);
       char *old;
       if (context[0] != '/')
  -        return "Context should start with /";
  +        return "Mount xontext should start with /";
   
       /*
        * Add the new worker to the alias map.
  @@ -723,6 +723,33 @@
       return NULL;
   }
   
  +/*
  + * JkUnMount directive handling
  + *
  + * JkUnMount URI(context) worker
  + */
  +
  +static const char *jk_unmount_context(cmd_parms * cmd,
  +                                      void *dummy,
  +                                      const char *context,
  +                                      const char *worker,
  +                                      const char *maybe_cookie)
  +{
  +    server_rec *s = cmd->server;
  +    jk_server_conf_t *conf =
  +        (jk_server_conf_t *) ap_get_module_config(s->module_config,
  +                                                  &jk_module);
  +    char *old , *uri;
  +    if (context[0] != '/')
  +        return "Unmount context should start with /";
  +    uri = apr_pstrcat(cmd->temp_pool, "!", context, NULL);
  +    /*
  +     * Add the new worker to the alias map.
  +     */
  +    jk_map_put(conf->uri_to_context, uri, worker, (void **)&old);
  +    return NULL;
  +}
  +
   
   /*
    * JkAutoMount directive handling
  @@ -1529,6 +1556,13 @@
        */
       AP_INIT_TAKE23("JkMount", jk_mount_context, NULL, RSRC_CONF,
                      "A mount point from a context to a Tomcat worker"),
  +
  +    /*
  +     * JkUnMount unmounts a url prefix to a worker (the worker need to be
  +     * defined in the worker properties file.
  +     */
  +    AP_INIT_TAKE23("JkUnMount", jk_unmount_context, NULL, RSRC_CONF,
  +                   "A no mount point from a context to a Tomcat worker"),
   
       /*
        * JkMountCopy specifies if mod_jk should copy the mount points
  
  
  
  1.33      +67 -10    
jakarta-tomcat-connectors/jk/native/common/jk_uri_worker_map.c
  
  Index: jk_uri_worker_map.c
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_uri_worker_map.c,v
  retrieving revision 1.32
  retrieving revision 1.33
  diff -u -r1.32 -r1.33
  --- jk_uri_worker_map.c       29 Nov 2004 17:04:10 -0000      1.32
  +++ jk_uri_worker_map.c       30 Nov 2004 07:30:42 -0000      1.33
  @@ -60,7 +60,11 @@
       unsigned ctxt_len;
   
       int match_type;
  +
  +    /* no map directive */
  +    int no_match;
   };
  +
   typedef struct uri_worker_record uri_worker_record_t;
   
   struct jk_uri_worker_map
  @@ -270,6 +274,13 @@
           JK_TRACE_EXIT(l);
           return JK_FALSE;
       }
  +    
  +    if (*puri == '!') {
  +        uwr->no_match = 1;
  +        puri++;
  +    }
  +    else
  +        uwr->no_match = 0;
   
       uri = jk_pool_strdup(&uw_map->p, puri);
       worker = jk_pool_strdup(&uw_map->p, pworker);
  @@ -281,7 +292,7 @@
           return JK_FALSE;
       }
   
  -    if ('/' == uri[0]) {
  +    if (uri[0] == '/') {
           char *asterisk = strchr(uri, '*');
           
           if (asterisk && strchr(asterisk + 1, '*') ||
  @@ -563,12 +574,15 @@
       for (i = 0; i < uw_map->size; i++) {
           uri_worker_record_t *uwr = uw_map->maps[i];
   
  -        if (uwr->ctxt_len < longest_match) {
  -            continue;       /* can not be a best match anyway */
  +        /* Check for no match in any case */
  +        if (uwr->ctxt_len < longest_match && !uwr->no_match) {
  +            /* can not be a best match anyway */
  +            continue;
           }
           jk_log(l, JK_LOG_DEBUG, "Attempting to map context URI '%s'\n", 
uwr->uri);
   
           if (uwr->match_type == MATCH_TYPE_WILDCHAR_PATH) {
  +            char *wname;
               /* Map is already sorted by ctxt_len */
               if (wildchar_match(uri, uwr->context,
   #ifdef WIN32
  @@ -577,17 +591,31 @@
                                  0
   #endif
                                  ) == 0) {
  -
  -                    jk_log(l, JK_LOG_DEBUG,
  -                            "Found an wildchar match %s -> %s\n",
  -                            uwr->worker_name, uwr->context);
  +                    wname = uwr->worker_name;
  +                    if (uwr->no_match) {
  +                        jk_log(l, JK_LOG_DEBUG,
  +                                "Found a wildchar no match %s -> %s\n",
  +                                uwr->worker_name, uwr->context);
  +                        wname = NULL;
  +                    }
  +                    else
  +                        jk_log(l, JK_LOG_DEBUG,
  +                                "Found a wildchar match %s -> %s\n",
  +                                uwr->worker_name, uwr->context);
                       JK_TRACE_EXIT(l);
  -                    return uwr->worker_name;
  +                    return wname;
                }
           }
           else if (strncmp(uwr->context, uri, uwr->ctxt_len) == 0) {
               if (uwr->match_type == MATCH_TYPE_EXACT) {
                   if (strlen(uri) == uwr->ctxt_len) {
  +                    if (uwr->no_match) {
  +                        jk_log(l, JK_LOG_DEBUG,
  +                                "Found an exact no match %s -> %s\n",
  +                                uwr->worker_name, uwr->context);
  +                        JK_TRACE_EXIT(l);
  +                        return NULL;
  +                    }
                       jk_log(l, JK_LOG_DEBUG,
                               "Found an exact match %s -> %s\n",
                               uwr->worker_name, uwr->context);
  @@ -597,6 +625,13 @@
               }
               else if (uwr->match_type == MATCH_TYPE_CONTEXT) {
                   if (uwr->ctxt_len > longest_match) {
  +                    if (uwr->no_match) {
  +                        jk_log(l, JK_LOG_DEBUG,
  +                                "Found a context no match %s -> %s\n",
  +                                uwr->worker_name, uwr->context);
  +                        JK_TRACE_EXIT(l);
  +                        return NULL;
  +                    }
                       jk_log(l, JK_LOG_DEBUG,
                               "Found a context match %s -> %s\n",
                               uwr->worker_name, uwr->context);
  @@ -609,6 +644,13 @@
                   if (suffix_start >= 0
                       && 0 == strcmp(uri + suffix_start, uwr->suffix)) {
                       if (uwr->ctxt_len >= longest_match) {
  +                        if (uwr->no_match) {
  +                                jk_log(l, JK_LOG_DEBUG,
  +                                        "Found a general no suffix match for 
%s -> %s\n",
  +                                        uwr->worker_name, uwr->uri);
  +                                JK_TRACE_EXIT(l);
  +                                return NULL;
  +                        }
                           jk_log(l, JK_LOG_DEBUG,
                                   "Found a general suffix match %s -> *%s\n",
                                   uwr->worker_name, uwr->suffix);
  @@ -624,7 +666,14 @@
                       if (0 ==
                           strncmp(suffix_path, uwr->suffix,
                                   strlen(uwr->suffix))) {
  -                        if (uwr->ctxt_len >= longest_match) {
  +                        if (uwr->no_match) {
  +                            jk_log(l, JK_LOG_DEBUG,
  +                                    "Found a general context no match %s -> 
%s\n",
  +                                    uwr->worker_name, uwr->context);
  +                            JK_TRACE_EXIT(l);
  +                            return NULL;
  +                        }
  +                        else if (uwr->ctxt_len >= longest_match) {
                               jk_log(l, JK_LOG_DEBUG,
                                       "Found a general context path match %s 
-> *%s\n",
                                       uwr->worker_name, uwr->suffix);
  @@ -650,7 +699,15 @@
   #else
                       if (strcmp(suffix, uwr->suffix) == 0) {
   #endif
  +
                           if (uwr->ctxt_len >= longest_match) {
  +                            if (uwr->no_match) {
  +                                    jk_log(l, JK_LOG_DEBUG,
  +                                            "Found a no suffix match for %s 
-> %s\n",
  +                                            uwr->worker_name, uwr->uri);
  +                                    JK_TRACE_EXIT(l);
  +                                    return NULL;
  +                            }
                               jk_log(l, JK_LOG_DEBUG,
                                       "Found a suffix match %s -> *.%s\n",
                                       uwr->worker_name, uwr->suffix);
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to