costin 01/12/16 15:37:13 Modified: jk/native2/server/apache2 mod_jk.c Log: Update to the new methods signatures. Revision Changes Path 1.13 +136 -104 jakarta-tomcat-connectors/jk/native2/server/apache2/mod_jk.c Index: mod_jk.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/server/apache2/mod_jk.c,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- mod_jk.c 2001/12/15 17:36:25 1.12 +++ mod_jk.c 2001/12/16 23:37:13 1.13 @@ -59,7 +59,7 @@ * Description: Apache 2 plugin for Jakarta/Tomcat * * Author: Gal Shachor <[EMAIL PROTECTED]> * * Henri Gomez <[EMAIL PROTECTED]> * - * Version: $Revision: 1.12 $ * + * Version: $Revision: 1.13 $ * ***************************************************************************/ /* @@ -172,7 +172,8 @@ (jk_workerEnv_t *)ap_get_module_config(s->module_config, &jk_module); /* Do we know the url ? */ - webapp=workerEnv->createWebapp( workerEnv, NULL, NULL, NULL ); + webapp=workerEnv->createWebapp( workerEnv->globalEnv, workerEnv, + NULL, NULL, NULL ); uriEnv->webapp=webapp; webapp->workerName=ap_pstrdup(cmd->pool, workerName); @@ -194,15 +195,16 @@ { server_rec *s = cmd->server; struct stat statbuf; - jk_logger_t *l; + jk_env_t *env; jk_workerEnv_t *workerEnv = (jk_workerEnv_t *)ap_get_module_config(s->module_config, &jk_module); - l=workerEnv->l; /* we need an absolut path (ap_server_root_relative does the ap_pstrdup) */ workerEnv->worker_file = ap_server_root_relative(cmd->pool,worker_file); + env=workerEnv->globalEnv; + if (workerEnv->worker_file == NULL) return "JkWorkersFile file_name invalid"; @@ -211,21 +213,21 @@ /** Read worker files */ - l->jkLog(l, JK_LOG_DEBUG, "Reading map %s %d\n", - workerEnv->worker_file, - workerEnv->init_data->size(NULL, workerEnv->init_data) ); + env->l->jkLog(env, env->l, JK_LOG_DEBUG, "Reading map %s %d\n", + workerEnv->worker_file, + workerEnv->init_data->size(env, workerEnv->init_data) ); if( workerEnv->worker_file != NULL ) { - int err=jk_map_readFileProperties(NULL, workerEnv->init_data, + int err=jk_map_readFileProperties(env, workerEnv->init_data, workerEnv->worker_file); if( err==JK_TRUE ) { - l->jkLog(l, JK_LOG_DEBUG, - "Read map %s %d\n", workerEnv->worker_file, - workerEnv->init_data->size( NULL, workerEnv->init_data ) ); + env->l->jkLog(env, env->l, JK_LOG_DEBUG, + "Read map %s %d\n", workerEnv->worker_file, + workerEnv->init_data->size( env, workerEnv->init_data ) ); } else { - l->jkLog(l, JK_LOG_ERROR, "Error reading map %s %d\n", - workerEnv->worker_file, - workerEnv->init_data->size( NULL, workerEnv->init_data ) ); + env->l->jkLog(env, env->l, JK_LOG_ERROR, "Error reading map %s %d\n", + workerEnv->worker_file, + workerEnv->init_data->size( env, workerEnv->init_data ) ); } } @@ -244,24 +246,27 @@ struct stat statbuf; char *oldv; int rc; + jk_env_t *env; jk_workerEnv_t *workerEnv = (jk_workerEnv_t *)ap_get_module_config(s->module_config, &jk_module); jk_map_t *m=workerEnv->init_data; + + env=workerEnv->globalEnv; - value = jk_map_replaceProperties(NULL, m, m->pool, value); + value = jk_map_replaceProperties(env, m, m->pool, value); - oldv = jk_map_getString(NULL, m, name, NULL); + oldv = jk_map_getString(env, m, name, NULL); if(oldv) { - char *tmpv = apr_palloc(cmd->pool, + char *tmpv = apr_palloc( cmd->pool, strlen(value) + strlen(oldv) + 3); if(tmpv) { char sep = '*'; - if(jk_is_some_property(name, "path")) { + if(jk_is_some_property(env, name, "path")) { sep = PATH_SEPERATOR; - } else if(jk_is_some_property(name, "cmd_line")) { + } else if(jk_is_some_property(env, name, "cmd_line")) { sep = ' '; } @@ -270,13 +275,13 @@ } value = tmpv; } else { - value = ap_pstrdup(cmd->pool, value); + value = ap_pstrdup( cmd->pool, value); } if(value) { - m->put(NULL, m, - ap_pstrdup(cmd->pool, name), - ap_pstrdup(cmd->pool, value), + m->put(env, m, + ap_pstrdup( cmd->pool, name), + ap_pstrdup( cmd->pool, value), NULL); /*printf("Setting %s %s\n", name, value);*/ } @@ -714,9 +719,9 @@ /** First create a pool */ #ifdef NO_APACHE_POOL - jk_pool_create( &globalPool, NULL, 2048 ); + jk_pool_create( NULL, &globalPool, NULL, 2048 ); #else - jk_pool_apr_create( &globalPool, NULL, p ); + jk_pool_apr_create( NULL, &globalPool, NULL, p ); #endif /** Create the global environment. This will register the default @@ -737,25 +742,26 @@ l->logger_private=s; #endif - env->logger=l; + env->l=l; l->level=JK_LOG_ERROR_LEVEL; /* Create the workerEnv */ workerEnvPool= - env->globalPool->create( env->globalPool, HUGE_POOL_SIZE ); + env->globalPool->create( env, env->globalPool, HUGE_POOL_SIZE ); workerEnv= env->getInstance( env, workerEnvPool, "workerEnv", "default"); + workerEnv->globalEnv=env; if( workerEnv==NULL ) { - l->jkLog(l, JK_LOG_ERROR, "Error creating workerEnv\n"); + env->l->jkLog(env, env->l, JK_LOG_ERROR, "Error creating workerEnv\n"); return NULL; } /* Local initialization */ workerEnv->_private = s; - workerEnv->l->jkLog(workerEnv->l, JK_LOG_INFO, "mod_jk.create_jk_config()\n" ); + env->l->jkLog(env, env->l, JK_LOG_INFO, "mod_jk.create_jk_config()\n" ); return workerEnv; } @@ -819,8 +825,9 @@ { jk_workerEnv_t *workerEnv = (jk_workerEnv_t *)ap_get_module_config(s->module_config, &jk_module); + jk_env_t *env=workerEnv->globalEnv; - workerEnv->l->jkLog(workerEnv->l, JK_LOG_INFO, "mod_jk child init\n" ); + env->l->jkLog(env, env->l, JK_LOG_INFO, "mod_jk child init\n" ); /* init_jk( pconf, conf, s ); do we need jk_child_init? For ajp14? */ @@ -835,22 +842,23 @@ SetHandler and normal apache directives ( but minimal jk-specific stuff ) */ -static void init_jk( apr_pool_t *pconf, jk_workerEnv_t *workerEnv, server_rec *s ) { +static void init_jk( jk_env_t *env, apr_pool_t *pconf, + jk_workerEnv_t *workerEnv, server_rec *s ) +{ int err; - jk_logger_t *l=workerEnv->l; - workerEnv->l->jkLog(workerEnv->l, JK_LOG_INFO, "mod_jk.init_jk()\n" ); + env->l->jkLog(env, env->l, JK_LOG_INFO, "mod_jk.init_jk()\n" ); - l->open( l, workerEnv->init_data ); + env->l->open( env, env->l, workerEnv->init_data ); /* local initialization */ workerEnv->virtual = "*"; /* for now */ workerEnv->server_name = (char *)ap_get_server_version(); /* Init() - post-config initialization ( now all options are set ) */ - workerEnv->init( workerEnv ); + workerEnv->init( env, workerEnv ); - err=workerEnv->uriMap->init(workerEnv->uriMap, + err=workerEnv->uriMap->init(env, workerEnv->uriMap, workerEnv, workerEnv->init_data ); @@ -901,6 +909,7 @@ apr_pool_t *gPool=NULL; void *data=NULL; int rc; + jk_env_t *env; if(s->is_virtual) return OK; @@ -908,21 +917,23 @@ workerEnv = (jk_workerEnv_t *)ap_get_module_config(s->module_config, &jk_module); + env=workerEnv->globalEnv; + rc=jk_apache2_isValidating( plog, &gPool ); if( rc == JK_TRUE ) { /* This is the first step */ - workerEnv->l->jkLog(workerEnv->l, JK_LOG_INFO, - "mod_jk.post_config() first invocation\n"); + env->l->jkLog(env, env->l, JK_LOG_INFO, + "mod_jk.post_config() first invocation\n"); apr_pool_userdata_set( "INITOK", "mod_jk_init", NULL, gPool ); return OK; } - workerEnv->l->jkLog(workerEnv->l, JK_LOG_INFO, - "mod_jk.post_config() second invocation\n" ); + env->l->jkLog(env, env->l, JK_LOG_INFO, + "mod_jk.post_config() second invocation\n" ); if(!workerEnv->was_initialized) { workerEnv->was_initialized = JK_TRUE; - init_jk( pconf, workerEnv, s ); + init_jk( env, pconf, workerEnv, s ); } return OK; } @@ -935,8 +946,9 @@ */ static apr_status_t jk_cleanup_endpoint( void *data ) { jk_endpoint_t *end = (jk_endpoint_t *)data; - printf("XXX jk_cleanup1 %p\n", data); - end->done(&end, NULL); + printf("XXX jk_cleanup1 %p\n", data); + /* XXX get env */ + end->done(NULL, end); return 0; } @@ -946,13 +958,15 @@ { jk_workerEnv_t *workerEnv; jk_logger_t *l; + jk_env_t *env; if( strcmp( r->handler, JK_CTL_HANDLER ) != 0 ) return DECLINED; workerEnv=(jk_workerEnv_t *)ap_get_module_config(r->server->module_config, &jk_module); - l = workerEnv->l; + /* XXX Get a 'local' env instance */ + env = workerEnv->globalEnv; /* Find what 'ctl' request we have */ @@ -975,6 +989,7 @@ jk_endpoint_t *end = NULL; jk_uriEnv_t *uriEnv; jk_uriEnv_t *dirEnv; + jk_env_t *env; jk_workerEnv_t *workerEnv; uriEnv=ap_get_module_config( r->request_config, &jk_module ); @@ -990,36 +1005,38 @@ workerEnv=(jk_workerEnv_t *)ap_get_module_config(r->server->module_config, &jk_module); - l = workerEnv->l; + /* XXX Get an env instance */ + env = workerEnv->globalEnv; /* Set up r->read_chunked flags for chunked encoding, if present */ if(rc = ap_setup_client_block(r, REQUEST_CHUNKED_DECHUNK)) { - l->jkLog(l, JK_LOG_INFO, - "mod_jk.handler() Can't setup client block %d\n", rc); + env->l->jkLog(env, env->l, JK_LOG_INFO, + "mod_jk.handler() Can't setup client block %d\n", rc); return rc; } if( uriEnv == NULL ) { /* SetHandler case - per_dir config should have the worker*/ worker = workerEnv->defaultWorker; - l->jkLog(l, JK_LOG_INFO, - "mod_jk.handler() Default worker for %s %s\n", - r->uri, worker->name); + env->l->jkLog(env, env->l, JK_LOG_INFO, + "mod_jk.handler() Default worker for %s %s\n", + r->uri, worker->name); } else { worker=uriEnv->webapp->worker; if( worker==NULL && uriEnv->webapp->workerName != NULL ) { - worker=workerEnv->getWorkerForName( workerEnv, uriEnv->webapp->workerName); + worker=workerEnv->getWorkerForName( env, workerEnv, + uriEnv->webapp->workerName); uriEnv->webapp->worker=worker; } } if(worker==NULL ) { - l->jkLog(l, JK_LOG_ERROR, - "No worker for %s\n", r->uri); + env->l->jkLog(env, env->l, JK_LOG_ERROR, + "No worker for %s\n", r->uri); return 500; } - worker->get_endpoint(worker, &end, l); + worker->get_endpoint(env, worker, &end); { int rc = JK_FALSE; @@ -1027,23 +1044,23 @@ jk_ws_service_t *s=&sOnStack; int is_recoverable_error = JK_FALSE; - jk_service_apache2_factory( workerEnv->env, end->cPool, &s, + jk_service_apache2_factory( env, end->cPool, &s, "service", "apache2"); - s->init( s, end, r ); + s->init( env, s, end, r ); - rc = end->service(end, s, l, &is_recoverable_error); + rc = end->service(env, end, s, &is_recoverable_error); - s->afterRequest(s); + s->afterRequest(env, s); } - end->done(&end, l); + end->done(env, end); if(rc==JK_TRUE) { return OK; /* NOT r->status, even if it has changed. */ } - l->jkLog(l, JK_LOG_ERROR, + env->l->jkLog(env, env->l, JK_LOG_ERROR, "mod_jk.handler() Error connecting to tomcat %d\n", rc); return 500; } @@ -1053,66 +1070,79 @@ */ static int jk_translate(request_rec *r) { - jk_logger_t *l; jk_workerEnv_t *workerEnv; jk_uriEnv_t *uriEnv; + jk_env_t *env; if(r->proxyreq) { return DECLINED; } uriEnv=ap_get_module_config( r->per_dir_config, &jk_module ); + workerEnv=(jk_workerEnv_t *)ap_get_module_config(r->server->module_config, + &jk_module); + /* XXX get_env() */ + env=workerEnv->globalEnv; + + /* This has been mapped to a location that has a 'webapp' property, + i.e. belongs to a tomcat webapp. + We'll use the webapp uriMap to find if it's a static page and + to parse the request. + XXX for now just forward to tomcat + */ if( uriEnv!= NULL && uriEnv->webapp!=NULL ) { - fprintf( stderr, "XXX urienv %p %p \n", uriEnv, uriEnv->webapp); - fprintf( stderr, "XXX urienv %s \n", uriEnv->webapp->workerName); + jk_uriMap_t *uriMap=uriEnv->webapp->uriMap; + + if( uriMap!=NULL ) { + /* Again, we have 2 choices. Either use our map, or again + let apache. The second is probably faster, but requires + using some APIs I'm not familiar with ( to modify apache's + config on the fly ). After we learn the new APIs we can + switch to the second method. + */ + /* XXX Cut the context path ? */ + jk_uriEnv_t *target=uriMap->mapUri( env, uriMap, NULL, r->uri ); + if( target == NULL ) + return DECLINED; + uriEnv=target; + } + + env->l->jkLog(env, env->l, JK_LOG_INFO, + "PerDir mapping %p %p %s\n", + uriEnv->webapp->workerName); + ap_set_module_config( r->request_config, &jk_module, uriEnv ); r->handler=JK_HANDLER; return OK; } - workerEnv=(jk_workerEnv_t *)ap_get_module_config(r->server->module_config, - &jk_module); - l=workerEnv->l; - - if(!workerEnv) { - /* Shouldn't happen, init problems ! */ - ap_log_error(APLOG_MARK, APLOG_EMERG | APLOG_NOERRNO, 0, - NULL, "Assertion failed, workerEnv==NULL" ); - return DECLINED; - } + /* One idea was to use "SetHandler jakarta-servlet". This doesn't + allow the setting of the worker. Having a specific SetWorker directive + at location level is more powerfull. If anyone can figure any reson + to support SetHandler, we can add it back easily */ - if( (r->handler != NULL ) && - ( strcmp( r->handler, JK_HANDLER ) == 0 )) { - /* Somebody already set the handler, probably manual config - * or "native" configuration, no need for extra overhead - */ - l->jkLog(l, JK_LOG_DEBUG, - "Manually mapped, no need to call uri_to_worker\n"); + /* Check JkMount directives, if any */ + if( workerEnv->uriMap->size == 0 ) return DECLINED; - } - - { - /* XXX Split mapping, similar with tomcat. First step will - be a quick test ( the context mapper ), with no allocations. - If positive, we'll fill a ws_service_t and do the rewrite and - the real mapping. - */ - uriEnv = workerEnv->uriMap->mapUri(workerEnv->uriMap,NULL,r->uri ); - } + + /* XXX TODO: Split mapping, similar with tomcat. First step will + be a quick test ( the context mapper ), with no allocations. + If positive, we'll fill a ws_service_t and do the rewrite and + the real mapping. + */ + uriEnv = workerEnv->uriMap->mapUri(env, workerEnv->uriMap,NULL,r->uri ); if(uriEnv==NULL ) { return DECLINED; } - /* Why do we need to duplicate a constant ??? */ - r->handler=apr_pstrdup(r->pool,JK_HANDLER); - ap_set_module_config( r->request_config, &jk_module, uriEnv ); - - l->jkLog(l, JK_LOG_INFO, - "mod_jk.translate(): map %s %s\n", - r->uri, uriEnv->webapp->worker->name); + r->handler=JK_HANDLER; + env->l->jkLog(env, env->l, JK_LOG_INFO, + "mod_jk.translate(): uriMap %s %s\n", + r->uri, uriEnv->webapp->worker->name); + return OK; } @@ -1121,13 +1151,15 @@ /* bypass the directory_walk and file_walk for non-file requests */ static int jk_map_to_storage(request_rec *r) { - jk_uriEnv_t *env=ap_get_module_config( r->request_config, &jk_module ); - - if( env != NULL ) { + jk_uriEnv_t *uriEnv=ap_get_module_config( r->request_config, &jk_module ); + + if( uriEnv != NULL ) { r->filename = (char *)apr_filename_of_pathname(r->uri); - env->workerEnv->l->jkLog(env->workerEnv->l, JK_LOG_INFO, - "mod_jk.map_to_storage(): map %s %s\n", - r->uri, r->filename); + if( uriEnv->debug > 0 ) { + /* env->l->jkLog(env, env->l, JK_LOG_INFO, */ + /* "mod_jk.map_to_storage(): map %s %s\n", */ + /* r->uri, r->filename); */ + } return OK; } return DECLINED; @@ -1146,7 +1178,7 @@ { STANDARD20_MODULE_STUFF, create_jk_dir_config,/* dir config creater */ - merge_jk_dir_config, /* dir merger --- default is to override */ + NULL, /* merge_jk_dir_config dir merger --- default is to override */ create_jk_config, /* server config */ merge_jk_config, /* merge server config */ jk_cmds, /* command ap_table_t */
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>