mturk 2004/03/21 01:43:51 Modified: jk/native2/server/apache13 mod_jk2.c jk_service_apache13.c Log: Apply the Apache-wide conding style. See http://www.apache.org/dev/styleguide.html for details. Revision Changes Path 1.33 +261 -246 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.32 retrieving revision 1.33 diff -u -r1.32 -r1.33 --- mod_jk2.c 12 Mar 2004 13:47:20 -0000 1.32 +++ mod_jk2.c 21 Mar 2004 09:43:51 -0000 1.33 @@ -48,7 +48,7 @@ #include "jk_requtil.h" #ifdef WIN32 -static char file_name[_MAX_PATH]; +static char file_name[_MAX_PATH]; #endif @@ -68,7 +68,7 @@ * dir mappings. This prevents vhost configs as configured through * httpd.conf from getting crossed. */ -static int dirCounter=0; +static int dirCounter = 0; /* ==================== Options setters ==================== */ @@ -83,18 +83,19 @@ * XXX Shouldn't abuse it, there is no way to write back * the properties. */ -static const char *jk2_set2(cmd_parms *cmd, void *per_dir, - const char *name, char *value) +static const char *jk2_set2(cmd_parms * cmd, void *per_dir, + const char *name, char *value) { server_rec *s = cmd->server; - jk_uriEnv_t *serverEnv=(jk_uriEnv_t *) + jk_uriEnv_t *serverEnv = (jk_uriEnv_t *) ap_get_module_config(s->module_config, &jk2_module); - jk_env_t *env=workerEnv->globalEnv; + jk_env_t *env = workerEnv->globalEnv; int rc; - - 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); + + 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); } return NULL; @@ -125,16 +126,17 @@ * XXX This is a special configuration, for most users just use * the properties files. */ -static const char *jk2_uriSet(cmd_parms *cmd, void *per_dir, +static const char *jk2_uriSet(cmd_parms * cmd, void *per_dir, const char *name, const char *val) { - jk_uriEnv_t *uriEnv=(jk_uriEnv_t *)per_dir; + jk_uriEnv_t *uriEnv = (jk_uriEnv_t *)per_dir; - char *tmp_virtual=NULL; - char *tmp_full_url=NULL; + char *tmp_virtual = NULL; + char *tmp_full_url = NULL; server_rec *s = cmd->server; - uriEnv->mbean->setAttribute( workerEnv->globalEnv, uriEnv->mbean, (char *)name, (void *)val ); + uriEnv->mbean->setAttribute(workerEnv->globalEnv, uriEnv->mbean, + (char *)name, (void *)val); /* * all of the objects that get passed in now are unique. create_dir adds a incrementing counter to the @@ -147,43 +149,49 @@ /* if applicable we will set the hostname etc variables. */ if (s->is_virtual && s->server_hostname != NULL && - (uriEnv->virtual==NULL || !strchr(uriEnv->virtual, ':') || - uriEnv->port != s->port)) { - tmp_virtual = (char *) ap_pcalloc(cmd->pool, - sizeof(char *) * (strlen(s->server_hostname) + 8 )) ; - tmp_full_url = (char *) ap_pcalloc(cmd->pool, - sizeof(char *) * (strlen(s->server_hostname) + - strlen(uriEnv->uri)+8 )) ; + (uriEnv->virtual == NULL || !strchr(uriEnv->virtual, ':') || + uriEnv->port != s->port)) { + tmp_virtual = (char *)ap_pcalloc(cmd->pool, + sizeof(char *) * + (strlen(s->server_hostname) + 8)); + tmp_full_url = + (char *)ap_pcalloc(cmd->pool, + sizeof(char *) * (strlen(s->server_hostname) + + strlen(uriEnv->uri) + 8)); /* do not pass the hostname:0/ scheme */ if (s->port) { - sprintf(tmp_virtual, "%s:%d", s->server_hostname, s->port); - sprintf(tmp_full_url, "%s:%d%s", s->server_hostname, s->port, uriEnv->uri ); + sprintf(tmp_virtual, "%s:%d", s->server_hostname, s->port); + sprintf(tmp_full_url, "%s:%d%s", s->server_hostname, s->port, + uriEnv->uri); } else { strcpy(tmp_virtual, s->server_hostname); strcpy(tmp_full_url, s->server_hostname); strcat(tmp_full_url, uriEnv->uri); } - uriEnv->mbean->setAttribute( workerEnv->globalEnv, uriEnv->mbean, "uri", tmp_full_url); - uriEnv->mbean->setAttribute( workerEnv->globalEnv, uriEnv->mbean, "path", cmd->path); - uriEnv->name=tmp_virtual; - uriEnv->virtual=tmp_virtual; + uriEnv->mbean->setAttribute(workerEnv->globalEnv, uriEnv->mbean, + "uri", tmp_full_url); + uriEnv->mbean->setAttribute(workerEnv->globalEnv, uriEnv->mbean, + "path", cmd->path); + uriEnv->name = tmp_virtual; + uriEnv->virtual = tmp_virtual; } /* now lets actually add the parameter set in the <Location> block */ - uriEnv->mbean->setAttribute( workerEnv->globalEnv, uriEnv->mbean, (char *)name, (void *)val ); + uriEnv->mbean->setAttribute(workerEnv->globalEnv, uriEnv->mbean, + (char *)name, (void *)val); return NULL; } -static void *jk2_create_dir_config(pool *p, char *path) +static void *jk2_create_dir_config(pool * p, char *path) { /* We don't know the vhost yet - so path is not * unique. We'll have to generate a unique name */ - char *tmp=NULL; - int a=0; + char *tmp = NULL; + int a = 0; jk_uriEnv_t *newUri; jk_bean_t *jkb; @@ -191,23 +199,24 @@ return NULL; a = strlen(path) + 10; - tmp = (char *) ap_pcalloc(p, sizeof(char *) * (a ) ) ; - sprintf(tmp, "%s-%d", path==NULL?"":path, dirCounter++); + tmp = (char *)ap_pcalloc(p, sizeof(char *) * (a)); + sprintf(tmp, "%s-%d", path == NULL ? "" : path, dirCounter++); /* the greatest annoyance here is that we can't create the uri correctly with the hostname as well. as apache doesn't give us the hostname . we'll fix this in JkUriSet - */ + */ - jkb=workerEnv->globalEnv->createBean2(workerEnv->globalEnv, - workerEnv->pool, "uri", tmp); + jkb = workerEnv->globalEnv->createBean2(workerEnv->globalEnv, + workerEnv->pool, "uri", tmp); newUri = jkb->object; - newUri->workerEnv=workerEnv; - newUri->mbean->setAttribute( workerEnv->globalEnv, newUri->mbean, "path", tmp ); + newUri->workerEnv = workerEnv; + newUri->mbean->setAttribute(workerEnv->globalEnv, newUri->mbean, "path", + tmp); /* I'm hoping that setting the id won't break anything. I havn't noticed it breaking anything. */ - newUri->mbean->id=(dirCounter -1); + newUri->mbean->id = (dirCounter - 1); /* this makes the display in the status display make more sense */ - newUri->mbean->localName=path; + newUri->mbean->localName = path; return newUri; } @@ -216,11 +225,11 @@ * Need to re-do this to make more sense - like properly creating a new config and returning the merged config... * Looks like parent needs to be dominant. */ -static void *jk2_merge_dir_config(pool *p, void *childv, void *parentv) +static void *jk2_merge_dir_config(pool * p, void *childv, void *parentv) { - jk_uriEnv_t *child =(jk_uriEnv_t *)childv; - jk_uriEnv_t *parent = (jk_uriEnv_t *)parentv; - jk_uriEnv_t *winner=NULL; + jk_uriEnv_t *child = (jk_uriEnv_t *)childv; + jk_uriEnv_t *parent = (jk_uriEnv_t *)parentv; + jk_uriEnv_t *winner = NULL; /* fprintf(stderr,"Merging child & parent. (dir)\n"); @@ -234,15 +243,16 @@ ); */ - if ( child == NULL || child->uri==NULL || child->workerName==NULL ) - winner=parent; - else if ( parent == NULL || parent->uri ==NULL || parent->workerName==NULL ) - winner=child; - /* interresting bit... so far they are equal ... */ - else if ( strlen(parent->uri) > strlen(child->uri) ) - winner=parent; - else - winner=child; + if (child == NULL || child->uri == NULL || child->workerName == NULL) + winner = parent; + else if (parent == NULL || parent->uri == NULL + || parent->workerName == NULL) + winner = child; + /* interresting bit... so far they are equal ... */ + else if (strlen(parent->uri) > strlen(child->uri)) + winner = parent; + else + winner = child; /* if ( winner == child ) fprintf(stderr, "Going with the child\n"); @@ -251,8 +261,8 @@ else fprintf(stderr, "Going with NULL\n"); */ - - return (void *) winner; + + return (void *)winner; } @@ -263,62 +273,64 @@ /* Create the initial set of objects. You need to cut&paste this and adapt to your server. */ -static int jk2_create_workerEnv(ap_pool *p, const server_rec *s) +static int jk2_create_workerEnv(ap_pool * p, const server_rec * s) { jk_env_t *env; jk_pool_t *globalPool; jk_bean_t *jkb; apr_initialize(); - apr_pool_create( &jk_globalPool, NULL ); + apr_pool_create(&jk_globalPool, NULL); + + jk2_pool_apr_create(NULL, &globalPool, NULL, jk_globalPool); - jk2_pool_apr_create( NULL, &globalPool, NULL, jk_globalPool ); - /** Create the global environment. This will register the default factories, to be overriten later. */ - env=jk2_env_getEnv( NULL, globalPool ); + env = jk2_env_getEnv(NULL, globalPool); /* Optional. Register more factories ( or replace existing ones ) Insert your server-specific objects here. - */ + */ /* Create the logger . We use the default jk logger, will output to a file. Check the logger for default settings. - */ - jkb=env->createBean2( env, env->globalPool, "logger.file", ""); - env->alias( env, "logger.file:", "logger"); - env->alias( env, "logger.file:", "logger:"); - if( jkb==NULL ) { + */ + jkb = env->createBean2(env, env->globalPool, "logger.file", ""); + env->alias(env, "logger.file:", "logger"); + env->alias(env, "logger.file:", "logger:"); + if (jkb == NULL) { fprintf(stderr, "Error creating logger "); return JK_ERR; } - env->l=jkb->object; - env->alias( env, "logger.file:", "logger"); - + env->l = jkb->object; + env->alias(env, "logger.file:", "logger"); + /* Create the workerEnv */ - jkb=env->createBean2( env, env->globalPool,"workerEnv", ""); - if( jkb==NULL ) { + jkb = env->createBean2(env, env->globalPool, "workerEnv", ""); + if (jkb == NULL) { fprintf(stderr, "Error creating workerEnv "); return JK_ERR; } - workerEnv= jkb->object; - env->alias( env, "workerEnv:", "workerEnv"); + workerEnv = jkb->object; + env->alias(env, "workerEnv:", "workerEnv"); - if( workerEnv==NULL || env->l == NULL ) { - fprintf( stderr, "Error initializing jk, NULL objects \n"); + if (workerEnv == NULL || env->l == NULL) { + fprintf(stderr, "Error initializing jk, NULL objects \n"); return JK_ERR; } /* serverRoot via ap_server_root */ - workerEnv->initData->add( env, workerEnv->initData, "serverRoot", - workerEnv->pool->pstrdup( env, workerEnv->pool, ap_server_root)); + workerEnv->initData->add(env, workerEnv->initData, "serverRoot", + workerEnv->pool->pstrdup(env, workerEnv->pool, + ap_server_root)); - /* Local initialization. + /* Local initialization. */ - env->l->jkLog(env, env->l, JK_LOG_INFO, "Set serverRoot %s\n", ap_server_root); + env->l->jkLog(env, env->l, JK_LOG_INFO, "Set serverRoot %s\n", + ap_server_root); workerEnv->_private = (void *)s; @@ -330,53 +342,54 @@ /* Command table. */ -static const command_rec jk2_cmds[] = - { - /* This is the 'main' directive for tunning jk2. It takes 2 parameters, - and it behaves _identically_ as a setting in workers.properties. - */ - { "JkSet", jk2_set2, NULL, RSRC_CONF, TAKE2, - "Set a jk property, same syntax and rules as in JkWorkersFile" }, - { "JkUriSet", jk2_uriSet, NULL, ACCESS_CONF, TAKE2, - "Defines a jk property associated with a Location"}, - NULL - }; +static const command_rec jk2_cmds[] = { + /* This is the 'main' directive for tunning jk2. It takes 2 parameters, + and it behaves _identically_ as a setting in workers.properties. + */ + {"JkSet", jk2_set2, NULL, RSRC_CONF, TAKE2, + "Set a jk property, same syntax and rules as in JkWorkersFile"}, + {"JkUriSet", jk2_uriSet, NULL, ACCESS_CONF, TAKE2, + "Defines a jk property associated with a Location"}, + NULL +}; /** This makes the config for the specified server_rec s This will include vhost info. */ -static void *jk2_create_config(ap_pool *p, server_rec *s) +static void *jk2_create_config(ap_pool * p, server_rec * s) { jk_uriEnv_t *newUri; jk_bean_t *jkb; char *tmp; - if( workerEnv==NULL ) { - jk2_create_workerEnv(p, s ); + if (workerEnv == NULL) { + jk2_create_workerEnv(p, s); } - if( s->is_virtual == 1 ) { + if (s->is_virtual == 1) { /* Virtual host */ - tmp = (char *) ap_pcalloc(p, sizeof(char *) * (strlen(s->server_hostname) + 8 )) ; - sprintf(tmp, "%s:%d/", s->server_hostname, s->port ); - - /* for the sake of consistency we must have the port in the uri. - Really it isn't necessary to have one - but I would like in the future for - the server config to hold the workers for that server... */ - jkb=workerEnv->globalEnv->createBean2( workerEnv->globalEnv, - workerEnv->pool, - "uri", tmp ); - } else { + tmp = + (char *)ap_pcalloc(p, + sizeof(char *) * (strlen(s->server_hostname) + + 8)); + sprintf(tmp, "%s:%d/", s->server_hostname, s->port); + + /* for the sake of consistency we must have the port in the uri. + Really it isn't necessary to have one - but I would like in the future for + the server config to hold the workers for that server... */ + jkb = workerEnv->globalEnv->createBean2(workerEnv->globalEnv, + workerEnv->pool, "uri", tmp); + } + else { /* Default host */ - jkb=workerEnv->globalEnv->createBean2( workerEnv->globalEnv, - workerEnv->pool, - "uri", "" ); + jkb = workerEnv->globalEnv->createBean2(workerEnv->globalEnv, + workerEnv->pool, "uri", ""); } newUri = jkb->object; - newUri->workerEnv=workerEnv; + newUri->workerEnv = workerEnv; - return (void *) newUri; + return (void *)newUri; } @@ -384,13 +397,11 @@ /** Standard apache callback, merge jk options specified in <Host> context. Used to set per virtual host configs */ -static void *jk2_merge_config(ap_pool *p, - void *basev, - void *overridesv) +static void *jk2_merge_config(ap_pool * p, void *basev, void *overridesv) { - jk_uriEnv_t *base = (jk_uriEnv_t *) basev; + jk_uriEnv_t *base = (jk_uriEnv_t *)basev; jk_uriEnv_t *overrides = (jk_uriEnv_t *)overridesv; - + /* The 'mountcopy' option should be implemented in common. */ return overrides; @@ -399,32 +410,33 @@ /** Standard apache callback, initialize jk. This is called after all the settings took place. */ -static int 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); - - jk_env_t *env=workerEnv->globalEnv; - - ap_pool *gPool=NULL; - void *data=NULL; - int rc=JK_OK; - - env->l->jkLog(env, env->l, JK_LOG_INFO, "mod_jk child init\n" ); - - if(s->is_virtual) + jk_uriEnv_t *serverEnv = + (jk_uriEnv_t *)ap_get_module_config(s->module_config, &jk2_module); + + jk_env_t *env = workerEnv->globalEnv; + + ap_pool *gPool = NULL; + void *data = NULL; + int rc = JK_OK; + + env->l->jkLog(env, env->l, JK_LOG_INFO, "mod_jk child init\n"); + + if (s->is_virtual) return OK; - - if(!workerEnv->was_initialized) { - workerEnv->was_initialized = JK_TRUE; + + if (!workerEnv->was_initialized) { + workerEnv->was_initialized = JK_TRUE; env->l->jkLog(env, env->l, JK_LOG_INFO, "mod_jk.post_config() init worker env\n"); - workerEnv->parentInit(env, workerEnv ); + workerEnv->parentInit(env, workerEnv); - workerEnv->init(env, workerEnv ); - - workerEnv->server_name = (char *)ap_get_server_version(); + workerEnv->init(env, workerEnv); + + workerEnv->server_name = (char *)ap_get_server_version(); #if MODULE_MAGIC_NUMBER >= 19980527 @@ -442,209 +454,213 @@ /** Main service method, called to forward a request to tomcat */ -static int jk2_handler(request_rec *r) -{ - jk_logger_t *l=NULL; - int rc; - jk_worker_t *worker=NULL; +static int jk2_handler(request_rec * r) +{ + jk_logger_t *l = NULL; + int rc; + jk_worker_t *worker = NULL; jk_endpoint_t *end = NULL; jk_uriEnv_t *uriEnv; jk_env_t *env; /* If this is a proxy request, we'll notify an error */ - if(r->proxyreq) { - return HTTP_INTERNAL_SERVER_ERROR; /* We don't proxy requests. */ + if (r->proxyreq) { + return HTTP_INTERNAL_SERVER_ERROR; /* We don't proxy requests. */ } /* changed from r->request_config to r->per_dir_config. This should give us the one that was set in either the translate phase (if it was a config added through workers.properties) or in the create_dir config. */ - uriEnv=ap_get_module_config( r->request_config, &jk2_module ); /* get one for the dir */ - if ( uriEnv == NULL ) { - uriEnv=ap_get_module_config( r->per_dir_config, &jk2_module ); /* get one specific to this request if there isn't a dir one. */ + uriEnv = ap_get_module_config(r->request_config, &jk2_module); /* get one for the dir */ + if (uriEnv == NULL) { + uriEnv = ap_get_module_config(r->per_dir_config, &jk2_module); /* get one specific to this request if there isn't a dir one. */ } - + /* not for me, try next handler */ - if(uriEnv==NULL || strcmp(r->handler,JK_HANDLER)!= 0 ) + if (uriEnv == NULL || strcmp(r->handler, JK_HANDLER) != 0) return DECLINED; - + /* Get an env instance */ - env = workerEnv->globalEnv->getEnv( workerEnv->globalEnv ); + env = workerEnv->globalEnv->getEnv(workerEnv->globalEnv); /* Set up r->read_chunked flags for chunked encoding, if present */ - if(rc = ap_setup_client_block(r, REQUEST_CHUNKED_DECHUNK)) { + if (rc = ap_setup_client_block(r, REQUEST_CHUNKED_DECHUNK)) { env->l->jkLog(env, env->l, JK_LOG_INFO, "mod_jk.handler() Can't setup client block %d\n", rc); - workerEnv->globalEnv->releaseEnv( workerEnv->globalEnv, env ); + workerEnv->globalEnv->releaseEnv(workerEnv->globalEnv, env); return rc; } - if( uriEnv == NULL ) { - /* SetHandler case - per_dir config should have the worker*/ - worker = workerEnv->defaultWorker; - env->l->jkLog(env, env->l, JK_LOG_INFO, + if (uriEnv == NULL) { + /* SetHandler case - per_dir config should have the worker */ + worker = workerEnv->defaultWorker; + env->l->jkLog(env, env->l, JK_LOG_INFO, "mod_jk.handler() Default worker for %s %s\n", - r->uri, worker->mbean->name); - } else { - worker=uriEnv->worker; - env->l->jkLog(env, env->l, JK_LOG_INFO, + r->uri, worker->mbean->name); + } + else { + worker = uriEnv->worker; + env->l->jkLog(env, env->l, JK_LOG_INFO, "mod_jk.handler() per dir worker for %#lx %#lx\n", - worker, uriEnv ); - - if( worker==NULL && uriEnv->workerName != NULL ) { - worker=env->getByName( env,uriEnv->workerName); - env->l->jkLog(env, env->l, JK_LOG_INFO, + worker, uriEnv); + + if (worker == NULL && uriEnv->workerName != NULL) { + worker = env->getByName(env, uriEnv->workerName); + env->l->jkLog(env, env->l, JK_LOG_INFO, "mod_jk.handler() finding worker for %s %#lx %#lx\n", - uriEnv->workerName, worker, uriEnv ); - uriEnv->worker=worker; + uriEnv->workerName, worker, uriEnv); + uriEnv->worker = worker; } } - if(worker==NULL ) { - env->l->jkLog(env, env->l, JK_LOG_ERROR, - "mod_jk.handle() No worker for %s\n", r->uri); - workerEnv->globalEnv->releaseEnv( workerEnv->globalEnv, env ); - return HTTP_INTERNAL_SERVER_ERROR; /* No worker defined for this uri */ + if (worker == NULL) { + env->l->jkLog(env, env->l, JK_LOG_ERROR, + "mod_jk.handle() No worker for %s\n", r->uri); + workerEnv->globalEnv->releaseEnv(workerEnv->globalEnv, env); + return HTTP_INTERNAL_SERVER_ERROR; /* No worker defined for this uri */ } { jk_ws_service_t sOnStack; - jk_ws_service_t *s=&sOnStack; - jk_pool_t *rPool=NULL; + jk_ws_service_t *s = &sOnStack; + jk_pool_t *rPool = NULL; int rc1; /* Get a pool for the request XXX move it in workerEnv to be shared with other server adapters */ - rPool= worker->rPoolCache->get( env, worker->rPoolCache ); + rPool = worker->rPoolCache->get(env, worker->rPoolCache); - if( rPool == NULL ) { - rPool=worker->mbean->pool->create( env, worker->mbean->pool, HUGE_POOL_SIZE ); + if (rPool == NULL) { + 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->init( env, s, worker, r ); - - /* reset the reco_status, will be set to INITED in LB mode */ - s->reco_status = RECO_NONE; - + s->init(env, s, worker, r); + + /* reset the reco_status, will be set to INITED in LB mode */ + s->reco_status = RECO_NONE; + s->is_recoverable_error = JK_FALSE; s->uriEnv = uriEnv; - env->l->jkLog(env, env->l, JK_LOG_INFO, - "modjk.handler() Calling %s %#lx\n", worker->mbean->name, uriEnv); + env->l->jkLog(env, env->l, JK_LOG_INFO, + "modjk.handler() Calling %s %#lx\n", + worker->mbean->name, uriEnv); rc = worker->service(env, worker, s); - + s->afterRequest(env, s); rPool->reset(env, rPool); - - rc1=worker->rPoolCache->put( env, worker->rPoolCache, rPool ); - if( rc1 == JK_OK ) { - rPool=NULL; - } else { + + rc1 = worker->rPoolCache->put(env, worker->rPoolCache, rPool); + if (rc1 == JK_OK) { + rPool = NULL; + } + else { rPool->close(env, rPool); } } - if(rc==JK_OK) { - workerEnv->globalEnv->releaseEnv( workerEnv->globalEnv, env ); - return OK; /* NOT r->status, even if it has changed. */ + if (rc == JK_OK) { + workerEnv->globalEnv->releaseEnv(workerEnv->globalEnv, env); + return OK; /* NOT r->status, even if it has changed. */ } env->l->jkLog(env, env->l, JK_LOG_ERROR, - "mod_jk.handler() Error connecting to tomcat %d %s\n", rc, worker==NULL?"":worker->channelName==NULL?"":worker->channelName); - workerEnv->globalEnv->releaseEnv( workerEnv->globalEnv, env ); + "mod_jk.handler() Error connecting to tomcat %d %s\n", rc, + worker == NULL ? "" : worker->channelName == + NULL ? "" : worker->channelName); + workerEnv->globalEnv->releaseEnv(workerEnv->globalEnv, env); return HTTP_INTERNAL_SERVER_ERROR; /* Is your tomcat server down ? */ } /** Use the internal mod_jk mappings to find if this is a request for * tomcat and what worker to use. */ -static int jk2_translate(request_rec *r) +static int jk2_translate(request_rec * r) { jk_uriEnv_t *uriEnv; jk_env_t *env; - + jk_uriMap_t *uriMap; - char *name=NULL; + char *name = NULL; int n; const char *ptr; - if(r->proxyreq) { + if (r->proxyreq) { return DECLINED; } - - uriEnv=ap_get_module_config( r->per_dir_config, &jk2_module ); - if( uriEnv != NULL && uriEnv->workerName!=NULL) { + + uriEnv = ap_get_module_config(r->per_dir_config, &jk2_module); + if (uriEnv != NULL && uriEnv->workerName != NULL) { /* jk2_handler tries to get the request_config and then falls back to the per_dir one. - so no point setting the request_config */ - r->handler=JK_HANDLER; - return OK; + so no point setting the request_config */ + r->handler = JK_HANDLER; + return OK; } - - uriMap= workerEnv->uriMap; + + uriMap = workerEnv->uriMap; /* Get an env instance */ - env = workerEnv->globalEnv->getEnv( workerEnv->globalEnv ); + env = workerEnv->globalEnv->getEnv(workerEnv->globalEnv); n = uriMap->vhosts->size(env, uriMap->vhosts); /* Check JkMount directives, if any */ /* if( workerEnv->uriMap->size == 0 ) */ /* return DECLINED; */ - + /* get_env() */ - env = workerEnv->globalEnv->getEnv( workerEnv->globalEnv ); + env = workerEnv->globalEnv->getEnv(workerEnv->globalEnv); ptr = ap_get_server_name(r); - if ( strlen(ptr) > 1024 - 12 ) { + if (strlen(ptr) > 1024 - 12) { /* That is probably an invalid request, DECLINED could display jsp source code. */ env->l->jkLog(env, env->l, JK_LOG_DEBUG, - "jk2_map_to_storage Host too big %s\n", ptr); + "jk2_map_to_storage Host too big %s\n", ptr); return HTTP_BAD_REQUEST; } uriEnv = workerEnv->uriMap->mapUri(env, workerEnv->uriMap, - ptr, - ap_get_server_port(r), - r->uri); - - if(uriEnv==NULL || uriEnv->workerName==NULL) { - workerEnv->globalEnv->releaseEnv( workerEnv->globalEnv, env ); + ptr, ap_get_server_port(r), r->uri); + + if (uriEnv == NULL || uriEnv->workerName == NULL) { + workerEnv->globalEnv->releaseEnv(workerEnv->globalEnv, env); return DECLINED; } - ap_set_module_config( r->request_config, &jk2_module, uriEnv ); - r->handler=JK_HANDLER; + ap_set_module_config(r->request_config, &jk2_module, uriEnv); + r->handler = JK_HANDLER; - env->l->jkLog(env, env->l, JK_LOG_INFO, + env->l->jkLog(env, env->l, JK_LOG_INFO, "mod_jk.translate(): uriMap %s %s\n", r->uri, uriEnv->workerName); - workerEnv->globalEnv->releaseEnv( workerEnv->globalEnv, env ); + workerEnv->globalEnv->releaseEnv(workerEnv->globalEnv, env); return OK; } -static const handler_rec jk2_handlers[] = -{ - { JK_MAGIC_TYPE, jk2_handler }, - { JK_HANDLER, jk2_handler }, +static const handler_rec jk2_handlers[] = { + {JK_MAGIC_TYPE, jk2_handler}, + {JK_HANDLER, jk2_handler}, NULL }; module MODULE_VAR_EXPORT jk2_module = { STANDARD_MODULE_STUFF, - jk2_init, /* module initializer */ - jk2_create_dir_config, /* per-directory config creator */ - jk2_merge_dir_config, /* dir config merger */ - jk2_create_config, /* server config creator */ + jk2_init, /* module initializer */ + jk2_create_dir_config, /* per-directory config creator */ + jk2_merge_dir_config, /* dir config merger */ + jk2_create_config, /* server config creator */ /* jk2_merge_config, / * server config merger */ NULL, - jk2_cmds, /* command table */ - jk2_handlers, /* [7] list of handlers */ - jk2_translate, /* [2] filename-to-URI translation */ + jk2_cmds, /* command table */ + jk2_handlers, /* [7] list of handlers */ + jk2_translate, /* [2] filename-to-URI translation */ NULL, /* [5] check/validate user_id */ NULL, /* [6] check user_id is valid *here* */ NULL, /* [4] check access by host address */ @@ -652,31 +668,30 @@ NULL, /* [8] fixups */ NULL, /* [10] logger */ NULL, /* [3] header parser */ - NULL, /* apache child process initializer */ - NULL, /* exit_handler, */ /* apache child process exit/cleanup */ + NULL, /* apache child process initializer */ + NULL, /* exit_handler, *//* apache child process exit/cleanup */ NULL /* [1] post read_request handling */ #ifdef X_EAPI - /* - * Extended module APIs, needed when using SSL. - * STDC say that we do not have to have them as NULL but - * why take a chance - */ - ,NULL, /* add_module */ + /* + * Extended module APIs, needed when using SSL. + * STDC say that we do not have to have them as NULL but + * why take a chance + */ + , NULL, /* add_module */ NULL, /* remove_module */ NULL, /* rewrite_command */ NULL, /* new_connection */ - NULL /* close_connection */ + NULL /* close_connection */ #endif /* EAPI */ - }; #ifdef WIN32 -BOOL WINAPI DllMain(HINSTANCE hInst, // Instance Handle of the DLL - ULONG ulReason, // Reason why NT called this DLL - LPVOID lpReserved) // Reserved parameter for future use +BOOL WINAPI DllMain(HINSTANCE hInst, // Instance Handle of the DLL + ULONG ulReason, // Reason why NT called this DLL + LPVOID lpReserved) // Reserved parameter for future use { - GetModuleFileName( hInst, file_name, sizeof(file_name)); + GetModuleFileName(hInst, file_name, sizeof(file_name)); return TRUE; } 1.13 +181 -163 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.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- jk_service_apache13.c 24 Feb 2004 08:44:42 -0000 1.12 +++ jk_service_apache13.c 21 Mar 2004 09:43:51 -0000 1.13 @@ -42,59 +42,63 @@ #include "jk_requtil.h" -#define NULL_FOR_EMPTY(x) ((x && !strlen(x)) ? NULL : x) +#define NULL_FOR_EMPTY(x) ((x && !strlen(x)) ? NULL : x) -static int JK_METHOD jk2_service_apache13_head(jk_env_t *env, jk_ws_service_t *s ) +static int JK_METHOD jk2_service_apache13_head(jk_env_t *env, + jk_ws_service_t *s) { int h; int numheaders; request_rec *r; jk_map_t *headers; - - if(s==NULL || s->ws_private==NULL ) + + if (s == NULL || s->ws_private == NULL) return JK_ERR; - - r = (request_rec *)s->ws_private; - - if(s->msg==NULL) { + + r = (request_rec *) s->ws_private; + + if (s->msg == NULL) { s->msg = ""; } r->status = s->status; r->status_line = ap_psprintf(r->pool, "%d %s", s->status, s->msg); - headers=s->headers_out; + headers = s->headers_out; numheaders = headers->size(env, headers); /* XXX As soon as we switch to jk_map_apache13, this will not be needed ! */ - 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 ); + 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); - if( s->uriEnv->mbean->debug > 0 ) - env->l->jkLog(env, env->l, JK_LOG_INFO, + 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 )); + 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") == 0 ) { + if (strcasecmp(name, "Content-type") == 0) { /* XXX should be done in handler ! */ char *tmp = ap_pstrdup(r->pool, val); - ap_content_type_tolower(tmp); + ap_content_type_tolower(tmp); r->content_type = tmp; ap_table_set(r->headers_out, name, val); - } else if(strcasecmp(name, "Location") == 0 ) { + } + else if (strcasecmp(name, "Location") == 0) { /* XXX setn */ ap_table_set(r->headers_out, name, val); - } else if(strcasecmp(name, "Content-Length") == 0) { - ap_table_set(r->headers_out, name, val ); - } else if(strcasecmp(name, "Transfer-Encoding") == 0 ) { - ap_table_set(r->headers_out,name, val); - } else if(strcasecmp(name, "Last-Modified") == 0 ) { + } + else if (strcasecmp(name, "Content-Length") == 0) { + ap_table_set(r->headers_out, name, val); + } + else if (strcasecmp(name, "Transfer-Encoding") == 0) { + ap_table_set(r->headers_out, name, val); + } + 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. @@ -102,7 +106,8 @@ ap_update_mtime(r, ap_parseHTTPdate(val)); ap_set_last_modified(r); ap_table_set(r->headers_out, name, val); - } else { + } + else { ap_table_add(r->headers_out, name, val); /* ap_table_set(r->headers_out, name, val); */ } @@ -110,7 +115,7 @@ ap_send_http_header(r); s->response_started = JK_TRUE; - + return JK_OK; } @@ -123,30 +128,33 @@ * the jk_ws_service class. Think of the *s param as a "this" or "self" * pointer. */ -static int JK_METHOD jk2_service_apache13_read(jk_env_t *env, jk_ws_service_t *s, - void *b, unsigned len, - unsigned *actually_read) +static int JK_METHOD jk2_service_apache13_read(jk_env_t *env, + jk_ws_service_t *s, void *b, + unsigned len, + unsigned *actually_read) { long rv; - if(s==NULL || s->ws_private==NULL || b==NULL || actually_read==NULL ) { + 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)) { + if (!s->read_body_started) { + if (ap_should_client_block(s->ws_private)) { s->read_body_started = JK_TRUE; } } rv = ap_get_client_block(s->ws_private, b, len); - - if( rv < 0) { + + if (rv < 0) { *actually_read = 0; - } else { - *actually_read = (unsigned) rv; + } + else { + *actually_read = (unsigned)rv; } return JK_OK; -} +} /* * Write a chunk of response data back to the browser. If the headers @@ -165,28 +173,30 @@ #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, unsigned int len) +static int JK_METHOD jk2_service_apache13_write(jk_env_t *env, + jk_ws_service_t *s, + const void *b, + unsigned int len) { int rc; - - if(s==NULL || s->ws_private == NULL || b==NULL ) + + if (s == NULL || s->ws_private == NULL || b == NULL) return JK_ERR; - + { size_t rd = 0; - long ll=len; - char *bb=(char *)b; - request_rec *rr=s->ws_private; + long ll = len; + char *bb = (char *)b; + request_rec *rr = s->ws_private; BUFF *bf = rr->connection->client; - - if(!s->response_started) { - if( s->uriEnv->mbean->debug > 0 ) - env->l->jkLog(env, env->l, JK_LOG_INFO, + + if (!s->response_started) { + if (s->uriEnv->mbean->debug > 0) + env->l->jkLog(env, env->l, JK_LOG_INFO, "service.write() default head\n"); - rc=s->head(env, s); - if( rc != JK_OK ) { + rc = s->head(env, s); + if (rc != JK_OK) { return rc; } } @@ -194,21 +204,22 @@ ap_bflush(bf); return JK_OK; } - + /* 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, rr ); - if( s->uriEnv->mbean->debug > 0 ) - env->l->jkLog(env, env->l, JK_LOG_INFO, - "service.write() %ld (%ld) out of %ld \n",toSend, rd, ll ); - ll-=CHUNK_SIZE; - bb+=CHUNK_SIZE; - - if(toSend != rd) { - return JK_ERR; - } - + while (ll > 0) { + unsigned long toSend = (ll > CHUNK_SIZE) ? CHUNK_SIZE : ll; + rd = ap_rwrite((const char *)bb, toSend, rr); + if (s->uriEnv->mbean->debug > 0) + env->l->jkLog(env, env->l, JK_LOG_INFO, + "service.write() %ld (%ld) out of %ld \n", + toSend, rd, ll); + ll -= CHUNK_SIZE; + bb += CHUNK_SIZE; + + if (toSend != rd) { + return JK_ERR; + } + } /* @@ -223,16 +234,17 @@ /* Utility functions */ /* ========================================================================= */ -static int jk2_get_content_length(jk_env_t *env, request_rec *r) +static int jk2_get_content_length(jk_env_t *env, request_rec * r) { - if(r->clength > 0) { + if (r->clength > 0) { return r->clength; - } else { + } + else { char *lenp = (char *)ap_table_get(r->headers_in, "Content-Length"); - if(lenp) { + if (lenp) { int rc = atoi(lenp); - if(rc > 0) { + if (rc > 0) { return rc; } } @@ -242,46 +254,47 @@ } static int JK_METHOD jk2_init_ws_service(jk_env_t *env, jk_ws_service_t *s, - jk_worker_t *worker, void *serverObj) + jk_worker_t *worker, void *serverObj) { - char *ssl_temp = NULL; - jk_workerEnv_t *workerEnv=worker->workerEnv; - request_rec *r=serverObj; - int need_content_length_header=JK_FALSE; + char *ssl_temp = NULL; + jk_workerEnv_t *workerEnv = worker->workerEnv; + request_rec *r = serverObj; + int need_content_length_header = JK_FALSE; /* Common initialization */ /* XXX Probably not needed, we're duplicating */ jk2_requtil_initRequest(env, s); - + s->ws_private = r; s->response_started = JK_FALSE; s->read_body_started = JK_FALSE; - s->workerEnv=workerEnv; + s->workerEnv = workerEnv; workerEnv->childId = r->connection->child_num; - s->jvm_route = NULL; /* Used for sticky session routing */ + s->jvm_route = NULL; /* Used for sticky session routing */ - s->auth_type = NULL_FOR_EMPTY(r->connection->ap_auth_type); - s->remote_user = NULL_FOR_EMPTY(r->connection->user); + s->auth_type = NULL_FOR_EMPTY(r->connection->ap_auth_type); + s->remote_user = NULL_FOR_EMPTY(r->connection->user); - s->protocol = r->protocol; - s->remote_host = (char *)ap_get_remote_host(r->connection, - r->per_dir_config, REMOTE_HOST); - s->remote_host = NULL_FOR_EMPTY(s->remote_host); - s->remote_addr = NULL_FOR_EMPTY(r->connection->remote_ip); + s->protocol = r->protocol; + s->remote_host = (char *)ap_get_remote_host(r->connection, + r->per_dir_config, + REMOTE_HOST); + s->remote_host = NULL_FOR_EMPTY(s->remote_host); + s->remote_addr = NULL_FOR_EMPTY(r->connection->remote_ip); /* get server name */ - s->server_name= (char *)(r->hostname ? r->hostname : - r->server->server_hostname); + s->server_name = (char *)(r->hostname ? r->hostname : + r->server->server_hostname); s->server_port = htons(r->connection->local_addr.sin_port); s->server_software = (char *)ap_get_server_version(); - s->method = (char *)r->method; + s->method = (char *)r->method; s->content_length = jk2_get_content_length(env, r); - s->is_chunked = r->read_chunked; + s->is_chunked = r->read_chunked; s->no_more_chunks = 0; - s->query_string = r->args; + s->query_string = r->args; /* * The 2.2 servlet spec errata says the uri from @@ -301,111 +314,115 @@ switch (workerEnv->options & JK_OPT_FWDURIMASK) { - case JK_OPT_FWDURICOMPATUNPARSED : - s->req_uri = r->unparsed_uri; - if (s->req_uri != NULL) { - char *query_str = strchr(s->req_uri, '?'); - if (query_str != NULL) { - *query_str = 0; - } + case JK_OPT_FWDURICOMPATUNPARSED: + s->req_uri = r->unparsed_uri; + if (s->req_uri != NULL) { + char *query_str = strchr(s->req_uri, '?'); + if (query_str != NULL) { + *query_str = 0; } + } break; - case JK_OPT_FWDURICOMPAT : - s->req_uri = r->uri; + case JK_OPT_FWDURICOMPAT: + s->req_uri = r->uri; break; - case JK_OPT_FWDURIESCAPED : - s->req_uri = ap_escape_uri(r->pool, r->uri); + case JK_OPT_FWDURIESCAPED: + s->req_uri = ap_escape_uri(r->pool, r->uri); break; - default : - return JK_ERR; + default: + return JK_ERR; } - s->is_ssl = JK_FALSE; - s->ssl_cert = NULL; + s->is_ssl = JK_FALSE; + s->ssl_cert = NULL; s->ssl_cert_len = 0; - s->ssl_cipher = NULL; /* required by Servlet 2.3 Api, + s->ssl_cipher = NULL; /* required by Servlet 2.3 Api, allready in original ajp13 */ - s->ssl_session = NULL; - s->ssl_key_size = -1; /* required by Servlet 2.3 Api, added in jtc */ + s->ssl_session = NULL; + s->ssl_key_size = -1; /* required by Servlet 2.3 Api, added in jtc */ - if(workerEnv->ssl_enable || workerEnv->envvars_in_use) { + if (workerEnv->ssl_enable || workerEnv->envvars_in_use) { ap_add_common_vars(r); - if(workerEnv->ssl_enable) { - ssl_temp = - (char *)ap_table_get(r->subprocess_env, - workerEnv->https_indicator); - if(ssl_temp && !strcasecmp(ssl_temp, "on")) { - s->is_ssl = JK_TRUE; - s->ssl_cert = - (char *)ap_table_get(r->subprocess_env, - workerEnv->certs_indicator); - if(s->ssl_cert) { + if (workerEnv->ssl_enable) { + ssl_temp = + (char *)ap_table_get(r->subprocess_env, + workerEnv->https_indicator); + if (ssl_temp && !strcasecmp(ssl_temp, "on")) { + s->is_ssl = JK_TRUE; + s->ssl_cert = + (char *)ap_table_get(r->subprocess_env, + workerEnv->certs_indicator); + if (s->ssl_cert) { s->ssl_cert_len = strlen(s->ssl_cert); } /* Servlet 2.3 API */ - s->ssl_cipher = - (char *)ap_table_get(r->subprocess_env, - workerEnv->cipher_indicator); - s->ssl_session = - (char *)ap_table_get(r->subprocess_env, - workerEnv->session_indicator); + s->ssl_cipher = + (char *)ap_table_get(r->subprocess_env, + workerEnv->cipher_indicator); + s->ssl_session = + (char *)ap_table_get(r->subprocess_env, + workerEnv->session_indicator); if (workerEnv->options & JK_OPT_FWDKEYSIZE) { /* Servlet 2.3 API */ - ssl_temp = (char *)ap_table_get(r->subprocess_env, - workerEnv->key_size_indicator); + ssl_temp = (char *)ap_table_get(r->subprocess_env, + workerEnv-> + key_size_indicator); if (ssl_temp) s->ssl_key_size = atoi(ssl_temp); } } } - jk2_map_default_create(env, &s->attributes, s->pool ); - - if(workerEnv->envvars_in_use) { - int envCnt=workerEnv->envvars->size( env, workerEnv->envvars ); + jk2_map_default_create(env, &s->attributes, s->pool); + + if (workerEnv->envvars_in_use) { + int envCnt = workerEnv->envvars->size(env, workerEnv->envvars); int i; - for( i=0; i< envCnt ; i++ ) { - char *name= workerEnv->envvars->nameAt( env, workerEnv->envvars, i ); - char *val= (char *)ap_table_get(r->subprocess_env, name); - if(val==NULL) { - val=workerEnv->envvars->valueAt( env, workerEnv->envvars, i ); + for (i = 0; i < envCnt; i++) { + char *name = + workerEnv->envvars->nameAt(env, workerEnv->envvars, i); + char *val = (char *)ap_table_get(r->subprocess_env, name); + if (val == NULL) { + val = + workerEnv->envvars->valueAt(env, workerEnv->envvars, + i); } - s->attributes->put( env, s->attributes, name, val, NULL ); + s->attributes->put(env, s->attributes, name, val, NULL); } } } - jk2_map_default_create(env, &s->headers_in, s->pool ); + jk2_map_default_create(env, &s->headers_in, s->pool); - if(r->headers_in && ap_table_elts(r->headers_in)) { + if (r->headers_in && ap_table_elts(r->headers_in)) { const array_header *t = ap_table_elts(r->headers_in); - if(t && t->nelts) { + if (t && t->nelts) { int i; - table_entry *elts = (table_entry *)t->elts; + table_entry *elts = (table_entry *) t->elts; - for(i = 0 ; i < t->nelts ; i++) { - s->headers_in->add( env, s->headers_in, - elts[i].key, elts[i].val); + for (i = 0; i < t->nelts; i++) { + s->headers_in->add(env, s->headers_in, + elts[i].key, elts[i].val); } } } - if(!s->is_chunked && s->content_length == 0) { + if (!s->is_chunked && s->content_length == 0) { /* XXX if r->contentLength == 0 I assume there's no header or a header with '0'. In the second case, put will override it */ - s->headers_in->put( env, s->headers_in, "content-length", "0", NULL ); + s->headers_in->put(env, s->headers_in, "content-length", "0", NULL); } - jk2_map_default_create(env, &s->headers_out, s->pool ); + jk2_map_default_create(env, &s->headers_out, s->pool); return JK_OK; } @@ -420,13 +437,14 @@ * jk shouldn't do it instead, and the user should get the * error message ! */ -static void JK_METHOD jk2_service_apache13_afterRequest(jk_env_t *env, jk_ws_service_t *s ) +static void JK_METHOD jk2_service_apache13_afterRequest(jk_env_t *env, + jk_ws_service_t *s) { - + if (s->content_read < s->content_length || - (s->is_chunked && ! s->no_more_chunks)) { - - request_rec *r=s->ws_private; + (s->is_chunked && !s->no_more_chunks)) { + + request_rec *r = s->ws_private; char *buff = ap_palloc(r->pool, 2048); if (buff != NULL) { @@ -440,15 +458,15 @@ int jk2_service_apache13_init(jk_env_t *env, jk_ws_service_t *s) { - if(s==NULL ) { + if (s == NULL) { return JK_ERR; } - s->head = jk2_service_apache13_head; - s->read = jk2_service_apache13_read; - s->write = jk2_service_apache13_write; - s->init = jk2_init_ws_service; - s->afterRequest = jk2_service_apache13_afterRequest; - + s->head = jk2_service_apache13_head; + s->read = jk2_service_apache13_read; + s->write = jk2_service_apache13_write; + s->init = jk2_init_ws_service; + s->afterRequest = jk2_service_apache13_afterRequest; + return JK_OK; }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]