bottleneck testcase based on rubbos
[bottlenecks.git] / rubbos / app / tomcat-connectors-1.2.32-src / native / common / jk_ajp14.h
1 /*
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
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
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.
16  */
17
18 /***************************************************************************
19  * Description: Next generation bi-directional protocol handler.           *
20  * Author:      Henri Gomez <hgomez@apache.org>                            *
21  * Version:     $Revision: 466585 $                                           *
22  ***************************************************************************/
23 #ifndef JK_AJP14_H
24 #define JK_AJP14_H
25
26 #include "jk_ajp_common.h"
27 #include "jk_context.h"
28
29 #ifdef __cplusplus
30 extern "C"
31 {
32 #endif                          /* __cplusplus */
33
34 #define AJP14_PROTO                 14
35
36 #define AJP14_WS_HEADER             0x1235
37 #define AJP14_SW_HEADER             0x1235      /* AJP14 use now the same header in both directions */
38
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)
47
48 /*
49  * Initial Login Phase (web server -> servlet engine)
50  */
51 #define AJP14_LOGINIT_CMD           (unsigned char)0x10
52
53 /*
54  * Second Login Phase (servlet engine -> web server), md5 seed is received
55  */
56 #define AJP14_LOGSEED_CMD           (unsigned char)0x11
57
58 /*
59  * Third Login Phase (web server -> servlet engine), md5 of seed + secret is sent
60  */
61 #define AJP14_LOGCOMP_CMD           (unsigned char)0x12
62
63 /*
64  * Login Accepted (servlet engine -> web server)
65  */
66 #define AJP14_LOGOK_CMD             (unsigned char)0x13
67
68 /*
69  * Login Rejected (servlet engine -> web server), will be logged
70  */
71 #define AJP14_LOGNOK_CMD            (unsigned char)0x14
72
73 /*
74  * Context Query (web server -> servlet engine), which URI are handled by servlet engine ?
75  */
76 #define AJP14_CONTEXT_QRY_CMD       (unsigned char)0x15
77
78 /*
79  * Context Info (servlet engine -> web server), URI handled response
80  */
81 #define AJP14_CONTEXT_INFO_CMD      (unsigned char)0x16
82
83 /* 
84  * Context Update (servlet engine -> web server), status of context changed
85  */
86 #define AJP14_CONTEXT_UPDATE_CMD    (unsigned char)0x17
87
88 /*
89  * Servlet Engine Status (web server -> servlet engine), what's the status of the servlet engine ?
90  */
91 #define AJP14_STATUS_CMD            (unsigned char)0x18
92
93 /*
94  * Secure Shutdown command (web server -> servlet engine), please servlet stop yourself.
95  */
96 #define AJP14_SHUTDOWN_CMD          (unsigned char)0x19
97
98 /*
99  * Secure Shutdown command Accepted (servlet engine -> web server)
100  */
101 #define AJP14_SHUTOK_CMD            (unsigned char)0x1A
102
103 /*
104  * Secure Shutdown Rejected (servlet engine -> web server)
105  */
106 #define AJP14_SHUTNOK_CMD           (unsigned char)0x1B
107
108 /*
109  * Context Status (web server -> servlet engine), what's the status of the context ?
110  */
111 #define AJP14_CONTEXT_STATE_CMD     (unsigned char)0x1C
112
113 /*
114  * Context Status Reply (servlet engine -> web server), status of context
115  */
116 #define AJP14_CONTEXT_STATE_REP_CMD (unsigned char)0x1D
117
118 /*
119  * Unknown Packet Reply (web server <-> servlet engine), when a packet couldn't be decoded
120  */
121 #define AJP14_UNKNOW_PACKET_CMD     (unsigned char)0x1E
122
123
124 /*
125  * Negociation flags 
126  */
127
128 /*
129  * web-server want context info after login
130  */
131 #define AJP14_CONTEXT_INFO_NEG      0x80000000
132
133 /*
134  * web-server want context updates
135  */
136 #define AJP14_CONTEXT_UPDATE_NEG    0x40000000
137
138 /*
139  * web-server want compressed stream 
140  */
141 #define AJP14_GZIP_STREAM_NEG       0x20000000
142
143 /*
144  * web-server want crypted DES56 stream with secret key
145  */
146 #define AJP14_DES56_STREAM_NEG      0x10000000
147
148 /*
149  * Extended info on server SSL vars
150  */
151 #define AJP14_SSL_VSERVER_NEG       0x08000000
152
153 /*
154  *Extended info on client SSL vars
155  */
156 #define AJP14_SSL_VCLIENT_NEG       0x04000000
157
158 /*
159  * Extended info on crypto SSL vars
160  */
161 #define AJP14_SSL_VCRYPTO_NEG       0x02000000
162
163 /*
164  * Extended info on misc SSL vars
165  */
166 #define AJP14_SSL_VMISC_NEG         0x01000000
167
168 /*
169  * mask of protocol supported 
170  */
171 #define AJP14_PROTO_SUPPORT_AJPXX_NEG   0x00FF0000
172
173 /* 
174  * communication could use AJP14 
175  */
176 #define AJP14_PROTO_SUPPORT_AJP14_NEG   0x00010000
177
178 /*
179  * communication could use AJP15 
180  */
181 #define AJP14_PROTO_SUPPORT_AJP15_NEG   0x00020000
182
183 /*
184  * communication could use AJP16
185  */
186 #define AJP14_PROTO_SUPPORT_AJP16_NEG   0x00040000
187
188 /*
189  * Some failure codes
190  */
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
195
196 /*
197  * Some status codes
198  */
199 #define AJP14_CONTEXT_DOWN       0x01
200 #define AJP14_CONTEXT_UP         0x02
201 #define AJP14_CONTEXT_OK         0x03
202
203 /* 
204  * Misc defines
205  */
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 */
208
209 /*
210  * The login structure
211  */
212 typedef struct jk_login_service jk_login_service_t;
213
214 struct jk_login_service
215 {
216
217     /*
218      *  Pointer to web-server name
219      */
220     const char *web_server_name;
221
222     /*
223      * Pointer to servlet-engine name
224      */
225     char *servlet_engine_name;
226
227     /*
228      * Pointer to secret key
229      */
230     const char *secret_key;
231
232     /*
233      * Received entropy seed
234      */
235     char entropy[AJP14_ENTROPY_SEED_LEN + 1];
236
237     /*
238      * Computed key
239      */
240     char computed_key[AJP14_COMPUTED_KEY_LEN + 1];
241
242     /*
243      *  What we want to negociate
244      */
245     unsigned long negociation;
246
247     /*
248      * What we received from servlet engine 
249      */
250     unsigned long negociated;
251 };
252
253 /*
254  * functions defined here 
255  */
256
257 void ajp14_compute_md5(jk_login_service_t *s, jk_logger_t *l);
258
259 int ajp14_marshal_login_init_into_msgb(jk_msg_buf_t *msg,
260                                        jk_login_service_t *s,
261                                        jk_logger_t *l);
262
263 int ajp14_unmarshal_login_seed(jk_msg_buf_t *msg,
264                                jk_login_service_t *s, jk_logger_t *l);
265
266 int ajp14_marshal_login_comp_into_msgb(jk_msg_buf_t *msg,
267                                        jk_login_service_t *s,
268                                        jk_logger_t *l);
269
270 int ajp14_unmarshal_log_ok(jk_msg_buf_t *msg,
271                            jk_login_service_t *s, jk_logger_t *l);
272
273 int ajp14_unmarshal_log_nok(jk_msg_buf_t *msg, jk_logger_t *l);
274
275 int ajp14_marshal_shutdown_into_msgb(jk_msg_buf_t *msg,
276                                      jk_login_service_t *s,
277                                      jk_logger_t *l);
278
279 int ajp14_unmarshal_shutdown_nok(jk_msg_buf_t *msg, jk_logger_t *l);
280
281 int ajp14_marshal_unknown_packet_into_msgb(jk_msg_buf_t *msg,
282                                            jk_msg_buf_t *unk,
283                                            jk_logger_t *l);
284
285 int ajp14_marshal_context_query_into_msgb(jk_msg_buf_t *msg,
286                                           char *virtual, jk_logger_t *l);
287
288 int ajp14_unmarshal_context_info(jk_msg_buf_t *msg,
289                                  jk_context_t *context, jk_logger_t *l);
290
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);
294
295 int ajp14_unmarshal_context_state_reply(jk_msg_buf_t *msg,
296                                         jk_context_t *context,
297                                         jk_logger_t *l);
298
299 int ajp14_unmarshal_context_update_cmd(jk_msg_buf_t *msg,
300                                        jk_context_t *context,
301                                        jk_logger_t *l);
302
303 #ifdef __cplusplus
304 }
305 #endif                          /* __cplusplus */
306
307 #endif                          /* JK_AJP14_H */