costin 01/07/03 15:34:12
Modified: jk/native/apache-2.0 mod_jk.c
Log:
Added few comments, reformat some long lines ( to 80 columns - so it can be
printed and read more easily ).
Removed the duplicated code that inits mod_jk, preparing to allow
more configuration to be specified in workers.properties.
( or a common format for all servers )
Revision Changes Path
1.14 +119 -67 jakarta-tomcat-connectors/jk/native/apache-2.0/mod_jk.c
Index: mod_jk.c
===================================================================
RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/apache-2.0/mod_jk.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- mod_jk.c 2001/07/03 20:52:48 1.13
+++ mod_jk.c 2001/07/03 22:34:09 1.14
@@ -60,7 +60,7 @@
* Description: Apache 2 plugin for Jakarta/Tomcat *
* Author: Gal Shachor <[EMAIL PROTECTED]> *
* Henri Gomez <[EMAIL PROTECTED]> *
- * Version: $Revision: 1.13 $ *
+ * Version: $Revision: 1.14 $ *
***************************************************************************/
/*
@@ -164,6 +164,8 @@
unsigned l,
unsigned *a);
+static void init_jk( apr_pool_t *pconf,jk_server_conf_t *conf, server_rec *s );
+
static int JK_METHOD ws_write(jk_ws_service_t *s,
const void *b,
unsigned l);
@@ -197,11 +199,14 @@
ap_content_type_tolower(tmp);
r->content_type = tmp;
} else if(!strcasecmp(header_names[h], "Location")) {
- apr_table_set(r->headers_out, header_names[h], header_values[h]);
+ apr_table_set(r->headers_out,
+ header_names[h], header_values[h]);
} else if(!strcasecmp(header_names[h], "Content-Length")) {
- apr_table_set(r->headers_out, header_names[h], header_values[h]);
+ apr_table_set(r->headers_out,
+ header_names[h], header_values[h]);
} else if(!strcasecmp(header_names[h], "Transfer-Encoding")) {
- apr_table_set(r->headers_out, header_names[h], header_values[h]);
+ apr_table_set(r->headers_out,
+ header_names[h], header_values[h]);
} else if(!strcasecmp(header_names[h], "Last-Modified")) {
/*
* If the script gave us a Last-Modified header, we can't just
@@ -210,7 +215,8 @@
ap_update_mtime(r, ap_parseHTTPdate(header_values[h]));
ap_set_last_modified(r);
} else {
- apr_table_add(r->headers_out, header_names[h], header_values[h]);
+ apr_table_add(r->headers_out,
+ header_names[h], header_values[h]);
}
}
@@ -386,7 +392,9 @@
s->remote_user = NULL_FOR_EMPTY(r->user);
s->protocol = r->protocol;
- s->remote_host = (char *)ap_get_remote_host(r->connection, r->per_dir_config,
REMOTE_HOST, NULL);
+ s->remote_host = (char *)ap_get_remote_host(r->connection,
+ r->per_dir_config,
+ REMOTE_HOST, NULL);
s->remote_host = NULL_FOR_EMPTY(s->remote_host);
s->remote_addr = NULL_FOR_EMPTY(r->connection->remote_ip);
@@ -454,7 +462,8 @@
s->is_ssl = JK_FALSE;
s->ssl_cert = NULL;
s->ssl_cert_len = 0;
- s->ssl_cipher = NULL; /* required by Servlet 2.3 Api, allready in
original ajp13 */
+ 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 */
@@ -462,19 +471,28 @@
ap_add_common_vars(r);
if(conf->ssl_enable) {
- ssl_temp = (char *)apr_table_get(r->subprocess_env,
conf->https_indicator);
+ ssl_temp =
+ (char *)apr_table_get(r->subprocess_env,
+ conf->https_indicator);
if(ssl_temp && !strcasecmp(ssl_temp, "on")) {
s->is_ssl = JK_TRUE;
- s->ssl_cert = (char *)apr_table_get(r->subprocess_env,
conf->certs_indicator);
+ s->ssl_cert =
+ (char *)apr_table_get(r->subprocess_env,
+ conf->certs_indicator);
if(s->ssl_cert) {
s->ssl_cert_len = strlen(s->ssl_cert);
}
/* Servlet 2.3 API */
- s->ssl_cipher = (char *)apr_table_get(r->subprocess_env,
conf->cipher_indicator);
- s->ssl_session = (char *)apr_table_get(r->subprocess_env,
conf->session_indicator);
+ s->ssl_cipher =
+ (char *)apr_table_get(r->subprocess_env,
+ conf->cipher_indicator);
+ s->ssl_session =
+ (char *)apr_table_get(r->subprocess_env,
+ conf->session_indicator);
/* Servlet 2.3 API */
- ssl_temp = (char *)apr_table_get(r->subprocess_env,
conf->key_size_indicator);
+ ssl_temp = (char *)apr_table_get(r->subprocess_env,
+ conf->key_size_indicator);
if (ssl_temp)
s->ssl_key_size = atoi(ssl_temp);
@@ -486,12 +504,15 @@
if(t && t->nelts) {
int i;
apr_table_entry_t *elts = (apr_table_entry_t *)t->elts;
- s->attributes_names = apr_palloc(r->pool, sizeof(char *) *
t->nelts);
- s->attributes_values = apr_palloc(r->pool, sizeof(char *) *
t->nelts);
+ s->attributes_names = apr_palloc(r->pool,
+ sizeof(char *) * t->nelts);
+ s->attributes_values = apr_palloc(r->pool,
+ sizeof(char *) * t->nelts);
for(i = 0 ; i < t->nelts ; i++) {
s->attributes_names[i] = elts[i].key;
- s->attributes_values[i] = (char
*)apr_table_get(r->subprocess_env, elts[i].key);
+ s->attributes_values[i] =
+ (char *)apr_table_get(r->subprocess_env, elts[i].key);
if(!s->attributes_values[i]) {
s->attributes_values[i] = elts[i].val;
}
@@ -820,7 +841,7 @@
}
static const command_rec jk_cmds[] =
-{
+ {
/*
* JkWorkersFile specifies a full path to the location of the worker
* properties file.
@@ -860,7 +881,8 @@
{"JkLogFile", jk_set_log_file, NULL, RSRC_CONF, TAKE1,
"Full path to the Jakarta Tomcat module log file"},
{"JkLogLevel", jk_set_log_level, NULL, RSRC_CONF, TAKE1,
- "The Jakarta Tomcat module log level, can be debug, info, error or emerg"},
+ "The Jakarta Tomcat module log level, can be debug, "
+ "info, error or emerg"},
{"JkLogStampFormat", jk_set_log_fmt, NULL, RSRC_CONF, TAKE1,
"The Jakarta Tomcat module log format, follow strftime synthax"},
@@ -894,7 +916,8 @@
* Servlet Engine
*/
{"JkEnvVar", jk_add_env_var, NULL, RSRC_CONF, TAKE2,
- "Adds a name of environment variable that should be sent to servlet-engine"},
+ "Adds a name of environment variable that should be sent "
+ "to servlet-engine"},
{NULL}
};
@@ -903,6 +926,8 @@
/* The JK module handlers */
/* ========================================================================= */
+/** Util - cleanup endpoint.
+ */
apr_status_t jk_cleanup_endpoint( void *data ) {
jk_endpoint_t *end = (jk_endpoint_t *)data;
/* printf("XXX jk_cleanup1 %ld\n", data); */
@@ -910,6 +935,8 @@
return 0;
}
+/** Main service method, called to forward a request to tomcat
+ */
static int jk_handler(request_rec *r)
{
const char *worker_name;
@@ -951,11 +978,13 @@
}
if (1) {
- jk_log(xl, JK_LOG_DEBUG, "Into handler r->proxyreq=%d r->handler=%s
r->notes=%d worker=%s\n",
+ jk_log(xl, JK_LOG_DEBUG, "Into handler r->proxyreq=%d "
+ "r->handler=%s r->notes=%d worker=%s\n",
r->proxyreq, r->handler, r->notes, worker_name);
}
- conf=(jk_server_conf_t *)ap_get_module_config(r->server->module_config,
&jk_module);
+ conf=(jk_server_conf_t *)ap_get_module_config(r->server->module_config,
+ &jk_module);
/* If this is a proxy request, we'll notify an error */
if(r->proxyreq) {
@@ -964,9 +993,10 @@
if(conf && ! worker_name ) {
/* Direct mapping ( via setHandler ). Try overrides */
- worker_name = map_uri_to_worker(conf->uw_map, r->uri, conf->log ? conf->log
: main_log);
+ worker_name = map_uri_to_worker(conf->uw_map, r->uri,
+ conf->log ? conf->log : main_log);
if( ! worker_name ) {
- /* Since we are here, an explicit ( native ) mapping has been used */
+ /* Since we are here, an explicit (native) mapping has been used */
/* Use default worker */
worker_name="ajp14"; /* XXX add a directive for default */
}
@@ -1011,7 +1041,8 @@
ap_get_userdata( &end, "jk_thread_endpoint", tpool );
if(end==NULL ) {
worker->get_endpoint(worker, &end, l);
- ap_set_userdata( end , "jk_thread_endpoint", &jk_cleanup_endpoint,
tpool );
+ ap_set_userdata( end , "jk_thread_endpoint",
+ &jk_cleanup_endpoint, tpool );
}
#else
worker->get_endpoint(worker, &end, l);
@@ -1049,6 +1080,9 @@
return DECLINED;
}
+/** Create default jk_config. XXX This is mostly server-independent,
+ all servers are using something similar - should go to common.
+ */
static void *create_jk_config(apr_pool_t *p, server_rec *s)
{
jk_server_conf_t *c =
@@ -1109,7 +1143,10 @@
}
-static void copy_jk_map(apr_pool_t *p, server_rec * s, jk_map_t * src, jk_map_t *
dst)
+/** Utility - copy a map . XXX Should move to jk_map, it's generic code.
+ */
+static void copy_jk_map(apr_pool_t *p, server_rec * s, jk_map_t * src,
+ jk_map_t * dst)
{
int sz = map_size(src);
int i;
@@ -1117,14 +1154,19 @@
void *old;
char *name = map_name_at(src, i);
if(map_get(src, name, NULL) == NULL) {
- if(!map_put(dst, name, apr_pstrdup(p, map_get_string(src, name,
NULL)), &old)) {
- jk_error_exit(APLOG_MARK, APLOG_EMERG, s, p, "Memory error");
+ if(!map_put(dst, name,
+ apr_pstrdup(p, map_get_string(src, name, NULL)),
+ &old)) {
+ jk_error_exit(APLOG_MARK, APLOG_EMERG, s, p,
+ "Memory error");
}
}
}
}
-
+/** Standard apache callback, merge jk options specified in <Directory>
+ context or <Host>.
+ */
static void *merge_jk_config(apr_pool_t *p,
void *basev,
void *overridesv)
@@ -1141,24 +1183,28 @@
}
if(overrides->mountcopy) {
- copy_jk_map(p, overrides->s, base->uri_to_context,
overrides->uri_to_context);
+ copy_jk_map(p, overrides->s, base->uri_to_context,
+ overrides->uri_to_context);
copy_jk_map(p, overrides->s, base->automount, overrides->automount);
}
if(base->envvars_in_use) {
overrides->envvars_in_use = JK_TRUE;
- overrides->envvars = apr_table_overlay(p, overrides->envvars,
base->envvars);
+ overrides->envvars = apr_table_overlay(p, overrides->envvars,
+ base->envvars);
}
if(overrides->log_file && overrides->log_level >= 0) {
- if(!jk_open_file_logger(&(overrides->log), overrides->log_file,
overrides->log_level)) {
+ if(!jk_open_file_logger(&(overrides->log), overrides->log_file,
+ overrides->log_level)) {
overrides->log = NULL;
}
}
if(!uri_worker_map_alloc(&(overrides->uw_map),
overrides->uri_to_context,
overrides->log)) {
- jk_error_exit(APLOG_MARK, APLOG_EMERG, overrides->s,
overrides->s->process->pool, "Memory error");
+ jk_error_exit(APLOG_MARK, APLOG_EMERG, overrides->s,
+ overrides->s->process->pool, "Memory error");
}
if (base->secret_key)
@@ -1167,28 +1213,52 @@
return overrides;
}
+/** Standard apache callback, initialize jk.
+ */
static void jk_child_init(apr_pool_t *pconf,
server_rec *s)
{
- jk_map_t *init_map = NULL;
jk_server_conf_t *conf =
(jk_server_conf_t *)ap_get_module_config(s->module_config, &jk_module);
- if(conf->log_file && conf->log_level >= 0) {
- if(!jk_open_file_logger(&(conf->log), conf->log_file, conf->log_level)) {
+ init_jk( pconf, conf, s );
+}
+
+/** Initialize jk, using worker.properties.
+ We also use apache commands ( JkWorker, etc), but this use is
+ deprecated, as we'll try to concentrate all config in
+ workers.properties, urimap.properties, and ajp14 autoconf.
+
+ Apache config will only be used for manual override, using
+ SetHandler and normal apache directives ( but minimal jk-specific
+ stuff )
+*/
+static void init_jk( apr_pool_t *pconf, jk_server_conf_t *conf, server_rec *s ) {
+ jk_map_t *init_map = NULL;
+
+ if(conf->log_file && conf->log_level >= 0) {
+ if(!jk_open_file_logger(&(conf->log),
+ conf->log_file, conf->log_level)) {
conf->log = NULL;
} else {
main_log = conf->log;
}
}
- if(!uri_worker_map_alloc(&(conf->uw_map), conf->uri_to_context, conf->log)) {
+ if(!uri_worker_map_alloc(&(conf->uw_map),
+ conf->uri_to_context, conf->log)) {
jk_error_exit(APLOG_MARK, APLOG_EMERG, s, pconf, "Memory error");
}
if(map_alloc(&init_map)) {
if(map_read_properties(init_map, conf->worker_file)) {
- /* we add the URI->WORKER MAP since workers using AJP14 will feed it */
+ /* workers.properties can be used to set all jk
+ properties in a consistent way, independent of server */
+ /* Read and set log file, log level */
+
+ /* May be allready done in init ??? */
+ /* we add the URI->WORKER MAP since workers using AJP14
+ will feed it */
worker_env.uri_to_worker = conf->uw_map;
worker_env.virtual = "*"; /* for now */
worker_env.server_name = (char *)ap_get_server_version();
@@ -1198,7 +1268,8 @@
}
}
- jk_error_exit(APLOG_MARK, APLOG_EMERG, s, pconf, "Error while opening the
workers");
+ jk_error_exit(APLOG_MARK, APLOG_EMERG, s,
+ pconf, "Error while opening the workers");
}
static void jk_post_config(apr_pool_t *pconf,
@@ -1207,45 +1278,25 @@
server_rec *s)
{
if(!s->is_virtual) {
- jk_map_t *init_map = NULL;
jk_server_conf_t *conf =
- (jk_server_conf_t *)ap_get_module_config(s->module_config, &jk_module);
+ (jk_server_conf_t *)ap_get_module_config(s->module_config,
+ &jk_module);
if(!conf->was_initialized) {
conf->was_initialized = JK_TRUE;
- if(conf->log_file && conf->log_level >= 0) {
- if(!jk_open_file_logger(&(conf->log), conf->log_file,
conf->log_level)) {
- conf->log = NULL;
- } else {
- main_log = conf->log;
- }
- }
-
- if(!uri_worker_map_alloc(&(conf->uw_map), conf->uri_to_context,
conf->log)) {
- jk_error_exit(APLOG_MARK, APLOG_EMERG, s, plog, "Memory error");
- }
-
- if(map_alloc(&init_map)) {
- if(map_read_properties(init_map, conf->worker_file)) {
- ap_add_version_component(pconf,
JK_EXPOSED_VERSION);
- /* May be allready done in init ??? */
- worker_env.uri_to_worker = conf->uw_map;
- worker_env.server_name = (char
*)ap_get_server_version();
- if(wc_open(init_map, &worker_env, conf->log)) {
- return;
- }
- }
- }
-
- jk_error_exit(APLOG_MARK, APLOG_EMERG, s, plog, "Error while opening
the workers");
+ init_jk( pconf, conf, s );
}
}
}
+/** Use the internal mod_jk mappings to find if this is a request for
+ * tomcat and what worker to use.
+ */
static int jk_translate(request_rec *r)
{
if(!r->proxyreq) {
jk_server_conf_t *conf =
- (jk_server_conf_t *)ap_get_module_config(r->server->module_config,
&jk_module);
+ (jk_server_conf_t *)ap_get_module_config(r->server->module_config,
+ &jk_module);
if(conf) {
char *worker;
@@ -1254,11 +1305,12 @@
/* Somebody already set the handler, probably manual config
* or "native" configuration, no need for extra overhead
*/
- jk_log(conf->log, JK_LOG_DEBUG, "Manually mapped, no need to call
uri_to_worker\n");
+ jk_log(conf->log, JK_LOG_DEBUG,
+ "Manually mapped, no need to call uri_to_worker\n");
return DECLINED;
}
worker = map_uri_to_worker(conf->uw_map, r->uri,
- conf->log ? conf->log : main_log);
+ conf->log ? conf->log : main_log);
if(worker) {
r->handler=apr_pstrdup(r->pool,JK_HANDLER);