You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by co...@apache.org on 2002/05/16 22:56:08 UTC

cvs commit: jakarta-tomcat-connectors/jk/native2/server/apache13 jk_service_apache13.c mod_jk2.c

costin      02/05/16 13:56:08

  Modified:    jk/native2/server/apache13 jk_service_apache13.c mod_jk2.c
  Log:
  Filter debugging, fix head, add support for the shm.
  
  It should work now reasonably well.
  
  Revision  Changes    Path
  1.5       +75 -76    jakarta-tomcat-connectors/jk/native2/server/apache13/jk_service_apache13.c
  
  Index: jk_service_apache13.c
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/server/apache13/jk_service_apache13.c,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- jk_service_apache13.c	25 Apr 2002 19:25:10 -0000	1.4
  +++ jk_service_apache13.c	16 May 2002 20:56:08 -0000	1.5
  @@ -105,33 +105,36 @@
       headers=s->headers_out;
       numheaders = headers->size(env, headers);
       /* XXX As soon as we switch to jk_map_apache13, this will not be needed ! */
  -    env->l->jkLog(env, env->l, JK_LOG_INFO, 
  -                  "service.head() %d %d\n", s->status,
  -                  numheaders);
  +    if( s->uriEnv->mbean->debug > 0 ) 
  +        env->l->jkLog(env, env->l, JK_LOG_INFO, 
  +                      "service.head() %d %d\n", s->status,
  +                      numheaders);
       
       for(h = 0 ; h < numheaders; h++) {
           char *name=headers->nameAt( env, headers, h );
           char *val=headers->valueAt( env, headers, h );
   
  -        env->l->jkLog(env, env->l, JK_LOG_INFO, 
  -                      "service.head() %s: %s %d %d\n", name, val, h, headers->size( env, headers ));
  +        if( s->uriEnv->mbean->debug > 0 ) 
  +            env->l->jkLog(env, env->l, JK_LOG_INFO, 
  +                          "service.head() %s: %s %d %d\n",
  +                          name, val, h, headers->size( env, headers ));
   
           /* the cmp can also be avoided in we do this earlier and use
              the header id */
  -        if(!strcasecmp(name, "Content-type")) {
  +        if( strcasecmp(name, "Content-type") == 0 ) {
               /* XXX should be done in handler ! */
               char *tmp = ap_pstrdup(r->pool, val);
               ap_content_type_tolower(tmp); 
               r->content_type = tmp;
               ap_table_set(r->headers_out, name, val);
  -        } else if(!strcasecmp(name, "Location")) {
  +        } else if(strcasecmp(name, "Location") == 0 ) {
               /* XXX setn */
               ap_table_set(r->headers_out, name, val);
  -        } else if(!strcasecmp(name, "Content-Length")) {
  +        } else if(strcasecmp(name, "Content-Length") == 0) {
               ap_table_set(r->headers_out, name, val );
  -        } else if(!strcasecmp(name, "Transfer-Encoding")) {
  +        } else if(strcasecmp(name, "Transfer-Encoding") == 0 ) {
               ap_table_set(r->headers_out,name, val);
  -        } else if(!strcasecmp(name, "Last-Modified")) {
  +        } else if(strcasecmp(name, "Last-Modified") == 0 ) {
               /*
                * If the script gave us a Last-Modified header, we can't just
                * pass it on blindly because of restrictions on future values.
  @@ -140,13 +143,12 @@
               ap_set_last_modified(r);
               ap_table_set(r->headers_out, name, val);
           } else {                
  -            /* ap_table_add(r->headers_out, name, val); */
  -               ap_table_set(r->headers_out, name, val);
  +            ap_table_add(r->headers_out, name, val);
  +            /* ap_table_set(r->headers_out, name, val); */
           }
       }
   
  -    /* this NOP function was removed in apache 2.0 alpha14 */
  -    /* ap_send_http_header(r); */
  +    ap_send_http_header(r);
       s->response_started = JK_TRUE;
       
       return JK_OK;
  @@ -165,25 +167,26 @@
                                                 void *b, unsigned len,
                                                 unsigned *actually_read)
   {
  -    if(s && s->ws_private && b && actually_read) {
  -        if(!s->read_body_started) {
  -           if(ap_should_client_block(s->ws_private)) {
  -                s->read_body_started = JK_TRUE;
  -            }
  -        }
  +    long rv;
   
  -        if(s->read_body_started) {
  -            long rv;
  -            if ((rv = ap_get_client_block(s->ws_private, b, len)) < 0) {
  -                *actually_read = 0;
  -            } else {
  -                *actually_read = (unsigned) rv;
  -            }
  -            return JK_OK;
  +    if(s==NULL  || s->ws_private==NULL  || b==NULL || actually_read==NULL ) {
  +        return JK_ERR;
  +    }
  +
  +    if(!s->read_body_started) {
  +        if(ap_should_client_block(s->ws_private)) {
  +            s->read_body_started = JK_TRUE;
           }
       }
  -    return JK_ERR;
  -}
  +    rv = ap_get_client_block(s->ws_private, b, len);
  +    
  +    if( rv < 0) {
  +        *actually_read = 0;
  +    } else {
  +        *actually_read = (unsigned) rv;
  +    }
  +    return JK_OK;
  +} 
   
   /*
    * Write a chunk of response data back to the browser.  If the headers
  @@ -196,67 +199,61 @@
    * the jk_ws_service class.  Think of the *s param as a "this" or "self"
    * pointer.
    */
  +
   /* Works with 4096, fails with 8192 */
   #ifndef CHUNK_SIZE
   #define CHUNK_SIZE 4096
   #endif
   
   static int JK_METHOD jk2_service_apache13_write(jk_env_t *env, jk_ws_service_t *s,
  -                                               const void *b, int len)
  +                                                const void *b, int len)
   {
  -    if(s && s->ws_private && b) {
  -        if(len) {
  -            /* BUFF *bf = p->r->connection->client; */
  -            /* size_t w = (size_t)l; */
  -            size_t r = 0;
  -            long ll=len;
  -            char *bb=(char *)b;
  -            request_rec *rr=s->ws_private;
  +    int rc;
  +    
  +    if(s==NULL || s->ws_private == NULL || b==NULL )
  +        return JK_ERR;
  +    
  +    {
  +        /* BUFF *bf = p->r->connection->client; */
  +        /* size_t w = (size_t)l; */
  +        size_t rd = 0;
  +        long ll=len;
  +        char *bb=(char *)b;
  +        request_rec *rr=s->ws_private;
               
  -            if(!s->response_started) {
  +        if(!s->response_started) {
  +            if( s->uriEnv->mbean->debug > 0 ) 
                   env->l->jkLog(env, env->l, JK_LOG_INFO, 
                                 "service.write() default head\n");
  -                if(!s->head(env, s)) {
  -                    return JK_ERR;
  -                }
  -                {
  -                    array_header *t = ap_table_elts(rr->headers_out);
  -                    if(t && t->nelts) {
  -                        int i;
  -                        
  -                        table_entry *elts = (table_entry *)t->elts;
  -                        
  -                        for(i = 0 ; i < t->nelts ; i++) {
  -                            env->l->jkLog(env, env->l, JK_LOG_INFO, "OutHeaders %s: %s\n",
  -                                          elts[i].key, elts[i].val);
  -                        }
  -                    }
  -                }
  +
  +            rc=s->head(env, s);
  +            if( rc != JK_OK ) {
  +                return rc;
               }
  -            
  -            /* Debug - try to get around rwrite */
  -            while( ll > 0 ) {
  -                unsigned long toSend=(ll>CHUNK_SIZE) ? CHUNK_SIZE : ll;
  -                r = ap_rwrite((const char *)bb, toSend, s->ws_private );
  +        }
  +        
  +        /* Debug - try to get around rwrite */
  +        while( ll > 0 ) {
  +            unsigned long toSend=(ll>CHUNK_SIZE) ? CHUNK_SIZE : ll;
  +            rd = ap_rwrite((const char *)bb, toSend, s->ws_private );
  +            if( s->uriEnv->mbean->debug > 0 ) 
                   env->l->jkLog(env, env->l, JK_LOG_INFO, 
  -                              "service.write()  %ld (%ld) out of %ld \n",toSend, r, ll );
  -                ll-=CHUNK_SIZE;
  -                bb+=CHUNK_SIZE;
  -                
  -                if(toSend != r) { 
  -                    return JK_ERR; 
  -                } 
  +                              "service.write()  %ld (%ld) out of %ld \n",toSend, rd, ll );
  +            ll-=CHUNK_SIZE;
  +            bb+=CHUNK_SIZE;
  +            
  +            if(toSend != rd) { 
  +                return JK_ERR; 
  +            } 
                   
  -            }
  -
  -            /*
  -             * To allow server push. After writing full buffers
  -             */
  -            ap_bflush(s->ws_private);
           }
  -        return JK_OK;
  +
  +        /*
  +         * To allow server push. After writing full buffers
  +         */
  +        ap_bflush(s->ws_private);
       }
  -    return JK_ERR;
  +    return JK_OK;
   }
   
   /* ========================================================================= */
  @@ -298,6 +295,8 @@
       s->response_started = JK_FALSE;
       s->read_body_started = JK_FALSE;
       s->workerEnv=workerEnv;
  +
  +    workerEnv->childId = r->connection->child_num;
   
       s->jvm_route        = NULL;    /* Used for sticky session routing */
   
  
  
  
  1.13      +13 -11    jakarta-tomcat-connectors/jk/native2/server/apache13/mod_jk2.c
  
  Index: mod_jk2.c
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/server/apache13/mod_jk2.c,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- mod_jk2.c	3 May 2002 18:44:03 -0000	1.12
  +++ mod_jk2.c	16 May 2002 20:56:08 -0000	1.13
  @@ -59,7 +59,7 @@
    * Description: Apache 1.3 plugin for Jakarta/Tomcat                         *
    * Author:      Gal Shachor <sh...@il.ibm.com>                           *
    *                 Henri Gomez <hg...@slib.fr>                               *
  - * Version:     $Revision: 1.12 $                                           *
  + * Version:     $Revision: 1.13 $                                           *
    ***************************************************************************/
   
   /*
  @@ -122,7 +122,7 @@
       jk_env_t *env=workerEnv->globalEnv;
       int rc;
       
  -    rc=workerEnv->config->setPropertyString( env, workerEnv->config, name, value );
  +    rc=workerEnv->config->setPropertyString( env, workerEnv->config, (char *)name, value );
       if( rc!=JK_OK ) {
           fprintf( stderr, "mod_jk2: Unrecognized option %s %s\n", name, value);
       }
  @@ -136,10 +136,9 @@
   static int jk2_create_workerEnv(ap_pool *p, const server_rec *s)
   {
       jk_env_t *env;
  -    jk_logger_t *l;
       jk_pool_t *globalPool;
       jk_bean_t *jkb;
  -    
  +
       /** First create a pool. We use the default ( jk ) pool impl,
        *  other choices are apr or native.
        */
  @@ -162,7 +161,7 @@
           fprintf(stderr, "Error creating logger ");
           return JK_ERR;
       }
  -    env->l=l;
  +    env->l=jkb->object;
       env->alias( env, "logger.file:", "logger");
       
       /* Create the workerEnv
  @@ -175,7 +174,7 @@
       workerEnv= jkb->object;
       env->alias( env, "workerEnv:", "workerEnv");
   
  -    if( workerEnv==NULL || l== NULL  ) {
  +    if( workerEnv==NULL || env->l == NULL  ) {
           fprintf( stderr, "Error initializing jk, NULL objects \n");
           return JK_ERR;
       }
  @@ -255,7 +254,7 @@
   /** Standard apache callback, initialize jk. This is called after all
       the settings took place.
    */
  -static void jk2_init(server_rec *s, ap_pool *pconf)
  +static int jk2_init(server_rec *s, ap_pool *pconf)
   {
       jk_uriEnv_t *serverEnv=(jk_uriEnv_t *)
           ap_get_module_config(s->module_config, &jk2_module);
  @@ -277,6 +276,8 @@
           env->l->jkLog(env, env->l, JK_LOG_INFO,
                         "mod_jk.post_config() init worker env\n");
   
  +        workerEnv->parentInit(env, workerEnv );
  +
           workerEnv->init(env, workerEnv );
           
           workerEnv->server_name   = (char *)ap_get_server_version();
  @@ -362,19 +363,20 @@
           rPool= worker->rPoolCache->get( env, worker->rPoolCache );
   
           if( rPool == NULL ) {
  -            rPool=worker->pool->create( env, worker->pool, HUGE_POOL_SIZE );
  +            rPool=worker->mbean->pool->create( env, worker->mbean->pool, HUGE_POOL_SIZE );
               env->l->jkLog(env, env->l, JK_LOG_INFO,
                             "mod_jk.handler(): new rpool\n");
           }
   
           jk2_service_apache13_init(env, s);
           s->pool = rPool;
  -        s->uriEnv = uriEnv;
  -        s->is_recoverable_error = JK_FALSE;
           s->init( env, s, worker, r );
           
  +        s->is_recoverable_error = JK_FALSE;
  +        s->uriEnv = uriEnv;
  +
           env->l->jkLog(env, env->l, JK_LOG_INFO, 
  -                      "modjk.handler() Calling %s\n", worker->mbean->name); 
  +                      "modjk.handler() Calling %s %p\n", worker->mbean->name, uriEnv); 
   
           rc = worker->service(env, worker, s);
           
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>