costin      01/12/06 14:57:14

  Modified:    jk/native2/common jk_handler_discovery.c
  Log:
  Some massive changes. This is now probably broken ( but it's an optional piece ).
  
  The idea is that status notifications and messages about new apps could be sent
  by tomcat at any time - not only at startup time. The original code did a RPC-style
  request for discovery - that didn't worked if tomcat was started after apache,
  and doesn't allow for dynamic updates.
  
  The way ( I think ) it should operate is to accept messages at any time using
  the common loop and dispatch on message type.
  
  Revision  Changes    Path
  1.6       +120 -612  
jakarta-tomcat-connectors/jk/native2/common/jk_handler_discovery.c
  
  Index: jk_handler_discovery.c
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_handler_discovery.c,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- jk_handler_discovery.c    2001/12/05 20:48:20     1.5
  +++ jk_handler_discovery.c    2001/12/06 22:57:13     1.6
  @@ -58,7 +58,7 @@
   /**
    * Description: AJP14 Discovery handler
    * Author:      Henri Gomez <[EMAIL PROTECTED]>
  - * Version:     $Revision: 1.5 $                                          
  + * Version:     $Revision: 1.6 $                                          
    */
   
   #include "jk_global.h"
  @@ -68,105 +68,30 @@
   #include "jk_logger.h"
   #include "jk_service.h"
   #include "jk_handler.h"
  +#include "jk_webapp.h"
  +#include "jk_workerEnv.h"
   
  -#define CBASE_INC_SIZE   (8)    /* Allocate memory by step of 8 URIs : ie 8 URI by 
context */
  -#define URI_INC_SIZE (8)        /* Allocate memory by step of 8 CONTEXTs : ie 8 
contexts by worker */
  +int JK_METHOD jk_handler_discovery_factory( jk_env_t *env, jk_pool_t *pool, void 
**result,
  +                                            const char *type, const char *name);
   
  -/** XXX XXX MERGE into jk_uriMap / jk_uriEnv */
  -
  -typedef struct {
  -    char *      cbase;
  -    int         status;
  -    int         size;
  -    int         capacity;
  -    char **     uris;
  -} jk_context_item_t;
  -
  -
  -typedef struct {
  -
  -    /*
  -     * Memory Pool
  -     */
  -
  -    jk_pool_t       p;
  -    jk_pool_atom_t  buf[SMALL_POOL_SIZE];
  -
  -     /*
  -      * Virtual Server (if use)
  -      */
  -
  -     char *                      virtual;
  -
  -    /*
  -     * Num of context handled (ie: examples, admin...)
  -     */
  -
  -    int                     size;
  -
  -    /*
  -     * Capacity
  -     */
  -
  -    int                     capacity; 
  -
  -    /*
  -     * Context list, context / URIs
  -     */
  -
  -    jk_context_item_t **    contexts;
  -} 
  -jk_context_t;
  -
  -
  -/*
  - * functions defined here 
  - */
  -
  -int context_set_virtual(jk_context_t *c, char *virtual);
  -
  -int context_open(jk_context_t *c, char *virtual);
  -
  -int context_free(jk_context_t **c);
  -
  -jk_context_item_t *context_find_base(jk_context_t *c, char *cbase);
  -
  -char *context_item_find_uri(jk_context_item_t *ci, char *uri);
  -
  -void context_dump_uris(jk_context_t *c, char *cbase, FILE *f);
  -
  -jk_context_item_t *context_add_base(jk_context_t *c, char *cbase);
  -
  -int context_add_uri(jk_context_t *c, char *cbase, char *uri);
  -
  -static int jk_handler_discovery_init( jk_worker_t *w );
  -
  -static int jk_handler_discovery_discovery(jk_endpoint_t *ae,jk_workerEnv_t *we,
  -                                          jk_logger_t *l);
  -
  -static int ajp14_marshal_context_query_into_msgb(jk_msg_buf_t *msg,
  -                                                 char         *virtual,
  -                                                 jk_logger_t  *l);
  -
  -static int ajp14_unmarshal_context_info(jk_msg_buf_t *msg,
  -                                        jk_context_t *c,
  -                                        jk_logger_t  *l);
  -
  -static int ajp14_marshal_context_state_into_msgb(jk_msg_buf_t *msg,
  -                                                 jk_context_t *c,
  -                                                 char         *cname,
  -                                                 jk_logger_t  *l);
  -
  -static int ajp14_unmarshal_context_state_reply(jk_msg_buf_t *msg,
  -                                               jk_context_t *c,
  -                                               jk_logger_t  *l);
  -
  -static int ajp14_unmarshal_context_update_cmd(jk_msg_buf_t *msg,
  -                                              jk_context_t *c,
  +int jk_handler_discovery_sendDiscovery(jk_endpoint_t *ae,
  +                                       jk_workerEnv_t *we,
  +                                       jk_logger_t    *l);
  +
  +int jk_handler_discovery_handleContextList(jk_endpoint_t  *ae,
  +                                           jk_workerEnv_t *we,
  +                                           jk_msg_buf_t    *msg,
  +                                           jk_logger_t     *l);
  +
  +int jk_handler_discovery_sendGetContextaState(jk_msg_buf_t *msg,
  +                                              jk_workerEnv_t *c,
  +                                              char *vhost,
  +                                              char *cname,
                                                 jk_logger_t  *l);
   
  -int JK_METHOD jk_handler_discovery_factory( jk_env_t *env, void **result,
  -                                            char *type, char *name);
  +int jk_handler_discovery_handleContextState(jk_msg_buf_t *msg,
  +                                            jk_workerEnv_t *c,
  +                                            jk_logger_t  *l);
   
   /*
    * Context Query (web server -> servlet engine), which URI are handled by servlet 
engine ?
  @@ -194,12 +119,17 @@
    */
   #define AJP14_CONTEXT_STATE_REP_CMD  (unsigned char)0x1D
   
  +#define MAX_URI_SIZE    512
  +
  +static int jk_handler_discovery_init( jk_worker_t *w );
  +
   /* ==================== Constructor and impl. ==================== */
   
  -int JK_METHOD jk_handler_discovery_factory( jk_env_t *env, void **result,
  -                                            char *type, char *name)
  +int JK_METHOD jk_handler_discovery_factory( jk_env_t *env, jk_pool_t *pool,
  +                                            void **result,
  +                                            const char *type, const char *name)
   {
  -    jk_handler_t *h=(jk_handler_t *)malloc( sizeof( jk_handler_t));
  +    jk_handler_t *h=(jk_handler_t *)pool->alloc( pool, sizeof( jk_handler_t));
   
       h->init=jk_handler_discovery_init;
       *result=h;
  @@ -211,211 +141,36 @@
       return JK_TRUE;
   }
   
  -
  -static int context_realloc(jk_context_t *c)
  -{
  -    if (c->size == c->capacity) {
  -        jk_context_item_t **contexts;
  -        int  capacity = c->capacity + CBASE_INC_SIZE;
  -        
  -        contexts = (jk_context_item_t **)c->p.alloc(&c->p, sizeof(jk_context_item_t 
*) * capacity);
  -
  -        if (! contexts)
  -            return JK_FALSE;
  -
  -        if (c->capacity && c->contexts)
  -            memcpy(contexts, c->contexts, sizeof(jk_context_item_t *) * 
c->capacity);
  -
  -        c->contexts = contexts;
  -        c->capacity = capacity;
  -    }
  -
  -    return JK_TRUE;
  -}
  -
  -
  -static int context_item_realloc(jk_context_t *c, jk_context_item_t *ci)
  -{
  -    if (ci->size == ci->capacity) {
  -            char **uris;
  -            int capacity = ci->capacity + URI_INC_SIZE;
  -
  -            uris = (char **)c->p.alloc(&c->p, sizeof(char *) * capacity);
  -
  -        if (! uris)
  -            return JK_FALSE;
  -
  -        memcpy(uris, ci->uris, sizeof(char *) * ci->capacity);
  -
  -        ci->uris     = uris;
  -        ci->capacity = capacity;
  -    }
  -    
  -    return JK_TRUE;
  -}
  -
  -/*
  - * Init the context info struct
  - */
   
  -int context_open(jk_context_t *c, char *virtual)
  -{
  -    if (c) {
  -        jk_open_pool(&c->p, c->buf, sizeof(jk_pool_atom_t) * SMALL_POOL_SIZE);
  -        c->size      = 0;
  -        c->capacity = 0;
  -        c->contexts = NULL;
  -
  -        if( virtual ) {
  -            c->virtual=c->p.pstrdup(&c->p, virtual);
  -        }
  -        return JK_TRUE;
  -    }
  -
  -    return JK_FALSE;
  -}
  -
  -
  -/*
  - * AJP14 Autoconf Phase
  +/** Send a 'discovery' message. This is a request for tomcat to
  + *  report all configured webapps and mappings.
    *
  - * CONTEXT QUERY / REPLY
  + * Build the Context Query Cmd (autoconf)
  + *
  + * +--------------------------+-
  + * | CONTEXT QRY CMD (1 byte) | 
  + * +--------------------------+-
  + *
    */
  -
  -#define MAX_URI_SIZE    512
  -
  -static int handle_discovery(jk_endpoint_t  *ae,
  -                            jk_workerEnv_t *we,
  -                            jk_msg_buf_t    *msg,
  -                            jk_logger_t     *l)
  +int jk_handler_discovery_sendDiscovery(jk_endpoint_t *ae,
  +                                       jk_workerEnv_t *we,
  +                                       jk_logger_t    *l)
   {
  +    jk_pool_t     *p = ae->pool;
  +    jk_msg_buf_t  *msg;
  +    int           rc=JK_FALSE;
       int                 cmd;
       int                 i,j;
       jk_login_service_t  *jl = ae->worker->login;
  -    jk_context_item_t   *ci;
  -    jk_context_t        *c;  
  +    jk_webapp_t   *ci;
  +    jk_webapp_t         *webapp;  
       char                *buf;
   
  -#ifndef TESTME
  -
  -    ajp14_marshal_context_query_into_msgb(msg, we->virtual, l);
  -    
  -    l->jkLog(l, JK_LOG_DEBUG, "Into ajp14:discovery - send query\n");
  -
  -    if (ajp_connection_tcp_send_message(ae, msg, l) != JK_TRUE)
  -        return JK_FALSE;
  -    
  -    l->jkLog(l, JK_LOG_DEBUG, "Into ajp14:discovery - wait context reply\n");
  -    
  -    jk_b_reset(msg);
  -    
  -    if (ajp_connection_tcp_get_message(ae, msg, l) != JK_TRUE)
  -        return JK_FALSE;
  -    
  -    if ((cmd = jk_b_get_byte(msg)) != AJP14_CONTEXT_INFO_CMD) {
  -        l->jkLog(l, JK_LOG_ERROR,
  -               "Error ajp14:discovery - awaited command %d, received %d\n",
  -               AJP14_CONTEXT_INFO_CMD, cmd);
  -        return JK_FALSE;
  -    }
  -
  -    c=(jk_context_t *)malloc( sizeof(jk_context_t));
  -    if (context_open(c, we->virtual) != JK_TRUE) {
  -        l->jkLog(l, JK_LOG_ERROR,
  -               "Error ajp14:discovery - can't allocate context room\n");
  -        return JK_FALSE;
  -    }
  - 
  -    if (ajp14_unmarshal_context_info(msg, c, l) != JK_TRUE) {
  -        l->jkLog(l, JK_LOG_ERROR,
  -               "Error ajp14:discovery - can't get context reply\n");
  -        return JK_FALSE;
  -    }
  -
  -    l->jkLog(l, JK_LOG_DEBUG, "Into ajp14:discovery - received context\n");
   
  -    buf = malloc(MAX_URI_SIZE);      /* Really a very long URI */
  -    
  -    if (! buf) {
  -        l->jkLog(l, JK_LOG_ERROR, "Error ajp14:discovery - can't alloc buf\n");
  -        return JK_FALSE;
  -    }
  -    
  -    for (i = 0; i < c->size; i++) {
  -        ci = c->contexts[i];
  -        for (j = 0; j < ci->size; j++) {
  -            
  -#ifndef USE_SPRINTF
  -            snprintf(buf, MAX_URI_SIZE - 1, "/%s/%s", ci->cbase, ci->uris[j]);
  -#else
  -            sprintf(buf, "/%s/%s", ci->cbase, ci->uris[j]);
  -#endif
  -            
  -            l->jkLog(l, JK_LOG_INFO,
  -                   "Into ajp14:discovery "
  -                   "- worker %s will handle uri %s in context %s [%s]\n",
  -                   ae->worker->name, ci->uris[j], ci->cbase, buf);
  -            
  -/* XXX UPDATE             uri_worker_map_add(we->uri_to_worker, buf, 
ae->worker->name, l); */
  -        }
  -    }
  -    
  -    free(buf);
  -    c->p.close(&c->p);
  -    free(c);
  -    c = NULL;
  -#else 
  -    
  -    uri_worker_map_add(we->uri_to_worker,
  -                       "/examples/servlet/*",
  -                       ae->worker->name, l);
  -    uri_worker_map_add(we->uri_to_worker,
  -                       "/examples/*.jsp",
  -                       ae->worker->name, l);
  -    uri_worker_map_add(we->uri_to_worker,
  -                       "/examples/*.gif",
  -                       ae->worker->name, l);
  -
  -#endif 
  -    return JK_TRUE;
  -}
  - 
  -static int jk_handler_discovery_discovery(jk_endpoint_t *ae,
  -              jk_workerEnv_t *we,
  -              jk_logger_t    *l)
  -{
  -    jk_pool_t     *p = &ae->pool;
  -    jk_msg_buf_t  *msg;
  -    int           rc;
  -
       l->jkLog(l, JK_LOG_DEBUG, "Into ajp14:discovery\n");
       
       msg = jk_b_new(p);
       jk_b_set_buffer_size(msg, DEF_BUFFER_SZ);
  -    
  -    if ((rc = handle_discovery(ae, we, msg, l)) == JK_FALSE)
  -        ajp_close_endpoint(ae, l);
  -
  -    return rc;
  -}
  -
  -/* -------------------- private utils/marshaling -------------------- */
  -
  -/*
  - * Build the Context Query Cmd (autoconf)
  - *
  - * +--------------------------+---------------------------------+
  - * | CONTEXT QRY CMD (1 byte) | VIRTUAL HOST NAME (CString (*)) |
  - * +--------------------------+---------------------------------+
  - *
  - */
  -static int ajp14_marshal_context_query_into_msgb(jk_msg_buf_t *msg,
  -                                                 char         *virtual,
  -                                                 jk_logger_t  *l)
  -{
  -    l->jkLog(l, JK_LOG_DEBUG, "Into ajp14_marshal_context_query_into_msgb\n");
  -    
  -    /* To be on the safe side */
       jk_b_reset(msg);
       
       /*
  @@ -424,22 +179,20 @@
       if (jk_b_append_byte(msg, AJP14_CONTEXT_QRY_CMD))
           return JK_FALSE;
       
  -    /*
  -     * VIRTUAL HOST CSTRING
  -     */
  -    if (jk_b_append_string(msg, virtual)) {
  -        l->jkLog(l, JK_LOG_ERROR,
  -               "Error ajp14_marshal_context_query_into_msgb "
  -               "- Error appending the virtual host string\n");
  +    l->jkLog(l, JK_LOG_DEBUG, "Into ajp14:discovery - send query\n");
  +
  +    if (ajp_connection_tcp_send_message(ae, msg, l) != JK_TRUE)
           return JK_FALSE;
  -    }
       
  -    return JK_TRUE;
  +    jk_b_reset(msg);
  +    
  +    return rc;
   }
   
  +/* -------------------- private utils/marshaling -------------------- */
   
   /*
  - * Decode the Context Info Cmd (Autoconf)
  + * Decode the ContextList Cmd (Autoconf)
    *
    * The Autoconf feature of AJP14, let us know which URL/URI could
    * be handled by the servlet-engine
  @@ -452,89 +205,66 @@
    *CONTEXT NAME (CString (*)) | URL1 [\n] URL2 [\n] URL3 [\n] | NEXT CTX. |
    *-------------------+-------------------------------+-----------+
    */
  -
  -static int ajp14_unmarshal_context_info(jk_msg_buf_t *msg,
  -                                        jk_context_t *c,
  -                                        jk_logger_t  *l)
  +int jk_handler_discovery_handleContextList(jk_endpoint_t  *ae,
  +                                           jk_workerEnv_t *we,
  +                                           jk_msg_buf_t    *msg,
  +                                           jk_logger_t     *l)
   {
       char *vname;
       char *cname;
       char *uri;
  -    
  -    vname  = (char *)jk_b_get_string(msg);
  -
  -    l->jkLog(l, JK_LOG_DEBUG,
  -           "ajp14_unmarshal_context_info - get virtual %s for virtual %s\n",
  -             vname, c->virtual);
  +    int                 cmd;
  +    int                 i,j;
  +    jk_login_service_t  *jl = ae->worker->login;
  +    jk_webapp_t   *ci;
  +    jk_webapp_t         *webapp;  
  +    char                *buf;
   
  -    if (! vname) {
  -        l->jkLog(l, JK_LOG_ERROR,
  -               "Error ajp14_unmarshal_context_info "
  -               "- can't get virtual hostname\n");
  +    /*     if (ajp_connection_tcp_get_message(ae, msg, l) != JK_TRUE) */
  +    /*         return JK_FALSE; */
  +    
  +    if ((cmd = jk_b_get_byte(msg)) != AJP14_CONTEXT_INFO_CMD) {
  +        l->jkLog(l, JK_LOG_ERROR, "Error ajp14:discovery - wrong cmd %d:%d\n",
  +                 AJP14_CONTEXT_INFO_CMD, cmd);
           return JK_FALSE;
       }
  -    
  -    /* Check if we get the correct virtual host */
  -    if (c->virtual != NULL && 
  -     vname != NULL &&
  -     strcmp(c->virtual, vname)) {
  -        /* set the virtual name, better to add to a virtual list ? */
   
  -        if( vname != NULL ) {
  -            c->virtual=  c->p.pstrdup(&c->p, vname);
  -        }
  -    }
  -    
       for (;;) {
  -        
  +        vname  = (char *)jk_b_get_string(msg);
           cname  = (char *)jk_b_get_string(msg); 
   
  -        if (! cname) {
  -            l->jkLog(l, JK_LOG_ERROR,
  -                   "Error ajp14_unmarshal_context_info - can't get context\n");
  -            return JK_FALSE;
  +        if (cname==NULL || strlen( cname ) == 0 ) {
  +            l->jkLog(l, JK_LOG_DEBUG, "End of contest list\n");
  +            return JK_TRUE;
           }   
  -        
  -        l->jkLog(l, JK_LOG_DEBUG, "ajp14_unmarshal_context_info "
  -               "- get context %s for virtual %s\n", cname, vname);
           
  -        /* grab all contexts up to empty one which indicate end of contexts */
  -        if (! strlen(cname)) 
  -            break;
  +        l->jkLog(l, JK_LOG_DEBUG,
  +                 "contextList - Context: %s:%s \n", vname, cname);
   
  -        /* create new context base (if needed) */
  -        
  -        if (context_add_base(c, cname) == JK_FALSE) {
  -            l->jkLog(l, JK_LOG_ERROR, "Error ajp14_unmarshal_context_info"
  -                   "- can't add/set context %s\n", cname);
  +        webapp = we->createWebapp( we, vname, cname, NULL );
  +        if( webapp==NULL ) {
  +            l->jkLog(l, JK_LOG_ERROR,
  +                     "discoveryHandler: can't create webapp\n");
               return JK_FALSE;
           }
  -        
  +         
           for (;;) {
  -            
               uri  = (char *)jk_b_get_string(msg);
  -            
  -            if (!uri) {
  -                l->jkLog(l, JK_LOG_ERROR,
  -                       "Error ajp14_unmarshal_context_info - can't get URI\n");
  -                return JK_FALSE;
  -            }
               
  -            if (! strlen(uri)) {
  +            if (uri==NULL || strlen( uri ) == 0 ) {
                   l->jkLog(l, JK_LOG_DEBUG, "No more URI for context %s", cname);
                   break;
               }
               
               l->jkLog(l, JK_LOG_INFO,
  -                   "Got URI (%s) for virtualhost %s and context %s\n",
  -                   uri, vname, cname);
  +                   "Got URI %s for %s:%s\n", uri, vname, cname);
               
  -            if (context_add_uri(c, cname, uri) == JK_FALSE) {
  -                l->jkLog(l, JK_LOG_ERROR,
  -                       "Error ajp14_unmarshal_context_info - "
  -                       "can't add/set uri (%s) for context %s\n", uri, cname);
  -                return JK_FALSE;
  -            } 
  +/*             if (context_add_uri(c, cname, uri) == JK_FALSE) { */
  +/*                 l->jkLog(l, JK_LOG_ERROR, */
  +/*                        "Error ajp14_unmarshal_context_info - " */
  +/*                        "can't add/set uri (%s) for context %s\n", uri, cname); */
  +/*                 return JK_FALSE; */
  +/*             }  */
           }
       }
       return JK_TRUE;
  @@ -554,12 +284,13 @@
    * +----------------------------+----------------------------------+----------
    *
    */
  -static int ajp14_marshal_context_state_into_msgb(jk_msg_buf_t *msg,
  -                                                 jk_context_t *c,
  -                                                 char         *cname,
  -                                                 jk_logger_t  *l)
  +int jk_handler_discovery_sendGetContextaState(jk_msg_buf_t *msg,
  +                                              jk_workerEnv_t *we,
  +                                              char *vhost, 
  +                                              char  *cname,
  +                                              jk_logger_t  *l)
   {
  -    jk_context_item_t *ci;
  +    jk_webapp_t *ci;
       int                i;
       
       l->jkLog(l, JK_LOG_DEBUG, "Into ajp14_marshal_context_state_into_msgb\n");
  @@ -576,53 +307,19 @@
       /*
        * VIRTUAL HOST CSTRING
        */
  -     if (jk_b_append_string(msg, c->virtual)) {
  +     if (jk_b_append_string(msg, vhost)) {
           l->jkLog(l, JK_LOG_ERROR, "Error ajp14_marshal_context_state_into_msgb"
                  "- Error appending the virtual host string\n");
           return JK_FALSE;
        }
  -     
  -     if (cname) {
  -         
  -         ci = context_find_base(c, cname);
  -         
  -         if (! ci) {
  -             l->jkLog(l, JK_LOG_ERROR,
  -                    "Warning ajp14_marshal_context_state_into_msgb"
  -                    "- unknown context %s\n", cname);
  -            return JK_FALSE;
  -         }
  -         
  -         /*
  -          * CONTEXT CSTRING
  -          */
  -         
  -         if (jk_b_append_string(msg, cname )) {
  -            l->jkLog(l, JK_LOG_ERROR,
  -                   "Error ajp14_marshal_context_state_into_msgb"
  -                   "- Error appending the context string %s\n", cname);
  -            return JK_FALSE;
  -         }
  -     } else { /* Grab all contexts name */
  -         for (i = 0; i < c->size; i++) {
  -            /*
  -             * CONTEXT CSTRING
  -             */
  -             if (jk_b_append_string(msg, c->contexts[i]->cbase )) {
  -                 l->jkLog(l, JK_LOG_ERROR,
  -                        "Error ajp14_marshal_context_state_into_msgb "
  -                        "- Error appending the context string\n");
  -                 return JK_FALSE;
  -             }
  -         }
  -     }
  -     
  -     /* End of context list, an empty string */ 
        
  -     if (jk_b_append_string(msg, "")) {
  +     /*
  +      * CONTEXT CSTRING
  +      */
  +     if (jk_b_append_string(msg, cname )) {
            l->jkLog(l, JK_LOG_ERROR,
  -                "Error ajp14_marshal_context_state_into_msgb "
  -                "- Error appending end of contexts\n");
  +                  "Error ajp14_marshal_context_state_into_msgb"
  +                  "- Error appending the context string %s\n", cname);
            return JK_FALSE;
        }
        
  @@ -643,233 +340,44 @@
    *CONTEXT NAME (CString (*)) | UP/DOWN (1 byte) | .. |
    * ------------------------+------------------+----+
    */
  -static int ajp14_unmarshal_context_state_reply(jk_msg_buf_t *msg,
  -                                               jk_context_t *c,
  -                                               jk_logger_t  *l)
  +int jk_handler_discovery_handleContextState(jk_msg_buf_t *msg,
  +                                            jk_workerEnv_t *c,
  +                                            jk_logger_t  *l)
   {
       char                *vname;
       char                *cname;
  -    jk_context_item_t   *ci;
  +    jk_webapp_t   *ci = NULL;
   
       /* get virtual name */
       vname  = (char *)jk_b_get_string(msg);
       
  -    if (! vname) {
  -        l->jkLog(l, JK_LOG_ERROR,
  -               "Error ajp14_unmarshal_context_state_reply "
  -               "- can't get virtual hostname\n");
  -        return JK_FALSE;
  +    /* get context name */
  +    cname  = (char *)jk_b_get_string(msg);
  +        
  +    if (! cname || ! strlen(cname)) {
  +        return JK_TRUE;
       }
  -    
  -    /* Check if we speak about the correct virtual */
  -    if (strcmp(c->virtual, vname)) {
  +        
  +    /* ci = context_find_base(c, cname); */
  +        
  +    if (! ci) {
           l->jkLog(l, JK_LOG_ERROR,
  -               "Error ajp14_unmarshal_context_state_reply"
  -               "- incorrect virtual %s instead of %s\n",
  -               vname, c->virtual);
  +                 "Error ajp14_unmarshal_context_state_reply "
  +                 "- unknow context %s for virtual %s\n", 
  +                 cname, vname);
           return JK_FALSE;
       }
  -    
  -    for (;;) {
  -        /* get context name */
  -        cname  = (char *)jk_b_get_string(msg);
  -        
  -        if (! cname) {
  -            l->jkLog(l, JK_LOG_ERROR,
  -                   "Error ajp14_unmarshal_context_state_reply"
  -                   "- can't get context\n");
  -            return JK_FALSE;
  -        }    
  -        
  -        if (! strlen(cname))
  -            break;
  -        
  -        ci = context_find_base(c, cname);
  -        
  -        if (! ci) {
  -            l->jkLog(l, JK_LOG_ERROR,
  -                   "Error ajp14_unmarshal_context_state_reply "
  -                   "- unknow context %s for virtual %s\n", 
  -                   cname, vname);
  -            return JK_FALSE;
  -        }
           
  -        ci->status = jk_b_get_int(msg);
  +    ci->status = jk_b_get_int(msg);
           
  -        l->jkLog(l, JK_LOG_DEBUG, "ajp14_unmarshal_context_state_reply "
  -               "- updated context %s to state %d\n", cname, ci->status);
  -    }
  -    
  +    l->jkLog(l, JK_LOG_DEBUG, "ajp14_unmarshal_context_state_reply "
  +             "- updated context %s to state %d\n", cname, ci->status);
       return JK_TRUE;
   }
   
  -/*
  - * Decode the Context Update Cmd
  - * 
  - * +-----------------------------+---------------------------------+------
  - * | CONTEXT UPDATE CMD (1 byte) | VIRTUAL HOST NAME (CString (*)) | 
  - * +-----------------------------+---------------------------------+------
  - *
  - * ----------------------+------------------+
  - * CONTEXT NAME (CString (*)) | UP/DOWN (1 byte) |
  - * ----------------------+------------------+
  - * 
  - */
  -static int ajp14_unmarshal_context_update_cmd(jk_msg_buf_t *msg,
  -                                              jk_context_t *c,
  -                                              jk_logger_t  *l)
  -{
  -    return (ajp14_unmarshal_context_state_reply(msg, c, l));
  -}
  -
  - /*
  - * Set the virtual name of the context 
  - */
  -
  -int context_set_virtual(jk_context_t *c, char *virtual)
  -{
  -    if (c) {
  -
  -        if (virtual) {
  -            c->virtual = c->p.pstrdup(&c->p, virtual);
  -
  -            if (! c->virtual)
  -                return JK_FALSE;
  -        }
  -
  -        return JK_TRUE;
  -    }
  -
  -    return JK_FALSE;
  -}
  -
  -/*
  - * Locate a context base in context list
  - */
  -
  -jk_context_item_t * context_find_base(jk_context_t *c, char *cbase)
  -{
  -    int                 i;
  -    jk_context_item_t * ci;
  -
  -    if (! c || ! cbase)
  -        return NULL;
  -
  -    for (i = 0 ; i < c->size ; i++) {
  -        
  -        ci = c->contexts[i];
  -
  -        if (! ci)
  -            continue;
  -
  -        if (! strcmp(ci->cbase, cbase))
  -            return ci;
  -    }
  -
  -    return NULL;
  -}
  -
  -/*
  - * Locate an URI in a context item
  - */
  -
  -char * context_item_find_uri(jk_context_item_t *ci, char *uri)
  -{
  -    int i;
  -
  -    if (! ci || ! uri)
  -        return NULL;
  -
  -    for (i = 0 ; i < ci->size ; i++) {
  -        if (! strcmp(ci->uris[i], uri))
  -            return ci->uris[i];
  -    }
  -
  -    return NULL;
  -}
  -
  -void context_dump_uris(jk_context_t *c, char *cbase, FILE * f)
  -{
  -    jk_context_item_t * ci;
  -    int                 i;
  -
  -    ci = context_find_base(c, cbase);
  -
  -    if (! ci)
  -        return;
  -
  -    for (i = 0; i < ci->size; i++)
  -        fprintf(f, "/%s/%s\n", ci->cbase, ci->uris[i]);
  -
  -    fflush(f); 
  -}
  -
  -
  -/*
  - * Add a new context item to context
  - */
  -
  -jk_context_item_t * context_add_base(jk_context_t *c, char *cbase)
  -{
  -    jk_context_item_t *  ci;
  -
  -    if (! c || !cbase)
  -        return NULL;
  -
  -    /* Check if the context base was not allready created */
  -    ci = context_find_base(c, cbase);
  -
  -    if (ci)
  -        return ci;
  -
  -    if (context_realloc(c) != JK_TRUE)
  -        return NULL;
  -
  -    ci = (jk_context_item_t *)c->p.alloc(&c->p, sizeof(jk_context_item_t));
  -
  -    if (! ci)
  -        return NULL;
   
  -    c->contexts[c->size] = ci;
  -    c->size++;
  -    ci->cbase       = c->p.pstrdup(&c->p, cbase);
  -    ci->status      = 0;
  -    ci->size        = 0;
  -    ci->capacity    = 0;
  -    ci->uris        = NULL;
   
  -    return ci;
  -}
  -
  -/*
  - * Add a new URI to a context item
  - */
  -
  -int context_add_uri(jk_context_t *c, char *cbase, char * uri)
  -{
  -    jk_context_item_t *  ci;
  -
  -    if (! uri)
  -        return JK_FALSE;
  -
  -    /* Get/Create the context base */
  -    ci = context_add_base(c, cbase);
  -        
  -    if (! ci)
  -        return JK_FALSE;
   
  -    if (context_item_find_uri(ci, uri) != NULL)
  -        return JK_TRUE;
  -
  -    if (context_item_realloc(c, ci) == JK_FALSE)
  -        return JK_FALSE;
   
  -    ci->uris[ci->size] = c->p.pstrdup(&c->p, uri);
   
  -    if (ci->uris[ci->size] == NULL)
  -        return JK_FALSE;
  -
  -    ci->size++;
  -    return JK_TRUE;
  -}
   
  
  
  

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

Reply via email to