jk_ajp_common.h

来自「Tomcat 4.1与WebServer集成组件的源代码包.」· C头文件 代码 · 共 388 行

H
388
字号
/* ========================================================================= * *                                                                           * *                 The Apache Software License,  Version 1.1                 * *                                                                           * *          Copyright (c) 1999-2001 The Apache Software Foundation.          * *                           All rights reserved.                            * *                                                                           * * ========================================================================= * *                                                                           * * Redistribution and use in source and binary forms,  with or without modi- * * fication, are permitted provided that the following conditions are met:   * *                                                                           * * 1. Redistributions of source code  must retain the above copyright notice * *    notice, this list of conditions and the following disclaimer.          * *                                                                           * * 2. Redistributions  in binary  form  must  reproduce the  above copyright * *    notice,  this list of conditions  and the following  disclaimer in the * *    documentation and/or other materials provided with the distribution.   * *                                                                           * * 3. The end-user documentation  included with the redistribution,  if any, * *    must include the following acknowlegement:                             * *                                                                           * *       "This product includes  software developed  by the Apache  Software * *        Foundation <http://www.apache.org/>."                              * *                                                                           * *    Alternately, this acknowlegement may appear in the software itself, if * *    and wherever such third-party acknowlegements normally appear.         * *                                                                           * * 4. The names  "The  Jakarta  Project",  "Jk",  and  "Apache  Software     * *    Foundation"  must not be used  to endorse or promote  products derived * *    from this  software without  prior  written  permission.  For  written * *    permission, please contact <apache@apache.org>.                        * *                                                                           * * 5. Products derived from this software may not be called "Apache" nor may * *    "Apache" appear in their names without prior written permission of the * *    Apache Software Foundation.                                            * *                                                                           * * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES * * INCLUDING, BUT NOT LIMITED TO,  THE IMPLIED WARRANTIES OF MERCHANTABILITY * * AND FITNESS FOR  A PARTICULAR PURPOSE  ARE DISCLAIMED.  IN NO EVENT SHALL * * THE APACHE  SOFTWARE  FOUNDATION OR  ITS CONTRIBUTORS  BE LIABLE  FOR ANY * * DIRECT,  INDIRECT,   INCIDENTAL,  SPECIAL,  EXEMPLARY,  OR  CONSEQUENTIAL * * DAMAGES (INCLUDING,  BUT NOT LIMITED TO,  PROCUREMENT OF SUBSTITUTE GOODS * * OR SERVICES;  LOSS OF USE,  DATA,  OR PROFITS;  OR BUSINESS INTERRUPTION) * * HOWEVER CAUSED AND  ON ANY  THEORY  OF  LIABILITY,  WHETHER IN  CONTRACT, * * STRICT LIABILITY, OR TORT  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * * ANY  WAY  OUT OF  THE  USE OF  THIS  SOFTWARE,  EVEN  IF  ADVISED  OF THE * * POSSIBILITY OF SUCH DAMAGE.                                               * *                                                                           * * ========================================================================= * *                                                                           * * This software  consists of voluntary  contributions made  by many indivi- * * duals on behalf of the  Apache Software Foundation.  For more information * * on the Apache Software Foundation, please see <http://www.apache.org/>.   * *                                                                           * * ========================================================================= *//*************************************************************************** * Description: common stuff for bi-directional protocol ajp13/ajp14.      * * Author:      Gal Shachor <shachor@il.ibm.com>                           * * Author:      Henri Gomez <hgomez@slib.fr>                               * * Version:     $Revision: 1.17 $                                           * ***************************************************************************/#ifndef JK_AJP_COMMON_H#define JK_AJP_COMMON_H#include "jk_service.h"#include "jk_msg_buff.h"#include "jk_mt.h"#ifdef __cplusplusextern "C" {#endif /* __cplusplus *//* * Conditional request attributes *  */#define SC_A_CONTEXT            (unsigned char)1#define SC_A_SERVLET_PATH       (unsigned char)2#define SC_A_REMOTE_USER        (unsigned char)3#define SC_A_AUTH_TYPE          (unsigned char)4#define SC_A_QUERY_STRING       (unsigned char)5#define SC_A_JVM_ROUTE          (unsigned char)6#define SC_A_SSL_CERT           (unsigned char)7#define SC_A_SSL_CIPHER         (unsigned char)8#define SC_A_SSL_SESSION        (unsigned char)9#define SC_A_REQ_ATTRIBUTE      (unsigned char)10#define SC_A_SSL_KEY_SIZE       (unsigned char)11       /* only in if JkOptions +ForwardKeySize */#define SC_A_SECRET             (unsigned char)12#define SC_A_ARE_DONE           (unsigned char)0xFF/* * Request methods, coded as numbers instead of strings. * The list of methods was taken from Section 5.1.1 of RFC 2616, * RFC 2518, the ACL IETF draft, and the DeltaV IESG Proposed Standard. *          Method        = "OPTIONS" *                        | "GET"     *                        | "HEAD"    *                        | "POST"    *                        | "PUT"     *                        | "DELETE"  *                        | "TRACE"   *                        | "PROPFIND" *                        | "PROPPATCH" *                        | "MKCOL" *                        | "COPY" *                        | "MOVE" *                        | "LOCK" *                        | "UNLOCK" *                        | "ACL" *                        | "REPORT" *                        | "VERSION-CONTROL" *                        | "CHECKIN" *                        | "CHECKOUT" *                        | "UNCHECKOUT" *                        | "SEARCH" *                        | "MKWORKSPACE" *                        | "UPDATE" *                        | "LABEL" *                        | "MERGE" *                        | "BASELINE-CONTROL" *                        | "MKACTIVITY" *  */#define SC_M_OPTIONS            (unsigned char)1#define SC_M_GET                (unsigned char)2#define SC_M_HEAD               (unsigned char)3#define SC_M_POST               (unsigned char)4#define SC_M_PUT                (unsigned char)5#define SC_M_DELETE             (unsigned char)6#define SC_M_TRACE              (unsigned char)7#define SC_M_PROPFIND           (unsigned char)8#define SC_M_PROPPATCH          (unsigned char)9#define SC_M_MKCOL              (unsigned char)10#define SC_M_COPY               (unsigned char)11#define SC_M_MOVE               (unsigned char)12#define SC_M_LOCK               (unsigned char)13#define SC_M_UNLOCK             (unsigned char)14#define SC_M_ACL                (unsigned char)15#define SC_M_REPORT             (unsigned char)16#define SC_M_VERSION_CONTROL    (unsigned char)17#define SC_M_CHECKIN            (unsigned char)18#define SC_M_CHECKOUT           (unsigned char)19#define SC_M_UNCHECKOUT         (unsigned char)20#define SC_M_SEARCH             (unsigned char)21#define SC_M_MKWORKSPACE        (unsigned char)22#define SC_M_UPDATE             (unsigned char)23#define SC_M_LABEL              (unsigned char)24#define SC_M_MERGE              (unsigned char)25#define SC_M_BASELINE_CONTROL   (unsigned char)26#define SC_M_MKACTIVITY         (unsigned char)27/* * Frequent request headers, these headers are coded as numbers * instead of strings. *  * Accept * Accept-Charset * Accept-Encoding * Accept-Language * Authorization * Connection * Content-Type * Content-Length * Cookie * Cookie2 * Host * Pragma * Referer * User-Agent *  */#define SC_ACCEPT               (unsigned short)0xA001#define SC_ACCEPT_CHARSET       (unsigned short)0xA002#define SC_ACCEPT_ENCODING      (unsigned short)0xA003#define SC_ACCEPT_LANGUAGE      (unsigned short)0xA004#define SC_AUTHORIZATION        (unsigned short)0xA005#define SC_CONNECTION           (unsigned short)0xA006#define SC_CONTENT_TYPE         (unsigned short)0xA007#define SC_CONTENT_LENGTH       (unsigned short)0xA008#define SC_COOKIE               (unsigned short)0xA009    #define SC_COOKIE2              (unsigned short)0xA00A#define SC_HOST                 (unsigned short)0xA00B#define SC_PRAGMA               (unsigned short)0xA00C#define SC_REFERER              (unsigned short)0xA00D#define SC_USER_AGENT           (unsigned short)0xA00E/* * Frequent response headers, these headers are coded as numbers * instead of strings. *  * Content-Type * Content-Language * Content-Length * Date * Last-Modified * Location * Set-Cookie * Servlet-Engine * Status * WWW-Authenticate *  */#define SC_RESP_CONTENT_TYPE        (unsigned short)0xA001#define SC_RESP_CONTENT_LANGUAGE    (unsigned short)0xA002#define SC_RESP_CONTENT_LENGTH      (unsigned short)0xA003#define SC_RESP_DATE                (unsigned short)0xA004#define SC_RESP_LAST_MODIFIED       (unsigned short)0xA005#define SC_RESP_LOCATION            (unsigned short)0xA006#define SC_RESP_SET_COOKIE          (unsigned short)0xA007#define SC_RESP_SET_COOKIE2         (unsigned short)0xA008#define SC_RESP_SERVLET_ENGINE      (unsigned short)0xA009#define SC_RESP_STATUS              (unsigned short)0xA00A#define SC_RESP_WWW_AUTHENTICATE    (unsigned short)0xA00B#define SC_RES_HEADERS_NUM          11/* * AJP13/AJP14 use same message structure */#define AJP_DEF_RETRY_ATTEMPTS    (1)#define AJP_HEADER_LEN            (4)#define AJP_HEADER_SZ_LEN         (2)#define CHUNK_BUFFER_PAD          (12)#define AJP_DEF_CACHE_TIMEOUT     (15)struct jk_res_data {    int         status;#ifdef AS400    char *msg;#else    const char *msg;#endif    unsigned    num_headers;    char      **header_names;    char      **header_values;};typedef struct jk_res_data jk_res_data_t;#include "jk_ajp14.h"struct ajp_operation;typedef struct ajp_operation ajp_operation_t;struct ajp_endpoint;typedef struct ajp_endpoint ajp_endpoint_t;struct ajp_worker;typedef struct ajp_worker ajp_worker_t;struct ajp_worker {    struct sockaddr_in worker_inet_addr; /* Contains host and port */    unsigned connect_retry_attempts;    char *name;     /*      * Open connections cache...     *     * 1. Critical section object to protect the cache.     * 2. Cache size.      * 3. An array of "open" endpoints.     */    JK_CRIT_SEC cs;    unsigned ep_cache_sz;    unsigned ep_mincache_sz;    unsigned ep_maxcache_sz;    ajp_endpoint_t **ep_cache;    int proto; /* PROTOCOL USED AJP13/AJP14 */        jk_login_service_t *login;        /* Weak secret similar with ajp12, used in ajp13 */     char *secret;    jk_worker_t worker;     /*     * Post physical connect handler.     * AJP14 will set here its login handler     */     int (* logon)(ajp_endpoint_t *ae,                  jk_logger_t    *l);    /*    * Handle Socket Timeouts    */    unsigned socket_timeout;    unsigned keepalive;    /*    * Handle Cache Timeouts    */    unsigned cache_timeout;};  /* * endpoint, the remote which will does the work */struct ajp_endpoint {    ajp_worker_t *worker;    jk_pool_t pool;    jk_pool_atom_t buf[BIG_POOL_SIZE];    int proto;  /* PROTOCOL USED AJP13/AJP14 */    int sd;    int reuse;    jk_endpoint_t endpoint;    unsigned left_bytes_to_send;    /* time of the last request       handled by this endpoint */    time_t last_access;};/* * little struct to avoid multiples ptr passing * this struct is ready to hold upload file fd * to add upload persistant storage */struct ajp_operation {    jk_msg_buf_t    *request;   /* original request storage */    jk_msg_buf_t    *reply;     /* reply storage (chuncked by ajp13 */    jk_msg_buf_t    *post;      /* small post data storage area */    int     uploadfd;           /* future persistant storage id */    int     recoverable;        /* if exchange could be conducted on another TC */};/* * Functions */int ajp_validate(jk_worker_t *pThis,                 jk_map_t    *props,                 jk_worker_env_t *we,                 jk_logger_t *l,                 int          proto);int ajp_init(jk_worker_t *pThis,             jk_map_t    *props,             jk_worker_env_t *we,             jk_logger_t *l,             int          proto);int ajp_destroy(jk_worker_t **pThis,                jk_logger_t *l,                int          proto);int JK_METHOD ajp_done(jk_endpoint_t **e,                       jk_logger_t    *l);int ajp_get_endpoint(jk_worker_t    *pThis,                     jk_endpoint_t **pend,                     jk_logger_t    *l,                     int             proto);int ajp_connect_to_endpoint(ajp_endpoint_t *ae,                            jk_logger_t    *l);void ajp_close_endpoint(ajp_endpoint_t *ae,                        jk_logger_t    *l);int ajp_connection_tcp_send_message(ajp_endpoint_t *ae,                                    jk_msg_buf_t   *msg,                                    jk_logger_t    *l);int ajp_connection_tcp_get_message(ajp_endpoint_t *ae,                                   jk_msg_buf_t   *msg,                                   jk_logger_t    *l);#ifdef __cplusplus}#endif /* __cplusplus */#endif /* JK_AJP_COMMON_H */

⌨️ 快捷键说明

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