⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jk_ajp14.c

📁 jboss与apache集成的中间件,详情请参看文档说明.
💻 C
📖 第 1 页 / 共 2 页
字号:
/* *  Copyright 1999-2004 The Apache Software Foundation * *  Licensed under the Apache License, Version 2.0 (the "License"); *  you may not use this file except in compliance with the License. *  You may obtain a copy of the License at * *      http://www.apache.org/licenses/LICENSE-2.0 * *  Unless required by applicable law or agreed to in writing, software *  distributed under the License is distributed on an "AS IS" BASIS, *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *  See the License for the specific language governing permissions and *  limitations under the License. *//*************************************************************************** * Description: Next generation bi-directional protocol handler.           * * Author:      Henri Gomez <hgomez@apache.org>                            * * Version:     $Revision: 1.27 $                                          * ***************************************************************************/#include "jk_global.h"#include "jk_util.h"#include "jk_map.h"#include "jk_ajp_common.h"#include "jk_ajp14.h"#include "jk_md5.h"/* * Compute the MD5 with ENTROPY / SECRET KEY */void ajp14_compute_md5(jk_login_service_t *s, jk_logger_t *l){    JK_TRACE_ENTER(l);    jk_md5((const unsigned char *)s->entropy,           (const unsigned char *)s->secret_key, s->computed_key);    if (JK_IS_DEBUG_LEVEL(l))        jk_log(l, JK_LOG_DEBUG, "(%s/%s) -> (%s)",               s->entropy, s->secret_key, s->computed_key);    JK_TRACE_EXIT(l);}/* * Build the Login Init Command * * +-------------------------+---------------------------+---------------------------+ * | LOGIN INIT CMD (1 byte) | NEGOCIATION DATA (32bits) | WEB SERVER INFO (CString) | * +-------------------------+---------------------------+---------------------------+ * */int ajp14_marshal_login_init_into_msgb(jk_msg_buf_t *msg,                                       jk_login_service_t *s, jk_logger_t *l){    JK_TRACE_ENTER(l);    /* To be on the safe side */    jk_b_reset(msg);    /*     * LOGIN     */    if (jk_b_append_byte(msg, AJP14_LOGINIT_CMD)) {        JK_TRACE_EXIT(l);        return JK_FALSE;    }    /*     * NEGOCIATION FLAGS     */    if (jk_b_append_long(msg, s->negociation)) {        JK_TRACE_EXIT(l);        return JK_FALSE;    }    /*     * WEB-SERVER NAME     */    if (jk_b_append_string(msg, s->web_server_name)) {        jk_log(l, JK_LOG_ERROR,               "failed appending the web_server_name string");        JK_TRACE_EXIT(l);        return JK_FALSE;    }    JK_TRACE_EXIT(l);    return JK_TRUE;}/* * Decode the Login Seed Command * * +-------------------------+---------------------------+ * | LOGIN SEED CMD (1 byte) | MD5 of entropy (32 chars) | * +-------------------------+---------------------------+ * */int ajp14_unmarshal_login_seed(jk_msg_buf_t *msg,                               jk_login_service_t *s, jk_logger_t *l){    JK_TRACE_ENTER(l);    if (jk_b_get_bytes        (msg, (unsigned char *)s->entropy, AJP14_ENTROPY_SEED_LEN) < 0) {        jk_log(l, JK_LOG_ERROR,               "can't get seed");        JK_TRACE_EXIT(l);        return JK_FALSE;    }    s->entropy[AJP14_ENTROPY_SEED_LEN] = 0;     /* Just to have a CString */    JK_TRACE_EXIT(l);    return JK_TRUE;}/* * Build the Login Computed Command * * +-------------------------+---------------------------------------+ * | LOGIN COMP CMD (1 byte) | MD5 of RANDOM + SECRET KEY (32 chars) | * +-------------------------+---------------------------------------+ * */int ajp14_marshal_login_comp_into_msgb(jk_msg_buf_t *msg,                                       jk_login_service_t *s, jk_logger_t *l){    JK_TRACE_ENTER(l);    /* To be on the safe side */    jk_b_reset(msg);    /*     * LOGIN     */    if (jk_b_append_byte(msg, AJP14_LOGCOMP_CMD)) {        JK_TRACE_EXIT(l);        return JK_FALSE;    }    /*     * COMPUTED-SEED     */    if (jk_b_append_bytes        (msg, (const unsigned char *)s->computed_key,         AJP14_COMPUTED_KEY_LEN)) {        jk_log(l, JK_LOG_ERROR,               "failed appending the COMPUTED MD5 bytes");        JK_TRACE_EXIT(l);        return JK_FALSE;    }    JK_TRACE_EXIT(l);    return JK_TRUE;}/* * Decode the LogOk Command * * +--------------------+------------------------+-------------------------------+ * | LOGOK CMD (1 byte) | NEGOCIED DATA (32bits) | SERVLET ENGINE INFO (CString) | * +--------------------+------------------------+-------------------------------+ * */int ajp14_unmarshal_log_ok(jk_msg_buf_t *msg,                           jk_login_service_t *s, jk_logger_t *l){    unsigned long nego;    char *sname;    JK_TRACE_ENTER(l);    nego = jk_b_get_long(msg);    if (nego == 0xFFFFFFFF) {        jk_log(l, JK_LOG_ERROR,               "can't get negociated data");        JK_TRACE_EXIT(l);        return JK_FALSE;    }    sname = (char *)jk_b_get_string(msg);    if (!sname) {        jk_log(l, JK_LOG_ERROR,               "can't get servlet engine name");        JK_TRACE_EXIT(l);        return JK_FALSE;    }    if (s->servlet_engine_name) /* take care of removing previously allocated data */        free(s->servlet_engine_name);    s->servlet_engine_name = strdup(sname);    if (!s->servlet_engine_name) {        jk_log(l, JK_LOG_ERROR,               "can't malloc servlet engine name");        JK_TRACE_EXIT(l);        return JK_FALSE;    }    JK_TRACE_EXIT(l);    return JK_TRUE;}/* * Decode the Log Nok Command  * * +---------------------+-----------------------+ * | LOGNOK CMD (1 byte) | FAILURE CODE (32bits) | * +---------------------+-----------------------+ * */int ajp14_unmarshal_log_nok(jk_msg_buf_t *msg, jk_logger_t *l){    unsigned long status;    JK_TRACE_ENTER(l);    status = jk_b_get_long(msg);    if (status == 0xFFFFFFFF) {        jk_log(l, JK_LOG_ERROR,               "can't get failure code");        JK_TRACE_EXIT(l);        return JK_FALSE;    }    jk_log(l, JK_LOG_INFO, "Can't Log with servlet engine - code %08lx",           status);    JK_TRACE_EXIT(l);    return JK_TRUE;}/*  * Build the Shutdown Cmd * * +-----------------------+---------------------------------------+ * | SHUTDOWN CMD (1 byte) | MD5 of RANDOM + SECRET KEY (32 chars) | * +-----------------------+---------------------------------------+ * */int ajp14_marshal_shutdown_into_msgb(jk_msg_buf_t *msg,                                     jk_login_service_t *s, jk_logger_t *l){    JK_TRACE_ENTER(l);    /* To be on the safe side */    jk_b_reset(msg);    /*     * SHUTDOWN CMD     */    if (jk_b_append_byte(msg, AJP14_SHUTDOWN_CMD)) {        JK_TRACE_EXIT(l);        return JK_FALSE;    }    /*     * COMPUTED-SEED     */    if (jk_b_append_bytes        (msg, (const unsigned char *)s->computed_key,         AJP14_COMPUTED_KEY_LEN)) {        jk_log(l, JK_LOG_ERROR,               "failed appending the COMPUTED MD5 bytes");        JK_TRACE_EXIT(l);        return JK_FALSE;    }    JK_TRACE_EXIT(l);    return JK_TRUE;}/* * Decode the Shutdown Nok Command * * +----------------------+-----------------------+ * | SHUTNOK CMD (1 byte) | FAILURE CODE (32bits) | * +----------------------+-----------------------+ * */int ajp14_unmarshal_shutdown_nok(jk_msg_buf_t *msg, jk_logger_t *l){    unsigned long status;    JK_TRACE_ENTER(l);    status = jk_b_get_long(msg);    if (status == 0xFFFFFFFF) {        jk_log(l, JK_LOG_ERROR,               "can't get failure code");        JK_TRACE_EXIT(l);        return JK_FALSE;    }    jk_log(l, JK_LOG_INFO, "Can't shutdown servlet engine - code %08lx",           status);    JK_TRACE_EXIT(l);    return JK_TRUE;}/* * Build the Unknown Packet * * +-----------------------------+---------------------------------+------------------------------+ * | UNKNOWN PACKET CMD (1 byte) | UNHANDLED MESSAGE SIZE (16bits) | UNHANDLED MESSAGE (bytes...) | * +-----------------------------+---------------------------------+------------------------------+ * */int ajp14_marshal_unknown_packet_into_msgb(jk_msg_buf_t *msg,                                           jk_msg_buf_t *unk, jk_logger_t *l){    JK_TRACE_ENTER(l);    /* To be on the safe side */    jk_b_reset(msg);    /*     * UNKNOWN PACKET CMD     */    if (jk_b_append_byte(msg, AJP14_UNKNOW_PACKET_CMD)) {        JK_TRACE_EXIT(l);        return JK_FALSE;    }    /*     * UNHANDLED MESSAGE SIZE     */    if (jk_b_append_int(msg, (unsigned short)unk->len)) {        JK_TRACE_EXIT(l);        return JK_FALSE;    }    /*     * UNHANDLED MESSAGE (Question : Did we have to send all the message or only part of)     *                                       (           ie: only 1k max                                                                )     */    if (jk_b_append_bytes(msg, unk->buf, unk->len)) {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -