2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
18 /***************************************************************************
19 * Description: Next generation bi-directional protocol handler. *
20 * Author: Henri Gomez <hgomez@apache.org> *
21 * Version: $Revision: 466585 $ *
22 ***************************************************************************/
26 #include "jk_ajp_common.h"
27 #include "jk_context.h"
32 #endif /* __cplusplus */
34 #define AJP14_PROTO 14
36 #define AJP14_WS_HEADER 0x1235
37 #define AJP14_SW_HEADER 0x1235 /* AJP14 use now the same header in both directions */
39 #define AJP14_DEF_HOST ("localhost")
40 #define AJP14_DEF_PORT (8011)
41 #define AJP14_READ_BUF_SIZE (8*1024)
42 #define AJP14_DEF_RETRY_ATTEMPTS (1)
43 #define AJP14_DEF_CACHE_SZ (1)
44 #define AJP14_MAX_SEND_BODY_SZ (DEF_BUFFER_SZ - 6)
45 #define AJP14_HEADER_LEN (4)
46 #define AJP14_HEADER_SZ_LEN (2)
49 * Initial Login Phase (web server -> servlet engine)
51 #define AJP14_LOGINIT_CMD (unsigned char)0x10
54 * Second Login Phase (servlet engine -> web server), md5 seed is received
56 #define AJP14_LOGSEED_CMD (unsigned char)0x11
59 * Third Login Phase (web server -> servlet engine), md5 of seed + secret is sent
61 #define AJP14_LOGCOMP_CMD (unsigned char)0x12
64 * Login Accepted (servlet engine -> web server)
66 #define AJP14_LOGOK_CMD (unsigned char)0x13
69 * Login Rejected (servlet engine -> web server), will be logged
71 #define AJP14_LOGNOK_CMD (unsigned char)0x14
74 * Context Query (web server -> servlet engine), which URI are handled by servlet engine ?
76 #define AJP14_CONTEXT_QRY_CMD (unsigned char)0x15
79 * Context Info (servlet engine -> web server), URI handled response
81 #define AJP14_CONTEXT_INFO_CMD (unsigned char)0x16
84 * Context Update (servlet engine -> web server), status of context changed
86 #define AJP14_CONTEXT_UPDATE_CMD (unsigned char)0x17
89 * Servlet Engine Status (web server -> servlet engine), what's the status of the servlet engine ?
91 #define AJP14_STATUS_CMD (unsigned char)0x18
94 * Secure Shutdown command (web server -> servlet engine), please servlet stop yourself.
96 #define AJP14_SHUTDOWN_CMD (unsigned char)0x19
99 * Secure Shutdown command Accepted (servlet engine -> web server)
101 #define AJP14_SHUTOK_CMD (unsigned char)0x1A
104 * Secure Shutdown Rejected (servlet engine -> web server)
106 #define AJP14_SHUTNOK_CMD (unsigned char)0x1B
109 * Context Status (web server -> servlet engine), what's the status of the context ?
111 #define AJP14_CONTEXT_STATE_CMD (unsigned char)0x1C
114 * Context Status Reply (servlet engine -> web server), status of context
116 #define AJP14_CONTEXT_STATE_REP_CMD (unsigned char)0x1D
119 * Unknown Packet Reply (web server <-> servlet engine), when a packet couldn't be decoded
121 #define AJP14_UNKNOW_PACKET_CMD (unsigned char)0x1E
129 * web-server want context info after login
131 #define AJP14_CONTEXT_INFO_NEG 0x80000000
134 * web-server want context updates
136 #define AJP14_CONTEXT_UPDATE_NEG 0x40000000
139 * web-server want compressed stream
141 #define AJP14_GZIP_STREAM_NEG 0x20000000
144 * web-server want crypted DES56 stream with secret key
146 #define AJP14_DES56_STREAM_NEG 0x10000000
149 * Extended info on server SSL vars
151 #define AJP14_SSL_VSERVER_NEG 0x08000000
154 *Extended info on client SSL vars
156 #define AJP14_SSL_VCLIENT_NEG 0x04000000
159 * Extended info on crypto SSL vars
161 #define AJP14_SSL_VCRYPTO_NEG 0x02000000
164 * Extended info on misc SSL vars
166 #define AJP14_SSL_VMISC_NEG 0x01000000
169 * mask of protocol supported
171 #define AJP14_PROTO_SUPPORT_AJPXX_NEG 0x00FF0000
174 * communication could use AJP14
176 #define AJP14_PROTO_SUPPORT_AJP14_NEG 0x00010000
179 * communication could use AJP15
181 #define AJP14_PROTO_SUPPORT_AJP15_NEG 0x00020000
184 * communication could use AJP16
186 #define AJP14_PROTO_SUPPORT_AJP16_NEG 0x00040000
191 #define AJP14_BAD_KEY_ERR 0xFFFFFFFF
192 #define AJP14_ENGINE_DOWN_ERR 0xFFFFFFFE
193 #define AJP14_RETRY_LATER_ERR 0xFFFFFFFD
194 #define AJP14_SHUT_AUTHOR_FAILED_ERR 0xFFFFFFFC
199 #define AJP14_CONTEXT_DOWN 0x01
200 #define AJP14_CONTEXT_UP 0x02
201 #define AJP14_CONTEXT_OK 0x03
206 #define AJP14_ENTROPY_SEED_LEN 32 /* we're using MD5 => 32 chars */
207 #define AJP14_COMPUTED_KEY_LEN 32 /* we're using MD5 also */
210 * The login structure
212 typedef struct jk_login_service jk_login_service_t;
214 struct jk_login_service
218 * Pointer to web-server name
220 const char *web_server_name;
223 * Pointer to servlet-engine name
225 char *servlet_engine_name;
228 * Pointer to secret key
230 const char *secret_key;
233 * Received entropy seed
235 char entropy[AJP14_ENTROPY_SEED_LEN + 1];
240 char computed_key[AJP14_COMPUTED_KEY_LEN + 1];
243 * What we want to negociate
245 unsigned long negociation;
248 * What we received from servlet engine
250 unsigned long negociated;
254 * functions defined here
257 void ajp14_compute_md5(jk_login_service_t *s, jk_logger_t *l);
259 int ajp14_marshal_login_init_into_msgb(jk_msg_buf_t *msg,
260 jk_login_service_t *s,
263 int ajp14_unmarshal_login_seed(jk_msg_buf_t *msg,
264 jk_login_service_t *s, jk_logger_t *l);
266 int ajp14_marshal_login_comp_into_msgb(jk_msg_buf_t *msg,
267 jk_login_service_t *s,
270 int ajp14_unmarshal_log_ok(jk_msg_buf_t *msg,
271 jk_login_service_t *s, jk_logger_t *l);
273 int ajp14_unmarshal_log_nok(jk_msg_buf_t *msg, jk_logger_t *l);
275 int ajp14_marshal_shutdown_into_msgb(jk_msg_buf_t *msg,
276 jk_login_service_t *s,
279 int ajp14_unmarshal_shutdown_nok(jk_msg_buf_t *msg, jk_logger_t *l);
281 int ajp14_marshal_unknown_packet_into_msgb(jk_msg_buf_t *msg,
285 int ajp14_marshal_context_query_into_msgb(jk_msg_buf_t *msg,
286 char *virtual, jk_logger_t *l);
288 int ajp14_unmarshal_context_info(jk_msg_buf_t *msg,
289 jk_context_t *context, jk_logger_t *l);
291 int ajp14_marshal_context_state_into_msgb(jk_msg_buf_t *msg,
292 jk_context_t *context,
293 char *cname, jk_logger_t *l);
295 int ajp14_unmarshal_context_state_reply(jk_msg_buf_t *msg,
296 jk_context_t *context,
299 int ajp14_unmarshal_context_update_cmd(jk_msg_buf_t *msg,
300 jk_context_t *context,
305 #endif /* __cplusplus */
307 #endif /* JK_AJP14_H */