ajp_header.c revision 347c9301068524042be654db3b2b055a9ec20633
6ae232055d4d8a97267517c5e50074c2c819941and/* Copyright 1999-2005 The Apache Software Foundation or its licensors, as
6ae232055d4d8a97267517c5e50074c2c819941and * applicable.
fd9abdda70912b99b24e3bf1a38f26fde908a74cnd * Licensed under the Apache License, Version 2.0 (the "License");
fd9abdda70912b99b24e3bf1a38f26fde908a74cnd * you may not use this file except in compliance with the License.
6ae232055d4d8a97267517c5e50074c2c819941and * You may obtain a copy of the License at
96ad5d81ee4a2cc66a4ae19893efc8aa6d06fae7jailletc * Unless required by applicable law or agreed to in writing, software
6ae232055d4d8a97267517c5e50074c2c819941and * distributed under the License is distributed on an "AS IS" BASIS,
6ae232055d4d8a97267517c5e50074c2c819941and * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
d29d9ab4614ff992b0e8de6e2b88d52b6f1f153erbowen * See the License for the specific language governing permissions and
2e545ce2450a9953665f701bb05350f0d3f26275nd * limitations under the License.
af33a4994ae2ff15bc67d19ff1a7feb906745bf8rbowenstatic const char *response_trans_headers[] = {
3f08db06526d6901aa08c110b5bc7dde6bc39905nd "Content-Type",
6ae232055d4d8a97267517c5e50074c2c819941and "Content-Language",
6ae232055d4d8a97267517c5e50074c2c819941and "Content-Length",
b43f840409794ed298e8634f6284741f193b6c4ftakashi "Last-Modified",
6ae232055d4d8a97267517c5e50074c2c819941and "Location",
6ae232055d4d8a97267517c5e50074c2c819941and "Set-Cookie",
6ae232055d4d8a97267517c5e50074c2c819941and "Set-Cookie2",
b43f840409794ed298e8634f6284741f193b6c4ftakashi "Servlet-Engine",
6ae232055d4d8a97267517c5e50074c2c819941and "WWW-Authenticate"
6ae232055d4d8a97267517c5e50074c2c819941and const char *p = header_name;
6ae232055d4d8a97267517c5e50074c2c819941and int i = 0;
1f1b6bf13313fdd14a45e52e553d3ff28689b717coar /* ACCEPT-LANGUAGE is the longest headeer
1f1b6bf13313fdd14a45e52e553d3ff28689b717coar * that is of interest.
6ae232055d4d8a97267517c5e50074c2c819941and while (*p)
6ae232055d4d8a97267517c5e50074c2c819941and switch (header[0]) {
6ae232055d4d8a97267517c5e50074c2c819941and /* NOTREACHED */
6ae232055d4d8a97267517c5e50074c2c819941and/* Apache method number to SC methods transform table */
6ae232055d4d8a97267517c5e50074c2c819941andstatic const unsigned char sc_for_req_method_table[] = {
6a3ab831a34f470b077294a173f24fcf1e5f0a3ctakashi 0, /* M_DELETE */
6ae232055d4d8a97267517c5e50074c2c819941and 0, /* M_PATCH */
6ae232055d4d8a97267517c5e50074c2c819941and 0 /* M_INVALID */
50c415a7ddfaf8376f956dd932b58a56221fc8f5trawick sc_for_req_method_table[method_id] : UNKNOWN_METHOD;
6ae232055d4d8a97267517c5e50074c2c819941and * Message structure
6ae232055d4d8a97267517c5e50074c2c819941and request_prefix (1) (byte)
1f1b6bf13313fdd14a45e52e553d3ff28689b717coar method (byte)
1f1b6bf13313fdd14a45e52e553d3ff28689b717coar protocol (string)
1f1b6bf13313fdd14a45e52e553d3ff28689b717coar req_uri (string)
1f1b6bf13313fdd14a45e52e553d3ff28689b717coar remote_addr (string)
1f1b6bf13313fdd14a45e52e553d3ff28689b717coar remote_host (string)
1f1b6bf13313fdd14a45e52e553d3ff28689b717coar server_name (string)
1f1b6bf13313fdd14a45e52e553d3ff28689b717coar server_port (short)
1f1b6bf13313fdd14a45e52e553d3ff28689b717coar is_ssl (boolean)
1f1b6bf13313fdd14a45e52e553d3ff28689b717coar num_headers (short)
1f1b6bf13313fdd14a45e52e553d3ff28689b717coar num_headers*(req_header_name header_value)
1f1b6bf13313fdd14a45e52e553d3ff28689b717coar ?context (byte)(string)
1f1b6bf13313fdd14a45e52e553d3ff28689b717coar ?servlet_path (byte)(string)
1f1b6bf13313fdd14a45e52e553d3ff28689b717coar ?remote_user (byte)(string)
1f1b6bf13313fdd14a45e52e553d3ff28689b717coar ?auth_type (byte)(string)
1f1b6bf13313fdd14a45e52e553d3ff28689b717coar ?query_string (byte)(string)
1f1b6bf13313fdd14a45e52e553d3ff28689b717coar ?jvm_route (byte)(string)
1f1b6bf13313fdd14a45e52e553d3ff28689b717coar ?ssl_cert (byte)(string)
1f1b6bf13313fdd14a45e52e553d3ff28689b717coar ?ssl_cipher (byte)(string)
1f1b6bf13313fdd14a45e52e553d3ff28689b717coar ?ssl_session (byte)(string)
1f1b6bf13313fdd14a45e52e553d3ff28689b717coar ?ssl_key_size (byte)(int) via JkOptions +ForwardKeySize
1f1b6bf13313fdd14a45e52e553d3ff28689b717coar request_terminator (byte)
1f1b6bf13313fdd14a45e52e553d3ff28689b717coar ?body content_length*(var binary)
1f1b6bf13313fdd14a45e52e553d3ff28689b717coarstatic apr_status_t ajp_marshal_into_msgb(ajp_msg_t *msg,
1f1b6bf13313fdd14a45e52e553d3ff28689b717coar const apr_array_header_t *arr = apr_table_elts(r->subprocess_env);
1f1b6bf13313fdd14a45e52e553d3ff28689b717coar const apr_table_entry_t *elts = (const apr_table_entry_t *)arr->elts;
1f1b6bf13313fdd14a45e52e553d3ff28689b717coar "Into ajp_marshal_into_msgb");
1f1b6bf13313fdd14a45e52e553d3ff28689b717coar if ((method = sc_for_req_method_by_id(r->method_number)) == UNKNOWN_METHOD) {
1f1b6bf13313fdd14a45e52e553d3ff28689b717coar "ajp_marshal_into_msgb - No such method %s",
1f1b6bf13313fdd14a45e52e553d3ff28689b717coar is_ssl = (apr_byte_t) ap_proxy_conn_is_https(r->connection);
1f1b6bf13313fdd14a45e52e553d3ff28689b717coar const apr_array_header_t *t = apr_table_elts(r->headers_in);
1f1b6bf13313fdd14a45e52e553d3ff28689b717coar remote_host = (char *)ap_get_remote_host(r->connection, r->per_dir_config, REMOTE_HOST, NULL);
1f1b6bf13313fdd14a45e52e553d3ff28689b717coar if (ajp_msg_append_uint8(msg, CMD_AJP13_FORWARD_REQUEST) ||
1f1b6bf13313fdd14a45e52e553d3ff28689b717coar ajp_msg_append_string(msg, r->connection->remote_ip) ||
1f1b6bf13313fdd14a45e52e553d3ff28689b717coar ajp_msg_append_uint16(msg, (apr_uint16_t)r->connection->local_addr->port) ||
1f1b6bf13313fdd14a45e52e553d3ff28689b717coar ajp_msg_append_uint16(msg, (apr_uint16_t) num_headers)) {
1f1b6bf13313fdd14a45e52e553d3ff28689b717coar "ajp_marshal_into_msgb: "
1f1b6bf13313fdd14a45e52e553d3ff28689b717coar "Error appending the message begining");
1f1b6bf13313fdd14a45e52e553d3ff28689b717coar for (i = 0 ; i < num_headers ; i++) {
1f1b6bf13313fdd14a45e52e553d3ff28689b717coar const apr_array_header_t *t = apr_table_elts(r->headers_in);
1f1b6bf13313fdd14a45e52e553d3ff28689b717coar const apr_table_entry_t *elts = (apr_table_entry_t *)t->elts;
6ae232055d4d8a97267517c5e50074c2c819941and if ((sc = sc_for_req_header(elts[i].key)) != UNKNOWN_METHOD) {
45d66a3a49ac14b7f18cd4d733c1947801b55172sf "ajp_marshal_into_msgb: "
6ae232055d4d8a97267517c5e50074c2c819941and "Error appending the header name");
cc7e1025de9ac63bd4db6fe7f71c158b2cf09fe4humbedooh "ajp_marshal_into_msgb: "
727872d18412fc021f03969b8641810d8896820bhumbedooh "Error appending the header name");
0d0ba3a410038e179b695446bb149cce6264e0abnd "ajp_marshal_into_msgb: "
727872d18412fc021f03969b8641810d8896820bhumbedooh "Error appending the header value");
30471a4650391f57975f60bbb6e4a90be7b284bfhumbedooh ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
205f749042ed530040a4f0080dbcb47ceae8a374rjung "ajp_marshal_into_msgb: Header[%d] [%s] = [%s]",
7fec19672a491661b2fe4b29f685bc7f4efa64d4nd/* XXXX need to figure out how to do this
7fec19672a491661b2fe4b29f685bc7f4efa64d4nd if (s->secret) {
6ae232055d4d8a97267517c5e50074c2c819941and if (ajp_msg_append_uint8(msg, SC_A_SECRET) ||
if (r->user) {
return AJP_EOVERFLOW;
if (r->ap_auth_type) {
return AJP_EOVERFLOW;
return AJP_EOVERFLOW;
return AJP_EOVERFLOW;
if (is_ssl) {
&& envvar[0]) {
return AJP_EOVERFLOW;
&& envvar[0]) {
return AJP_EOVERFLOW;
&& envvar[0]) {
return AJP_EOVERFLOW;
&& envvar[0]) {
return APR_EGENERAL;
return AJP_EOVERFLOW;
return AJP_EOVERFLOW;
return APR_SUCCESS;
request_rec *r,
const char *ptr;
return rc;
num_headers = 0;
for(i = 0 ; i < (int) num_headers ; i++) {
const char *stringname;
const char *value;
return rc;
name);
return AJP_EBAD_HEADER;
name = 0;
return rc;
return rc;
return APR_SUCCESS;
request_rec *r,
return rc;
return rc;
return rc;
return APR_SUCCESS;
request_rec *r,
if (*msg) {
return rc;
return rc;
return rc;
return APR_SUCCESS;
return (int) result;
return rc;
return AJP_EBAD_HEADER;
return rc;
return AJP_EBAD_HEADER;
return rc;
return APR_SUCCESS;
return rc;
return APR_SUCCESS;