You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by hg...@apache.org on 2001/06/29 16:53:14 UTC
cvs commit: jakarta-tomcat-connectors/jk/native/common jk_ajp14.c jk_ajp14.h
hgomez 01/06/29 07:53:14
Modified: jk/native/common jk_ajp14.c jk_ajp14.h
Log:
Autoconf works in progress in Ajp14 protocol handler
The key of contexts is the virtual server, we should/could
handle N contexts by M vrituals servers
Revision Changes Path
1.10 +138 -83 jakarta-tomcat-connectors/jk/native/common/jk_ajp14.c
Index: jk_ajp14.c
===================================================================
RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_ajp14.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- jk_ajp14.c 2001/06/22 08:33:56 1.9
+++ jk_ajp14.c 2001/06/29 14:53:13 1.10
@@ -58,7 +58,7 @@
/***************************************************************************
* Description: Next generation bi-directional protocol handler. *
* Author: Henri Gomez <hg...@slib.fr> *
- * Version: $Revision: 1.9 $ *
+ * Version: $Revision: 1.10 $ *
***************************************************************************/
@@ -399,89 +399,104 @@
* The Autoconf feature of AJP14, let us know which URL/URI could
* be handled by the servlet-engine
*
- * +---------------------------+---------------------------------+----------------------------+-------------------------------+
- * | CONTEXT INFO CMD (1 byte) | VIRTUAL HOST NAME (CString (*)) | CONTEXT NAME (CString (*)) | URL1 [\n] URL2 [\n] URL3 [\n] |
- * +---------------------------+---------------------------------+----------------------------+-------------------------------+
- *
+ * +---------------------------+---------------------------------+----------------------------+-------------------------------+-----------+
+ * | CONTEXT INFO CMD (1 byte) | VIRTUAL HOST NAME (CString (*)) | CONTEXT NAME (CString (*)) | URL1 [\n] URL2 [\n] URL3 [\n] | NEXT CTX. |
+ * +---------------------------+---------------------------------+----------------------------+-------------------------------+-----------+
*/
int ajp14_unmarshal_context_info(jk_msg_buf_t *msg,
- jk_context_t *context,
+ jk_context_t *c,
jk_logger_t *l)
{
- char *sname;
- /* char *old; unused */
+ char *vname;
+ char *cname;
+ char *uri;
int i;
- sname = (char *)jk_b_get_string(msg);
+ vname = (char *)jk_b_get_string(msg);
- if (! sname) {
+ if (! vname) {
jk_log(l, JK_LOG_ERROR, "Error ajp14_unmarshal_context_info - can't get virtual hostname\n");
return JK_FALSE;
}
- if (context->virtual) /* take care of removing previously allocated data */
- free(context->virtual);
+ /* Check if we get the correct virtual host */
+ if (strcmp(c->virtual, vname)) {
+ /* set the virtual name, better to add to a virtual list ? */
+
+ if (context_set_virtual(c, vname) == JK_FALSE) {
+ jk_log(l, JK_LOG_ERROR, "Error ajp14_unmarshal_context_info - can't malloc virtual hostname\n");
+ return JK_FALSE;
+ }
+ }
- context->virtual = strdup(sname);
+ for (;;) {
+
+ cname = (char *)jk_b_get_string(msg);
- if (! context->virtual) {
- jk_log(l, JK_LOG_ERROR, "Error ajp14_unmarshal_context_info - can't malloc virtual hostname\n");
- return JK_FALSE;
- }
+ if (! cname) {
+ jk_log(l, JK_LOG_ERROR, "Error ajp14_unmarshal_context_info - can't get context\n");
+ return JK_FALSE;
+ }
- sname = (char *)jk_b_get_string(msg);
+ /* grab all contexts up to empty one which indicate end of contexts */
+ if (! strlen(cname))
+ break;
- if (! sname) {
- jk_log(l, JK_LOG_ERROR, "Error ajp14_unmarshal_context_info - can't get context\n");
- return JK_FALSE;
- }
+ /* create new context base (if needed) */
- if (context->cbase) /* take care of removing previously allocated data */
- free(context->cbase);
+ if (context_add_base(c, cname) == JK_FALSE) {
+ jk_log(l, JK_LOG_ERROR, "Error ajp14_unmarshal_context_info - can't add/set context %s\n", cname);
+ return JK_FALSE;
+ }
- context->cbase = strdup(sname);
-
- if (! context->cbase) {
- jk_log(l, JK_LOG_ERROR, "Error ajp14_unmarshal_context_info - can't malloc context\n");
- return JK_FALSE;
- }
+ for (;;) {
- for (i = 1;; i++) {
+ uri = (char *)jk_b_get_string(msg);
- sname = (char *)jk_b_get_string(msg);
+ if (!uri) {
+ jk_log(l, JK_LOG_ERROR, "Error ajp14_unmarshal_context_info - can't get URI\n");
+ return JK_FALSE;
+ }
- if (!sname) {
- jk_log(l, JK_LOG_ERROR, "Error ajp14_unmarshal_context_info - can't get URL\n");
- return JK_FALSE;
- }
+ if (! strlen(uri)) {
+ jk_log(l, JK_LOG_DEBUG, "No more URI/URL for context %s", cname);
+ break;
+ }
- if (! strlen(sname)) {
- jk_log(l, JK_LOG_INFO, "No more URI/URL (%d)", i);
- break;
- }
+ jk_log(l, JK_LOG_INFO, "Got URL/URI (%s) for virtualhost %s and context %s", uri, vname, cname);
- jk_log(l, JK_LOG_INFO, "Got URL (%s) for virtualhost %s and base context %s", sname, context->virtual, context->cbase);
- context_add_uri(context, sname);
+ if (context_add_uri(c, cname, uri) == JK_FALSE) {
+ jk_log(l, JK_LOG_ERROR, "Error ajp14_unmarshal_context_info - can't add/set uri (%s) for context %s\n", uri, cname);
+ return JK_FALSE;
+ }
+ }
}
-
+
return JK_TRUE;
}
/*
* Build the Context State Query Cmd
+ *
+ * We send the list of contexts where we want to know state, empty string end context list*
+ * If cname is set, only ask about THIS context
*
- * +----------------------------+----------------------------------+----------------------------+
- * | CONTEXT STATE CMD (1 byte) | VIRTUAL HOST NAME (CString (*)) | CONTEXT NAME (CString (*)) |
- * +----------------------------+----------------------------------+----------------------------+
+ * +----------------------------+----------------------------------+----------------------------+----+
+ * | CONTEXT STATE CMD (1 byte) | VIRTUAL HOST NAME (CString (*)) | CONTEXT NAME (CString (*)) | .. |
+ * +----------------------------+----------------------------------+----------------------------+----+
*
*/
int ajp14_marshal_context_state_into_msgb(jk_msg_buf_t *msg,
- jk_context_t *context,
+ jk_context_t *c,
+ char *cname,
jk_logger_t *l)
{
+ jk_context_item_t *ci;
+ int i;
+
jk_log(l, JK_LOG_DEBUG, "Into ajp14_marshal_context_state_into_msgb\n");
/* To be on the safe side */
@@ -496,19 +511,50 @@
/*
* VIRTUAL HOST CSTRING
*/
- if (jk_b_append_string(msg, context->virtual)) {
+ if (jk_b_append_string(msg, c->virtual)) {
jk_log(l, JK_LOG_ERROR, "Error ajp14_marshal_context_state_into_msgb - Error appending the virtual host string\n");
return JK_FALSE;
}
- /*
- * CONTEXT CSTRING
- */
- if (jk_b_append_string(msg, context->cbase)) {
- jk_log(l, JK_LOG_ERROR, "Error ajp14_marshal_context_state_into_msgb - Error appending the context string\n");
+ if (cname) {
+
+ ci = context_find_base(c, cname);
+
+ if (! ci) {
+ jk_log(l, JK_LOG_ERROR, "Error ajp14_marshal_context_state_into_msgb - unknow context %s\n", cname);
+ return JK_FALSE;
+ }
+
+ /*
+ * CONTEXT CSTRING
+ */
+
+ if (jk_b_append_string(msg, c->contexts[i]->cbase )) {
+ jk_log(l, JK_LOG_ERROR, "Error ajp14_marshal_context_state_into_msgb - Error appending the context string\n");
+ return JK_FALSE;
+ }
+ }
+ else { /* Grab all contexts name */
+
+ for (i = 0; i < c->size; i++) {
+
+ /*
+ * CONTEXT CSTRING
+ */
+ if (jk_b_append_string(msg, c->contexts[i]->cbase )) {
+ jk_log(l, JK_LOG_ERROR, "Error ajp14_marshal_context_state_into_msgb - Error appending the context string\n");
+ return JK_FALSE;
+ }
+ }
+ }
+
+ /* End of context list, an empty string */
+
+ if (jk_b_append_string(msg, "")) {
+ jk_log(l, JK_LOG_ERROR, "Error ajp14_marshal_context_state_into_msgb - Error appending end of contexts\n");
return JK_FALSE;
}
-
+
return JK_TRUE;
}
@@ -516,53 +562,62 @@
/*
* Decode the Context State Reply Cmd
*
- * +----------------------------------+---------------------------------+----------------------------+------------------+
- * | CONTEXT STATE REPLY CMD (1 byte) | VIRTUAL HOST NAME (CString (*)) | CONTEXT NAME (CString (*)) | UP/DOWN (1 byte) |
- * +----------------------------------+---------------------------------+----------------------------+------------------+
+ * We get update of contexts list, empty string end context list*
*
+ * +----------------------------------+---------------------------------+----------------------------+------------------+----+
+ * | CONTEXT STATE REPLY CMD (1 byte) | VIRTUAL HOST NAME (CString (*)) | CONTEXT NAME (CString (*)) | UP/DOWN (1 byte) | .. |
+ * +----------------------------------+---------------------------------+----------------------------+------------------+----+
+ *
*/
int ajp14_unmarshal_context_state_reply(jk_msg_buf_t *msg,
- jk_context_t *context,
+ jk_context_t *c,
jk_logger_t *l)
{
- char *sname;
+ char *vname;
+ char *cname;
+ jk_context_item_t *ci;
- sname = (char *)jk_b_get_string(msg);
+ /* get virtual name */
+ vname = (char *)jk_b_get_string(msg);
- if (! sname) {
+ if (! vname) {
jk_log(l, JK_LOG_ERROR, "Error ajp14_unmarshal_context_state_reply - can't get virtual hostname\n");
return JK_FALSE;
}
-
- if (context->virtual) /* take care of removing previously allocated data */
- free(context->virtual);
- context->virtual = strdup(sname);
-
- if (! context->virtual) {
- jk_log(l, JK_LOG_ERROR, "Error ajp14_unmarshal_context_state_reply - can't malloc virtual hostname\n");
+ /* Check if we speak about the correct virtual */
+ if (strcmp(c->virtual, vname)) {
+ jk_log(l, JK_LOG_ERROR, "Error ajp14_unmarshal_context_state_reply - incorrect virtual %s instead of %s\n",
+ vname, c->virtual);
return JK_FALSE;
}
+
+ for (;;) {
- sname = (char *)jk_b_get_string(msg);
+ /* get context name */
+ cname = (char *)jk_b_get_string(msg);
- if (! sname) {
- jk_log(l, JK_LOG_ERROR, "Error ajp14_unmarshal_context_state_reply - can't get context\n");
- return JK_FALSE;
- }
+ if (! cname) {
+ jk_log(l, JK_LOG_ERROR, "Error ajp14_unmarshal_context_state_reply - can't get context\n");
+ return JK_FALSE;
+ }
- if (context->cbase) /* take care of removing previously allocated data */
- free(context->cbase);
+ if (! strlen(cname))
+ break;
- context->cbase = strdup(sname);
+ ci = context_find_base(c, cname);
- if (! context->cbase) {
- jk_log(l, JK_LOG_ERROR, "Error ajp14_unmarshal_context_state_reply - can't malloc context\n");
- return JK_FALSE;
- }
+ if (! ci) {
+ jk_log(l, JK_LOG_ERROR, "Error ajp14_unmarshal_context_state_reply - unknow context %s for virtual %s\n",
+ cname, vname);
+ return JK_FALSE;
+ }
- context->status = jk_b_get_int(msg);
+ ci->status = jk_b_get_int(msg);
+
+ jk_log(l, JK_LOG_DEBUG, "ajp14_unmarshal_context_state_reply - updated context %s to state %d\n", cname, ci->status);
+ }
return JK_TRUE;
}
@@ -577,9 +632,9 @@
*/
int ajp14_unmarshal_context_update_cmd(jk_msg_buf_t *msg,
- jk_context_t *context,
+ jk_context_t *c,
jk_logger_t *l)
{
- return (ajp14_unmarshal_context_state_reply(msg, context, l));
+ return (ajp14_unmarshal_context_state_reply(msg, c, l));
}
1.6 +2 -1 jakarta-tomcat-connectors/jk/native/common/jk_ajp14.h
Index: jk_ajp14.h
===================================================================
RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_ajp14.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- jk_ajp14.h 2001/06/18 14:15:25 1.5
+++ jk_ajp14.h 2001/06/29 14:53:14 1.6
@@ -58,7 +58,7 @@
/***************************************************************************
* Description: Next generation bi-directional protocol handler. *
* Author: Henri Gomez <hg...@slib.fr> *
- * Version: $Revision: 1.5 $ *
+ * Version: $Revision: 1.6 $ *
***************************************************************************/
#ifndef JK_AJP14_H
#define JK_AJP14_H
@@ -335,6 +335,7 @@
int ajp14_marshal_context_state_into_msgb(jk_msg_buf_t *msg,
jk_context_t *context,
+ char *cname,
jk_logger_t *l);
int ajp14_unmarshal_context_state_reply(jk_msg_buf_t *msg,