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 2001/12/13 20:05:32 UTC
cvs commit: jakarta-tomcat-connectors/jk/native2/server/apache2 jk_logger_apache2.c jk_pool_apr.c jk_service_apache2.c mod_jk.c
costin 01/12/13 11:05:31
Modified: jk/native2/server/apache2 jk_logger_apache2.c jk_pool_apr.c
jk_service_apache2.c mod_jk.c
Log:
Renamed jk_service->finalize to afterRequest ( finalize is too overloaded ).
Updates, make it compile again :-)
Revision Changes Path
1.7 +2 -0 jakarta-tomcat-connectors/jk/native2/server/apache2/jk_logger_apache2.c
Index: jk_logger_apache2.c
===================================================================
RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/server/apache2/jk_logger_apache2.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- jk_logger_apache2.c 2001/12/12 23:36:01 1.6
+++ jk_logger_apache2.c 2001/12/13 19:05:31 1.7
@@ -83,6 +83,8 @@
#include "httpd.h"
#include "http_log.h"
+#include "jk_apache2.h"
+
#define HUGE_BUFFER_SIZE (8*1024)
int JK_METHOD jk_logger_apache2_factory(jk_env_t *env, jk_pool_t *pool,
1.4 +5 -3 jakarta-tomcat-connectors/jk/native2/server/apache2/jk_pool_apr.c
Index: jk_pool_apr.c
===================================================================
RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/server/apache2/jk_pool_apr.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- jk_pool_apr.c 2001/12/06 22:50:25 1.3
+++ jk_pool_apr.c 2001/12/13 19:05:31 1.4
@@ -66,6 +66,8 @@
#include "apr_pools.h"
#include "apr_strings.h"
+#include "jk_apache2.h"
+
int jk_pool_apr_create( jk_pool_t **newPool, jk_pool_t *parent, apr_pool_t *aprPool );
int JK_METHOD jk_pool_apr_factory(jk_env_t *env,
@@ -163,9 +165,9 @@
}
/* Not used yet */
-int JK_METHOD jk_pool_apr_factory(jk_env_t *env, jk_pool_t *pool,
- void **result,
- char *type, char *name)
+int jk_pool_apr_factory(jk_env_t *env, jk_pool_t *pool,
+ void **result,
+ char *type, char *name)
{
jk_pool_t *_this=(jk_pool_t *)calloc( 1, sizeof(jk_pool_t));
1.2 +6 -7 jakarta-tomcat-connectors/jk/native2/server/apache2/jk_service_apache2.c
Index: jk_service_apache2.c
===================================================================
RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/server/apache2/jk_service_apache2.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- jk_service_apache2.c 2001/12/13 18:50:33 1.1
+++ jk_service_apache2.c 2001/12/13 19:05:31 1.2
@@ -59,7 +59,7 @@
* Description: Apache 2 plugin for Jakarta/Tomcat
* Author: Gal Shachor <sh...@il.ibm.com>
* Henri Gomez <hg...@slib.fr>
- * Version: $Revision: 1.1 $
+ * Version: $Revision: 1.2 $
*/
#include "apu_compat.h"
@@ -276,11 +276,10 @@
jk_endpoint_t *e,
void *serverObj)
{
- request_rec *r=s->ws_private;
- jk_logger_t *l=workerEnv->l;
apr_port_t port;
char *ssl_temp = NULL;
jk_workerEnv_t *workerEnv=e->worker->workerEnv;
+ jk_logger_t *l=workerEnv->l;
request_rec *r=serverObj;
/* Common initialization */
@@ -495,7 +494,7 @@
* jk shouldn't do it instead, and the user should get the
* error message !
*/
-static int jk_service_apache2_finalize(jk_ws_service_t *s )
+static void jk_service_apache2_afterRequest(jk_ws_service_t *s )
{
if (s->content_read < s->content_length ||
@@ -521,10 +520,10 @@
{
jk_ws_service_t *s = *result;
if( s==NULL ) {
- s=(jk_ws_service_t *)pool->calloc(pool, sizeof(jk_service_t));
+ s=(jk_ws_service_t *)pool->calloc(pool, sizeof(jk_ws_service_t));
}
- if(l==NULL ) {
+ if(s==NULL ) {
return JK_FALSE;
}
@@ -532,7 +531,7 @@
s->read = ws_read;
s->write = ws_write;
s->init = init_ws_service;
- s->finalize = jk_service_apache2_finalize;
+ s->afterRequest = jk_service_apache2_afterRequest;
*result=(void *)s;
1.10 +47 -455 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.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- mod_jk.c 2001/12/12 22:07:25 1.9
+++ mod_jk.c 2001/12/13 19:05:31 1.10
@@ -59,7 +59,7 @@
* Description: Apache 2 plugin for Jakarta/Tomcat *
* Author: Gal Shachor <sh...@il.ibm.com> *
* Henri Gomez <hg...@slib.fr> *
- * Version: $Revision: 1.9 $ *
+ * Version: $Revision: 1.10 $ *
***************************************************************************/
/*
@@ -93,422 +93,16 @@
#include "jk_uriMap.h"
#include "jk_requtil.h"
+#include "jk_apache2.h"
+
#define JK_HANDLER ("jakarta-servlet")
+#define JK_CTL_HANDLER ("jakarta-ctl")
#define JK_MAGIC_TYPE ("application/x-jakarta-servlet")
-#define NULL_FOR_EMPTY(x) ((x && !strlen(x)) ? NULL : x)
-
module AP_MODULE_DECLARE_DATA jk_module;
-
-static int JK_METHOD ws_start_response(jk_ws_service_t *s,
- int status,
- const char *reason,
- const char * const *header_names,
- const char * const *header_values,
- unsigned num_of_headers);
-
-static int JK_METHOD ws_read(jk_ws_service_t *s,
- void *b,
- unsigned len,
- unsigned *actually_read);
-
-static void init_jk( apr_pool_t *pconf,jk_workerEnv_t *workerEnv, server_rec *s );
-
-static int JK_METHOD ws_write(jk_ws_service_t *s,
- const void *b,
- unsigned l);
-
-
-/* ========================================================================= */
-/* JK Service step callbacks */
-/* ========================================================================= */
-
-static int JK_METHOD ws_start_response(jk_ws_service_t *s,
- int status,
- const char *reason,
- const char * const *header_names,
- const char * const *header_values,
- unsigned num_of_headers)
-{
- if(s && s->ws_private) {
- unsigned h;
- request_rec *r = (request_rec *)s->ws_private;
-
- if(!reason) {
- reason = "";
- }
- r->status = status;
- r->status_line = apr_psprintf(r->pool, "%d %s", status, reason);
-
- for(h = 0 ; h < num_of_headers ; h++) {
- if(!strcasecmp(header_names[h], "Content-type")) {
- char *tmp = apr_pstrdup(r->pool, header_values[h]);
- 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]);
- } else if(!strcasecmp(header_names[h], "Content-Length")) {
- 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]);
- } else if(!strcasecmp(header_names[h], "Last-Modified")) {
- /*
- * If the script gave us a Last-Modified header, we can't just
- * pass it on blindly because of restrictions on future values.
- */
- 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]);
- }
- }
-
- /* this NOP function was removed in apache 2.0 alpha14 */
- /* ap_send_http_header(r); */
- s->response_started = JK_TRUE;
-
- return JK_TRUE;
- }
- return JK_FALSE;
-}
-
-/*
- * Read a chunk of the request body into a buffer. Attempt to read len
- * bytes into the buffer. Write the number of bytes actually read into
- * actually_read.
- *
- * Think of this function as a method of the apache1.3-specific subclass of
- * the jk_ws_service class. Think of the *s param as a "this" or "self"
- * pointer.
- */
-static int JK_METHOD ws_read(jk_ws_service_t *s,
- 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;
- }
- }
-
- 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_TRUE;
- }
- }
- return JK_FALSE;
-}
-
-/*
- * Write a chunk of response data back to the browser. If the headers
- * haven't yet been sent over, send over default header values (Status =
- * 200, basically).
- *
- * Write len bytes from buffer b.
- *
- * Think of this function as a method of the apache1.3-specific subclass of
- * 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 ws_write(jk_ws_service_t *s,
- const void *b,
- unsigned len)
-{
- jk_logger_t *l=s->workerEnv->l;
-
- if(s && s->ws_private && b) {
- if(l) {
- /* BUFF *bf = p->r->connection->client; */
- size_t w = (size_t)l;
- size_t r = 0;
- long ll=len;
- char *bb=(char *)b;
-
- if(!s->response_started) {
- l->jkLog(l, JK_LOG_DEBUG,
- "Write without start, starting with defaults\n");
- if(!s->start_response(s, 200, NULL, NULL, NULL, 0)) {
- return JK_FALSE;
- }
- }
-
- /* 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 );
- l->jkLog(l, JK_LOG_DEBUG,
- "writing %ld (%ld) out of %ld \n",toSend, r, ll );
- ll-=CHUNK_SIZE;
- bb+=CHUNK_SIZE;
-
- if(toSend != r) {
- return JK_FALSE;
- }
-
- }
-
- /*
- * To allow server push. After writing full buffers
- */
- if(ap_rflush(s->ws_private) != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0,
- NULL, "mod_jk: Error flushing \n" );
- return JK_FALSE;
- }
-
- }
-
- return JK_TRUE;
- }
- return JK_FALSE;
-}
-
-/* ========================================================================= */
-/* Utility functions */
-/* ========================================================================= */
-
-static int get_content_length(request_rec *r)
-{
- if(r->clength > 0) {
- return r->clength;
- } else {
- char *lenp = (char *)apr_table_get(r->headers_in, "Content-Length");
-
- if(lenp) {
- int rc = atoi(lenp);
- if(rc > 0) {
- return rc;
- }
- }
- }
-
- return 0;
-}
-
-static int init_ws_service(jk_ws_service_t *s,
- jk_workerEnv_t *workerEnv)
-{
- request_rec *r=s->ws_private;
- jk_logger_t *l=workerEnv->l;
- apr_port_t port;
- char *ssl_temp = NULL;
-
- s->workerEnv=workerEnv;
- s->jvm_route = NULL; /* Used for sticky session routing */
-
- /* Copy in function pointers (which are really methods) */
- s->start_response = ws_start_response;
- s->read = ws_read;
- s->write = ws_write;
-
- s->auth_type = NULL_FOR_EMPTY(r->ap_auth_type);
- 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 = 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);
-
- /* get the real port (otherwise redirect failed) */
- apr_sockaddr_port_get(&port,r->connection->local_addr);
- s->server_port = port;
-
- s->server_software = (char *)ap_get_server_version();
-
- s->method = (char *)r->method;
- s->content_length = get_content_length(r);
- s->is_chunked = r->read_chunked;
- s->no_more_chunks = 0;
- s->query_string = r->args;
-
- /*
- * The 2.2 servlet spec errata says the uri from
- * HttpServletRequest.getRequestURI() should remain encoded.
- * [http://java.sun.com/products/servlet/errata_042700.html]
- *
- * We use JkOptions to determine which method to be used
- *
- * ap_escape_uri is the latest recommanded but require
- * some java decoding (in TC 3.3 rc2)
- *
- * unparsed_uri is used for strict compliance with spec and
- * old Tomcat (3.2.3 for example)
- *
- * uri is use for compatibilty with mod_rewrite with old Tomcats
- */
-
- 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;
- }
- }
-
- break;
-
- case JK_OPT_FWDURICOMPAT :
- s->req_uri = r->uri;
- break;
-
- case JK_OPT_FWDURIESCAPED :
- s->req_uri = ap_escape_uri(r->pool, r->uri);
- break;
-
- default :
- return JK_FALSE;
- }
-
- 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_session = NULL;
- s->ssl_key_size = -1; /* required by Servlet 2.3 Api, added in jtc */
-
- if(workerEnv->ssl_enable || workerEnv->envvars_in_use) {
- ap_add_common_vars(r);
-
- if(workerEnv->ssl_enable) {
- ssl_temp =
- (char *)apr_table_get(r->subprocess_env,
- workerEnv->https_indicator);
- if(ssl_temp && !strcasecmp(ssl_temp, "on")) {
- s->is_ssl = JK_TRUE;
- s->ssl_cert =
- (char *)apr_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 *)apr_table_get(r->subprocess_env,
- workerEnv->cipher_indicator);
- s->ssl_session =
- (char *)apr_table_get(r->subprocess_env,
- workerEnv->session_indicator);
-
- if (workerEnv->options & JK_OPT_FWDKEYSIZE) {
- /* Servlet 2.3 API */
- ssl_temp = (char *)apr_table_get(r->subprocess_env,
- workerEnv->key_size_indicator);
- if (ssl_temp)
- s->ssl_key_size = atoi(ssl_temp);
- }
- }
- }
-
- if(workerEnv->envvars_in_use) {
- const apr_array_header_t *t = apr_table_elts(workerEnv->envvars);
- 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);
-
- 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);
- if(!s->attributes_values[i]) {
- s->attributes_values[i] = elts[i].val;
- }
- }
-
- s->num_attributes = t->nelts;
- }
- }
- }
-
- s->headers_names = NULL;
- s->headers_values = NULL;
- s->num_headers = 0;
- if(r->headers_in && apr_table_elts(r->headers_in)) {
- int need_content_length_header = (!s->is_chunked && s->content_length == 0) ? JK_TRUE : JK_FALSE;
- const apr_array_header_t *t = apr_table_elts(r->headers_in);
- if(t && t->nelts) {
- int i;
- apr_table_entry_t *elts = (apr_table_entry_t *)t->elts;
- s->num_headers = t->nelts;
- /* allocate an extra header slot in case we need to add a content-length header */
- s->headers_names = apr_palloc(r->pool, sizeof(char *) * (t->nelts + 1));
- s->headers_values = apr_palloc(r->pool, sizeof(char *) * (t->nelts + 1));
- if(!s->headers_names || !s->headers_values)
- return JK_FALSE;
- for(i = 0 ; i < t->nelts ; i++) {
- char *hname = apr_pstrdup(r->pool, elts[i].key);
- s->headers_values[i] = apr_pstrdup(r->pool, elts[i].val);
- s->headers_names[i] = hname;
- while(*hname) {
- *hname = tolower(*hname);
- hname++;
- }
- if(need_content_length_header &&
- !strncmp(s->headers_values[i],"content-length",14)) {
- need_content_length_header = JK_FALSE;
- }
- }
- /* Add a content-length = 0 header if needed.
- * Ajp13 assumes an absent content-length header means an unknown,
- * but non-zero length body.
- */
- if(need_content_length_header) {
- s->headers_names[s->num_headers] = "content-length";
- s->headers_values[s->num_headers] = "0";
- s->num_headers++;
- }
- }
- /* Add a content-length = 0 header if needed.*/
- else if (need_content_length_header) {
- s->headers_names = apr_palloc(r->pool, sizeof(char *));
- s->headers_values = apr_palloc(r->pool, sizeof(char *));
- if(!s->headers_names || !s->headers_values)
- return JK_FALSE;
- s->headers_names[0] = "content-length";
- s->headers_values[0] = "0";
- s->num_headers++;
- }
- }
-
- return JK_TRUE;
-}
-
-
-/* */
/* ==================== Options setters ==================== */
-
-
/*
* The JK module command processors
*
@@ -1021,11 +615,16 @@
/*
* Options to tune mod_jk configuration
* for now we understand :
- * +ForwardSSLKeySize => Forward SSL Key Size, to follow 2.3 specs but may broke old TC 3.2
- * -ForwardSSLKeySize => Don't Forward SSL Key Size, will make mod_jk works with all TC release
- * ForwardURICompat => Forward URI normally, less spec compliant but mod_rewrite compatible (old TC)
- * ForwardURICompatUnparsed => Forward URI as unparsed, spec compliant but broke mod_rewrite (old TC)
- * ForwardURIEscaped => Forward URI escaped and Tomcat (3.3 rc2) stuff will do the decoding part
+ * +ForwardSSLKeySize => Forward SSL Key Size, to follow 2.3
+ specs but may broke old TC 3.2
+ * -ForwardSSLKeySize => Don't Forward SSL Key Size, will make
+ mod_jk works with all TC release
+ * ForwardURICompat => Forward URI normally, less spec compliant
+ but mod_rewrite compatible (old TC)
+ * ForwardURICompatUnparsed => Forward URI as unparsed, spec compliant
+ but broke mod_rewrite (old TC)
+ * ForwardURIEscaped => Forward URI escaped and Tomcat (3.3 rc2)
+ stuff will do the decoding part
*/
AP_INIT_RAW_ARGS(
"JkOptions", jk_set_options, NULL, RSRC_CONF,
@@ -1064,12 +663,6 @@
return add;
}
-int jk_logger_apache2_factory(jk_env_t *env,
- jk_pool_t *pool,
- void **result,
- char *type,
- char *name);
-
/** Create default jk_config. XXX This is mostly server-independent,
all servers are using something similar - should go to common.
@@ -1298,17 +891,41 @@
return 0;
}
+/** handler for 'ctl' requests.
+ */
+static int jk_ctl_handler(request_rec *r)
+{
+ jk_workerEnv_t *workerEnv;
+ jk_logger_t *l;
+
+ 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;
+
+ /* Find what 'ctl' request we have */
+
+
+ /* 'Ping' clt - update the status for all workers, send ping
+ message. This will update 'up/down' state and give tomcat
+ an option to update the mapping tables. The ctl handler
+ will output an xhtml status page */
+
+ return DECLINED;
+}
/** Main service method, called to forward a request to tomcat
*/
static int jk_handler(request_rec *r)
{
const char *worker_name;
- jk_logger_t *l;
- jk_workerEnv_t *workerEnv;
+ jk_logger_t *l=NULL;
int rc;
jk_worker_t *worker=NULL;
jk_endpoint_t *end = NULL;
jk_uriEnv_t *uriEnv;
+ jk_workerEnv_t *workerEnv;
uriEnv=ap_get_module_config( r->request_config, &jk_module );
@@ -1322,8 +939,8 @@
return HTTP_INTERNAL_SERVER_ERROR;
}
- workerEnv = (jk_workerEnv_t *)ap_get_module_config(r->server->module_config,
- &jk_module);
+ workerEnv=(jk_workerEnv_t *)ap_get_module_config(r->server->module_config,
+ &jk_module);
l = workerEnv->l;
/* Set up r->read_chunked flags for chunked encoding, if present */
@@ -1356,40 +973,15 @@
jk_ws_service_t sOnStack;
jk_ws_service_t *s=&sOnStack;
int is_recoverable_error = JK_FALSE;
-
- jk_requtil_initRequest(s);
- s->workerEnv=workerEnv;
- s->response_started = JK_FALSE;
- s->read_body_started = JK_FALSE;
- s->ws_private = r;
- s->pool=end->cPool;
+ jk_service_apache2_factory( workerEnv->env, end->cPool, &s,
+ "service", "apache2");
- rc=init_ws_service(s, workerEnv);
+ s->init( s, end, r );
rc = end->service(end, s, l, &is_recoverable_error);
-
- if (s->content_read < s->content_length ||
- (s->is_chunked && ! s->no_more_chunks)) {
-
- /*
- * If the servlet engine didn't consume all of the
- * request data, consume and discard all further
- * characters left to read from client
- *
- * XXX Is it the right thing to do ????? Why spend the
- * bandwith, the servlet decided not to read the POST then
- * jk shouldn't do it instead, and the user should get the
- * error message !
- */
- char *buff = apr_palloc(r->pool, 2048);
- if (buff != NULL) {
- int rd;
- while ((rd = ap_get_client_block(r, buff, 2048)) > 0) {
- s->content_read += rd;
- }
- }
- }
+
+ s->afterRequest(s);
}
end->done(&end, l);
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>