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

📄 jk_ajp_common.c

📁 以便Apache与其他服务进行整合 Mod_JK安装
💻 C
📖 第 1 页 / 共 5 页
字号:
                       "failed appending the header name");                JK_TRACE_EXIT(l);                return JK_FALSE;            }        }        else {            if (jk_b_append_string(msg, s->headers_names[i])) {                jk_log(l, JK_LOG_ERROR,                       "failed appending the header name");                JK_TRACE_EXIT(l);                return JK_FALSE;            }        }        if (jk_b_append_string(msg, s->headers_values[i])) {            jk_log(l, JK_LOG_ERROR,                   "failed appending the header value");            JK_TRACE_EXIT(l);            return JK_FALSE;        }    }    if (s->secret) {        if (jk_b_append_byte(msg, SC_A_SECRET) ||            jk_b_append_string(msg, s->secret)) {            jk_log(l, JK_LOG_ERROR,                   "failed appending secret");            JK_TRACE_EXIT(l);            return JK_FALSE;        }    }    if (s->remote_user) {        if (jk_b_append_byte(msg, SC_A_REMOTE_USER) ||            jk_b_append_string(msg, s->remote_user)) {            jk_log(l, JK_LOG_ERROR,                   "failed appending the remote user");            JK_TRACE_EXIT(l);            return JK_FALSE;        }    }    if (s->auth_type) {        if (jk_b_append_byte(msg, SC_A_AUTH_TYPE) ||            jk_b_append_string(msg, s->auth_type)) {            jk_log(l, JK_LOG_ERROR,                   "failed appending the auth type");            JK_TRACE_EXIT(l);            return JK_FALSE;        }    }    if (s->query_string) {        if (jk_b_append_byte(msg, SC_A_QUERY_STRING) ||#if defined(AS400) && !defined(AS400_UTF8)            jk_b_append_asciistring(msg, s->query_string)) {#else            jk_b_append_string(msg, s->query_string)) {#endif            jk_log(l, JK_LOG_ERROR,                   "failed appending the query string");            JK_TRACE_EXIT(l);            return JK_FALSE;        }    }    if (s->route) {        if (jk_b_append_byte(msg, SC_A_ROUTE) ||            jk_b_append_string(msg, s->route)) {            jk_log(l, JK_LOG_ERROR,                   "failed appending the route");            JK_TRACE_EXIT(l);            return JK_FALSE;        }    }    if (s->ssl_cert_len) {        if (jk_b_append_byte(msg, SC_A_SSL_CERT) ||            jk_b_append_string(msg, s->ssl_cert)) {            jk_log(l, JK_LOG_ERROR,                   "failed appending the SSL certificates");            JK_TRACE_EXIT(l);            return JK_FALSE;        }    }    if (s->ssl_cipher) {        if (jk_b_append_byte(msg, SC_A_SSL_CIPHER) ||            jk_b_append_string(msg, s->ssl_cipher)) {            jk_log(l, JK_LOG_ERROR,                   "failed appending the SSL ciphers");            JK_TRACE_EXIT(l);            return JK_FALSE;        }    }    if (s->ssl_session) {        if (jk_b_append_byte(msg, SC_A_SSL_SESSION) ||            jk_b_append_string(msg, s->ssl_session)) {            jk_log(l, JK_LOG_ERROR,                   "failed appending the SSL session");            JK_TRACE_EXIT(l);            return JK_FALSE;        }    }    /*     * ssl_key_size is required by Servlet 2.3 API     * added support only in ajp14 mode     * JFC removed: ae->proto == AJP14_PROTO     */    if (s->ssl_key_size != -1) {        if (jk_b_append_byte(msg, SC_A_SSL_KEY_SIZE) ||            jk_b_append_int(msg, (unsigned short)s->ssl_key_size)) {            jk_log(l, JK_LOG_ERROR,                   "failed appending the SSL key size");            JK_TRACE_EXIT(l);            return JK_FALSE;        }    }    /* If the method was unrecognized, encode it as an attribute */    if (method == SC_M_JK_STORED) {        if (JK_IS_DEBUG_LEVEL(l))            jk_log(l, JK_LOG_DEBUG, "unknown method %s", s->method);        if (jk_b_append_byte(msg, SC_A_STORED_METHOD) ||            jk_b_append_string(msg, s->method)) {            jk_log(l, JK_LOG_ERROR,                   "failed appending the request method");            JK_TRACE_EXIT(l);            return JK_FALSE;        }    }    if (s->num_attributes > 0) {        for (i = 0; i < s->num_attributes; i++) {            if (jk_b_append_byte(msg, SC_A_REQ_ATTRIBUTE) ||                jk_b_append_string(msg, s->attributes_names[i]) ||                jk_b_append_string(msg, s->attributes_values[i])) {                jk_log(l, JK_LOG_ERROR,                       "failed appending attribute %s=%s",                       s->attributes_names[i], s->attributes_values[i]);                JK_TRACE_EXIT(l);                return JK_FALSE;            }        }    }    if (jk_b_append_byte(msg, SC_A_ARE_DONE)) {        jk_log(l, JK_LOG_ERROR,               "failed appending the message end");        JK_TRACE_EXIT(l);        return JK_FALSE;    }    if (JK_IS_DEBUG_LEVEL(l))        jk_log(l, JK_LOG_DEBUG, "ajp marshaling done");    JK_TRACE_EXIT(l);    return JK_TRUE;}/*AJPV13_RESPONSE/AJPV14_RESPONSE:=    response_prefix (2)    status          (short)    status_msg      (short)    num_headers     (short)    num_headers*(res_header_name header_value)    *body_chunk    terminator      boolean <! -- recycle connection or not  -->req_header_name :=    sc_req_header_name | (string)res_header_name :=    sc_res_header_name | (string)header_value :=    (string)body_chunk :=    length  (short)    body    length*(var binary) */static int ajp_unmarshal_response(jk_msg_buf_t *msg,                                  jk_res_data_t * d,                                  ajp_endpoint_t * ae, jk_logger_t *l){    jk_pool_t *p = &ae->pool;    d->status = jk_b_get_int(msg);    JK_TRACE_ENTER(l);    if (!d->status) {        jk_log(l, JK_LOG_ERROR,               "NULL status");        JK_TRACE_EXIT(l);        return JK_FALSE;    }    d->msg = (char *)jk_b_get_string(msg);    if (d->msg) {#if (defined(AS400) && !defined(AS400_UTF8)) || defined(_OSD_POSIX)        jk_xlate_from_ascii(d->msg, strlen(d->msg));#endif    }    if (JK_IS_DEBUG_LEVEL(l))        jk_log(l, JK_LOG_DEBUG,               "status = %d", d->status);    d->num_headers = jk_b_get_int(msg);    d->header_names = d->header_values = NULL;    if (JK_IS_DEBUG_LEVEL(l))        jk_log(l, JK_LOG_DEBUG,               "Number of headers is = %d",               d->num_headers);    if (d->num_headers) {        d->header_names = jk_pool_alloc(p, sizeof(char *) * d->num_headers);        d->header_values = jk_pool_alloc(p, sizeof(char *) * d->num_headers);        if (d->header_names && d->header_values) {            unsigned int i;            for (i = 0; i < d->num_headers; i++) {                unsigned short name = jk_b_pget_int(msg, msg->pos);                if ((name & 0XFF00) == 0XA000) {                    jk_b_get_int(msg);                    name = name & 0X00FF;                    if (name <= SC_RES_HEADERS_NUM) {                        d->header_names[i] =                            (char *)long_res_header_for_sc(name);                    }                    else {                        jk_log(l, JK_LOG_ERROR,                               "No such sc (%d)", name);                        JK_TRACE_EXIT(l);                        return JK_FALSE;                    }                }                else {                    d->header_names[i] = (char *)jk_b_get_string(msg);                    if (!d->header_names[i]) {                        jk_log(l, JK_LOG_ERROR,                               "NULL header name");                        JK_TRACE_EXIT(l);                        return JK_FALSE;                    }#if (defined(AS400) && !defined(AS400_UTF8)) || defined(_OSD_POSIX)                    jk_xlate_from_ascii(d->header_names[i],                                        strlen(d->header_names[i]));#endif                }                d->header_values[i] = (char *)jk_b_get_string(msg);                if (!d->header_values[i]) {                    jk_log(l, JK_LOG_ERROR,                           "NULL header value");                    JK_TRACE_EXIT(l);                    return JK_FALSE;                }#if (defined(AS400) && !defined(AS400_UTF8)) || defined(_OSD_POSIX)                jk_xlate_from_ascii(d->header_values[i],                                    strlen(d->header_values[i]));#endif                if (JK_IS_DEBUG_LEVEL(l))                    jk_log(l, JK_LOG_DEBUG,                           "Header[%d] [%s] = [%s]",                           i, d->header_names[i], d->header_values[i]);            }        }    }    JK_TRACE_EXIT(l);    return JK_TRUE;}/* * Reset the endpoint (clean buf and close socket) */static void ajp_reset_endpoint(ajp_endpoint_t * ae, jk_logger_t *l){    if (IS_VALID_SOCKET(ae->sd) && !ae->reuse) {        jk_shutdown_socket(ae->sd);        if (JK_IS_DEBUG_LEVEL(l))            jk_log(l, JK_LOG_DEBUG,            "reset socket with sd = %u", ae->sd );        ae->sd = JK_INVALID_SOCKET;    }    jk_reset_pool(&(ae->pool));}/* * Close the endpoint (close pool and close socket) */void ajp_close_endpoint(ajp_endpoint_t * ae, jk_logger_t *l){    JK_TRACE_ENTER(l);    if (IS_VALID_SOCKET(ae->sd)) {        jk_shutdown_socket(ae->sd);        if (JK_IS_DEBUG_LEVEL(l))            jk_log(l, JK_LOG_DEBUG,                   "closed socket with sd = %d", ae->sd);        ae->sd = JK_INVALID_SOCKET;    }    jk_close_pool(&(ae->pool));    free(ae);    JK_TRACE_EXIT(l);}/* * Try another connection from cache */static void ajp_next_connection(ajp_endpoint_t *ae, jk_logger_t *l){    int rc;    ajp_worker_t *aw = ae->worker;    jk_sock_t sock;    JK_ENTER_CS(&aw->cs, rc);    if (rc) {        unsigned int i;        sock = ae->sd;        /* Mark existing endpoint socket as closed */        ae->sd = JK_INVALID_SOCKET;        for (i = 0; i < aw->ep_cache_sz; i++) {            /* Find cache slot with usable socket */            if (aw->ep_cache[i] && IS_VALID_SOCKET(aw->ep_cache[i]->sd)) {                ae->sd = aw->ep_cache[i]->sd;                aw->ep_cache[i]->sd = JK_INVALID_SOCKET;                break;            }        }        JK_LEAVE_CS(&aw->cs, rc);        /* Close previous socket */        if (IS_VALID_SOCKET(sock))            jk_shutdown_socket(sock);    }}/* * Wait input event on ajp_endpoint for timeout ms */static int ajp_is_input_event(ajp_endpoint_t * ae, int timeout, jk_logger_t *l){    fd_set rset;    struct timeval tv;    int rc;    FD_ZERO(&rset);    FD_SET(ae->sd, &rset);    tv.tv_sec = timeout / 1000;    tv.tv_usec = (timeout % 1000) * 1000;    do {        rc = select((int)ae->sd + 1, &rset, NULL, NULL, &tv);    } while (rc < 0 && errno == EINTR);    ae->last_errno = 0;    if (rc == 0) {        /* Timeout. Set the errno to timeout */#if defined(WIN32) || (defined(NETWARE) && defined(__NOVELL_LIBC__))        errno = WSAETIMEDOUT - WSABASEERR;#else        errno = ETIMEDOUT;#endif        ae->last_errno = errno;        return JK_FALSE;    }    else if (rc < 0) {        ae->last_errno = errno;        jk_log(l, JK_LOG_WARNING,               "error during select (errno=%d)", ae->last_errno);        return JK_FALSE;    }    else        return JK_TRUE;}/* * Handle the CPING/CPONG initial query */static int ajp_handle_cping_cpong(ajp_endpoint_t * ae, int timeout, jk_logger_t *l){    int cmd;    jk_msg_buf_t *msg;    JK_TRACE_ENTER(l);    msg = jk_b_new(&ae->pool);

⌨️ 快捷键说明

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