📄 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 + -