costin      02/01/25 23:11:00

  Modified:    jk/native2/common jk_workerEnv.c
  Log:
  Add the dispatch, init the rPool.
  
  Revision  Changes    Path
  1.14      +67 -32    jakarta-tomcat-connectors/jk/native2/common/jk_workerEnv.c
  
  Index: jk_workerEnv.c
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_workerEnv.c,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- jk_workerEnv.c    12 Jan 2002 05:15:35 -0000      1.13
  +++ jk_workerEnv.c    26 Jan 2002 07:11:00 -0000      1.14
  @@ -59,12 +59,13 @@
    * Description: Workers controller                                         *
    * Author:      Gal Shachor <[EMAIL PROTECTED]>                           *
    * Author:      Henri Gomez <[EMAIL PROTECTED]>                               *
  - * Version:     $Revision: 1.13 $                                           *
  + * Version:     $Revision: 1.14 $                                           *
    ***************************************************************************/
   
   #include "jk_workerEnv.h" 
   #include "jk_env.h"
   #include "jk_worker.h"
  +#include "jk_channel.h"
   
   #define DEFAULT_WORKER              ("ajp13")
   
  @@ -243,7 +244,8 @@
               env->l->jkLog(env, env->l, JK_LOG_DEBUG,
                             "destroy worker %s\n",
                             _this->worker_map->nameAt(env, _this->worker_map, i));
  -            w->destroy(env,w);
  +            if( w->destroy !=NULL ) 
  +                w->destroy(env,w);
           }
       }
       env->l->jkLog(env, env->l, JK_LOG_DEBUG,
  @@ -359,7 +361,40 @@
       }
   }
   
  +static int jk_workerEnv_dispatch(jk_env_t *env, jk_workerEnv_t *_this,
  +                                 jk_endpoint_t *e, jk_ws_service_t *r )
  +{
  +    int code;
  +    jk_handler_t *handler;
  +    int rc;
  +    jk_handler_t **handlerTable=e->worker->workerEnv->handlerTable;
  +    int maxHandler=e->worker->workerEnv->lastMessageId;
  +    
  +    rc=-1;
  +    handler=NULL;
  +        
  +    code = (int)e->reply->getByte(env, e->reply);
  +    if( code < maxHandler ) {
  +        handler=handlerTable[ code ];
  +    }
  +    
  +    if( handler==NULL ) {
  +        env->l->jkLog(env, env->l, JK_LOG_ERROR,
  +                      "ajp14.dispath() Invalid code: %d\n", code);
  +        e->reply->dump(env, e->reply, "Message: ");
  +        return JK_FALSE;
  +    }
  +        
  +    env->l->jkLog(env, env->l, JK_LOG_INFO,
  +                  "ajp14.dispath() Calling %d %s\n", handler->messageId,
  +                  handler->name);
  +    
  +    /* Call the message handler */
  +    rc=handler->callback( env, e->reply, r, e );
  +    return rc;
  +}
   
  +/* XXX This should go to channel ( or a base class for socket channels ) */
   /*
    * Process incoming messages.
    *
  @@ -393,7 +428,8 @@
                           "ajp14.processCallbacks() Waiting reply\n");
           e->reply->reset(env, e->reply);
           
  -        rc= e->reply->receive( env, e->reply, e );
  +        rc= e->worker->channel->recv( env, e->worker->channel,  e,
  +                                         e->reply);
           if( rc!=JK_TRUE ) {
               env->l->jkLog(env, env->l, JK_LOG_ERROR,
                             "ajp14.service() Error reading reply\n");
  @@ -402,26 +438,9 @@
           }
   
           /* e->reply->dump(env, e->reply, "Received ");  */
  -        
  -        code = (int)e->reply->getByte(env, e->reply);
  -        if( code < maxHandler ) {
  -            handler=handlerTable[ code ];
  -        }
   
  -        if( handler==NULL ) {
  -            env->l->jkLog(env, env->l, JK_LOG_ERROR,
  -                          "ajp14.processCallback() Invalid code: %d\n", code);
  -            e->reply->dump(env, e->reply, "Message: ");
  -            return JK_FALSE;
  -        }
  -        
  -        env->l->jkLog(env, env->l, JK_LOG_INFO,
  -                      "ajp14.dispath() Calling %d %s\n", handler->messageId,
  -                      handler->name);
  -        
  -        /* Call the message handler */
  -        rc=handler->callback( env, e->reply, r, e );
  -        
  +        rc=jk_workerEnv_dispatch( env, _this, e, r );
  +
           /* Process the status code returned by handler */
           switch( rc ) {
           case JK_HANDLER_LAST:
  @@ -441,7 +460,7 @@
                * data to file and replay for it
                */
               e->recoverable = JK_FALSE; 
  -            rc = e->post->send(env, e->post, e );
  +            rc = e->worker->channel->send(env, e->worker->channel, e, e->post );
               if (rc < 0) {
                   env->l->jkLog(env, env->l, JK_LOG_ERROR,
                         "ajp14.processCallbacks() error sending response data\n");
  @@ -472,7 +491,13 @@
       return JK_FALSE;
   }
   
  -
  +static jk_worker_t *jk_workerEnv_releasePool(jk_env_t *env,
  +                                             jk_workerEnv_t *_this,
  +                                             const char *name, 
  +                                             jk_map_t *init_data)
  +{
  +    
  +}
   
   
   static jk_worker_t *jk_workerEnv_createWorker(jk_env_t *env,
  @@ -480,7 +505,7 @@
                                                 const char *name, 
                                                 jk_map_t *init_data)
   {
  -    int err;
  +    int err=JK_TRUE;
       char *type;
       jk_env_objectFactory_t fac;
       jk_worker_t *w = NULL;
  @@ -517,21 +542,29 @@
       w->name=(char *)name;
       w->pool=workerPool;
       w->workerEnv=_this;
  -    
  -    err=w->validate(env, w, init_data, _this);
  +
  +    w->rPoolCache= jk_objCache_create( env, workerPool  );
  +    err=w->rPoolCache->init( env, w->rPoolCache,
  +                                    1024 ); /* XXX make it unbound */
  +
  +    if( w->validate!=NULL ) 
  +        err=w->validate(env, w, init_data, _this);
       
       if( err!=JK_TRUE ) {
           env->l->jkLog(env, env->l, JK_LOG_ERROR,
                         "workerEnv.createWorker(): validate failed for %s:%s\n", 
                         type, name); 
  -        w->destroy(env, w);
  +        if( w->destroy != NULL ) 
  +            w->destroy(env, w);
           return NULL;
       }
  -    
  -    err=w->init(env, w, init_data, _this);
  +
  +    if( w->init != NULL )
  +        err=w->init(env, w, init_data, _this);
       
       if(err!=JK_TRUE) {
  -        w->destroy(env, w);
  +        if( w->destroy != NULL ) 
  +            w->destroy(env, w);
           env->l->jkLog(env, env->l, JK_LOG_ERROR,
                         "workerEnv.createWorker() init failed for %s\n", 
                         name); 
  @@ -548,7 +581,8 @@
           env->l->jkLog(env, env->l, JK_LOG_ERROR,
                         "workerEnv.createWorker() duplicated %s worker \n",
                         name);
  -        oldW->destroy(env, oldW);
  +        if( w->destroy != NULL )
  +            oldW->destroy(env, oldW);
       }
       
       return w;
  @@ -652,6 +686,7 @@
       _this->createWorker=&jk_workerEnv_createWorker;
       _this->createWebapp=&jk_workerEnv_createWebapp;
       _this->processCallbacks=&jk_workerEnv_processCallbacks;
  +    _this->dispatch=&jk_workerEnv_dispatch;
   
       _this->rootWebapp=_this->createWebapp( env, _this, NULL, "/", NULL );
   
  
  
  

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

Reply via email to