📄 jk_ajp14.c
字号:
jk_log(l, JK_LOG_ERROR,
"failed appending the UNHANDLED MESSAGE");
JK_TRACE_EXIT(l);
return JK_FALSE;
}
JK_TRACE_EXIT(l);
return JK_TRUE;
}
/*
* Build the Context Query Cmd (autoconf)
*
* +--------------------------+---------------------------------+
* | CONTEXT QRY CMD (1 byte) | VIRTUAL HOST NAME (CString (*)) |
* +--------------------------+---------------------------------+
*
*/
int ajp14_marshal_context_query_into_msgb(jk_msg_buf_t *msg,
char *virtual, jk_logger_t *l)
{
JK_TRACE_ENTER(l);
/* To be on the safe side */
jk_b_reset(msg);
/*
* CONTEXT QUERY CMD
*/
if (jk_b_append_byte(msg, AJP14_CONTEXT_QRY_CMD)) {
JK_TRACE_EXIT(l);
return JK_FALSE;
}
/*
* VIRTUAL HOST CSTRING
*/
if (jk_b_append_string(msg, virtual)) {
jk_log(l, JK_LOG_ERROR,
"failed appending the virtual host string");
JK_TRACE_EXIT(l);
return JK_FALSE;
}
JK_TRACE_EXIT(l);
return JK_TRUE;
}
/*
* Decode the Context Info Cmd (Autoconf)
*
* 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] | NEXT CTX. |
* +---------------------------+---------------------------------+----------------------------+-------------------------------+-----------+
*/
int ajp14_unmarshal_context_info(jk_msg_buf_t *msg,
jk_context_t *c, jk_logger_t *l)
{
char *vname;
char *cname;
char *uri;
vname = (char *)jk_b_get_string(msg);
JK_TRACE_ENTER(l);
jk_log(l, JK_LOG_DEBUG,
"get virtual %s for virtual %s",
vname, c->virt);
if (!vname) {
jk_log(l, JK_LOG_ERROR,
"can't get virtual hostname");
JK_TRACE_EXIT(l);
return JK_FALSE;
}
/* Check if we get the correct virtual host */
if (c->virt != NULL && vname != NULL && strcmp(c->virt, 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,
"can't malloc virtual hostname");
JK_TRACE_EXIT(l);
return JK_FALSE;
}
}
for (;;) {
cname = (char *)jk_b_get_string(msg);
if (!cname) {
jk_log(l, JK_LOG_ERROR,
"can't get context");
JK_TRACE_EXIT(l);
return JK_FALSE;
}
jk_log(l, JK_LOG_DEBUG,
"get context %s for virtual %s",
cname, vname);
/* grab all contexts up to empty one which indicate end of contexts */
if (!strlen(cname))
break;
/* create new context base (if needed) */
if (context_add_base(c, cname) == JK_FALSE) {
jk_log(l, JK_LOG_ERROR,
"can't add/set context %s",
cname);
JK_TRACE_EXIT(l);
return JK_FALSE;
}
for (;;) {
uri = (char *)jk_b_get_string(msg);
if (!uri) {
jk_log(l, JK_LOG_ERROR,
"can't get URI");
JK_TRACE_EXIT(l);
return JK_FALSE;
}
if (!strlen(uri)) {
jk_log(l, JK_LOG_DEBUG, "No more URI for context %s", cname);
break;
}
jk_log(l, JK_LOG_INFO,
"Got URI (%s) for virtualhost %s and context %s", uri,
vname, cname);
if (context_add_uri(c, cname, uri) == JK_FALSE) {
jk_log(l, JK_LOG_ERROR,
"can't add/set uri (%s) for context %s",
uri, cname);
JK_TRACE_EXIT(l);
return JK_FALSE;
}
}
}
JK_TRACE_EXIT(l);
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 (*)) | .. |
* +----------------------------+----------------------------------+----------------------------+----+
*
*/
int ajp14_marshal_context_state_into_msgb(jk_msg_buf_t *msg,
jk_context_t *c,
char *cname, jk_logger_t *l)
{
jk_context_item_t *ci;
int i;
JK_TRACE_ENTER(l);
/* To be on the safe side */
jk_b_reset(msg);
/*
* CONTEXT STATE CMD
*/
if (jk_b_append_byte(msg, AJP14_CONTEXT_STATE_CMD)) {
JK_TRACE_EXIT(l);
return JK_FALSE;
}
/*
* VIRTUAL HOST CSTRING
*/
if (jk_b_append_string(msg, c->virt)) {
jk_log(l, JK_LOG_ERROR,
"failed appending the virtual host string");
JK_TRACE_EXIT(l);
return JK_FALSE;
}
if (cname) {
ci = context_find_base(c, cname);
if (!ci) {
jk_log(l, JK_LOG_ERROR,
"unknown context %s",
cname);
JK_TRACE_EXIT(l);
return JK_FALSE;
}
/*
* CONTEXT CSTRING
*/
if (jk_b_append_string(msg, cname)) {
jk_log(l, JK_LOG_ERROR,
"failed appending the context string %s",
cname);
JK_TRACE_EXIT(l);
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,
"failed appending the context string %s",
c->contexts[i]->cbase);
JK_TRACE_EXIT(l);
return JK_FALSE;
}
}
}
/* End of context list, an empty string */
if (jk_b_append_string(msg, "")) {
jk_log(l, JK_LOG_ERROR,
"failed appending end of contexts");
JK_TRACE_EXIT(l);
return JK_FALSE;
}
JK_TRACE_EXIT(l);
return JK_TRUE;
}
/*
* Decode the Context State Reply Cmd
*
* 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 *c, jk_logger_t *l)
{
char *vname;
char *cname;
jk_context_item_t *ci;
JK_TRACE_ENTER(l);
/* get virtual name */
vname = (char *)jk_b_get_string(msg);
if (!vname) {
jk_log(l, JK_LOG_ERROR,
"can't get virtual hostname");
JK_TRACE_EXIT(l);
return JK_FALSE;
}
/* Check if we speak about the correct virtual */
if (strcmp(c->virt, vname)) {
jk_log(l, JK_LOG_ERROR,
"incorrect virtual %s instead of %s",
vname, c->virt);
JK_TRACE_EXIT(l);
return JK_FALSE;
}
for (;;) {
/* get context name */
cname = (char *)jk_b_get_string(msg);
if (!cname) {
jk_log(l, JK_LOG_ERROR,
"can't get context");
JK_TRACE_EXIT(l);
return JK_FALSE;
}
if (!strlen(cname))
break;
ci = context_find_base(c, cname);
if (!ci) {
jk_log(l, JK_LOG_ERROR,
"unknow context %s for virtual %s",
cname, vname);
JK_TRACE_EXIT(l);
return JK_FALSE;
}
ci->status = jk_b_get_int(msg);
if (JK_IS_DEBUG_LEVEL(l))
jk_log(l, JK_LOG_DEBUG,
"updated context %s to state %d",
cname, ci->status);
}
JK_TRACE_EXIT(l);
return JK_TRUE;
}
/*
* Decode the Context Update Cmd
*
* +-----------------------------+---------------------------------+----------------------------+------------------+
* | CONTEXT UPDATE CMD (1 byte) | VIRTUAL HOST NAME (CString (*)) | CONTEXT NAME (CString (*)) | UP/DOWN (1 byte) |
* +-----------------------------+---------------------------------+----------------------------+------------------+
*
*/
int ajp14_unmarshal_context_update_cmd(jk_msg_buf_t *msg,
jk_context_t *c, jk_logger_t *l)
{
int rc;
JK_TRACE_ENTER(l);
rc = ajp14_unmarshal_context_state_reply(msg, c, l);
JK_TRACE_EXIT(l);
return rc;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -