diff options
Diffstat (limited to 'rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_uri_worker_map.h')
-rw-r--r-- | rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_uri_worker_map.h | 208 |
1 files changed, 208 insertions, 0 deletions
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_uri_worker_map.h b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_uri_worker_map.h new file mode 100644 index 00000000..30091dc4 --- /dev/null +++ b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_uri_worker_map.h @@ -0,0 +1,208 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/*************************************************************************** + * Description: URI to worker mapper header file * + * Author: Gal Shachor <shachor@il.ibm.com> * + * Version: $Revision: 705283 $ * + ***************************************************************************/ + +#ifndef JK_URI_WORKER_MAP_H +#define JK_URI_WORKER_MAP_H + + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +#include "jk_global.h" +#include "jk_map.h" +#include "jk_logger.h" +#include "jk_mt.h" + +#define MATCH_TYPE_EXACT 0x0001 +/* deprecated +#define MATCH_TYPE_CONTEXT 0x0002 + */ +/* match all context path URIs with a path component suffix */ +/* deprecated +#define MATCH_TYPE_CONTEXT_PATH 0x0004 + */ +/* deprecated +#define MATCH_TYPE_SUFFIX 0x0010 + */ +/* match all URIs of the form *ext */ +/* deprecated +#define MATCH_TYPE_GENERAL_SUFFIX 0x0020 + */ +/* match multiple wild characters (*) and (?) */ +#define MATCH_TYPE_WILDCHAR_PATH 0x0040 +#define MATCH_TYPE_NO_MATCH 0x1000 +#define MATCH_TYPE_DISABLED 0x2000 +/* deprecated +#define MATCH_TYPE_STOPPED 0x4000 + */ + +#define SOURCE_TYPE_WORKERDEF 0x0001 +#define SOURCE_TYPE_JKMOUNT 0x0002 +#define SOURCE_TYPE_URIMAP 0x0003 +#define SOURCE_TYPE_DISCOVER 0x0004 +#define SOURCE_TYPE_TEXT_WORKERDEF ("worker definition") +#define SOURCE_TYPE_TEXT_JKMOUNT ("JkMount") +#define SOURCE_TYPE_TEXT_URIMAP ("uriworkermap") +#define SOURCE_TYPE_TEXT_DISCOVER ("ajp14") + +#define JK_MAX_URI_LEN 4095 + +struct rule_extension +{ + /* reply_timeout overwrite */ + int reply_timeout; + /* activation state overwrites for load balancers */ + /* Number of elements in the array activations. */ + int activation_size; + /* Dynamically allocated array with one entry per lb member. */ + int *activation; + /* Temporary storage for the original extension strings. */ + char *active; + char *disabled; + char *stopped; + /* fail_on_status overwrites */ + /* Number of elements in the array fail_on_status. */ + int fail_on_status_size; + /* Dynamically allocated array with one entry per status. */ + int *fail_on_status; + /* Temporary storage for the original extension strings. */ + char *fail_on_status_str; + /* Use server error pages for responses >= 400. */ + int use_server_error_pages; +}; +typedef struct rule_extension rule_extension_t; + +struct uri_worker_record +{ + /* Original uri for logging */ + char *uri; + + /* Name of worker mapped */ + const char *worker_name; + + /* Base context */ + const char *context; + + /* Match type */ + unsigned int match_type; + + /* Definition source type */ + unsigned int source_type; + + /* char length of the context */ + size_t context_len; + + /* extended mapping properties */ + rule_extension_t extensions; +}; +typedef struct uri_worker_record uri_worker_record_t; + +struct jk_uri_worker_map +{ + /* Memory Pool */ + jk_pool_t p; + jk_pool_atom_t buf[BIG_POOL_SIZE]; + + /* Index 0 or 1, which map instance do we use */ + /* Needed to make map reload more atomically */ + int index; + + /* Memory Pool - cleared when doing reload */ + /* Use this pool to allocate objects, that are deleted */ + /* when the map gets dynamically reloaded from uriworkermap.properties. */ + jk_pool_t p_dyn[2]; + jk_pool_atom_t buf_dyn[2][BIG_POOL_SIZE]; + + /* map URI->WORKER */ + uri_worker_record_t **maps[2]; + + /* Map Number */ + unsigned int size[2]; + + /* Map Capacity */ + unsigned int capacity[2]; + + /* NoMap Number */ + unsigned int nosize[2]; + + /* Dynamic config support */ + + JK_CRIT_SEC cs; + /* should we forward potentially unsafe URLs */ + int reject_unsafe; + /* uriworkermap filename */ + const char *fname; + /* uriworkermap reload check interval */ + int reload; + /* Last modified time */ + time_t modified; + /* Last checked time */ + time_t checked; +}; +typedef struct jk_uri_worker_map jk_uri_worker_map_t; + +const char *uri_worker_map_get_source(uri_worker_record_t *uwr, jk_logger_t *l); + +char *uri_worker_map_get_match(uri_worker_record_t *uwr, char *buf, jk_logger_t *l); + +int uri_worker_map_alloc(jk_uri_worker_map_t **uw_map, + jk_map_t *init_data, jk_logger_t *l); + +int uri_worker_map_free(jk_uri_worker_map_t **uw_map, jk_logger_t *l); + +int uri_worker_map_open(jk_uri_worker_map_t *uw_map, + jk_map_t *init_data, jk_logger_t *l); + +void uri_worker_map_switch(jk_uri_worker_map_t *uw_map, jk_logger_t *l); + +void uri_worker_map_ext(jk_uri_worker_map_t *uw_map, jk_logger_t *l); + +int uri_worker_map_add(jk_uri_worker_map_t *uw_map, + const char *puri, const char *worker, + unsigned int source_type, jk_logger_t *l); + +const char *map_uri_to_worker(jk_uri_worker_map_t *uw_map, + const char *uri, const char *vhost, + jk_logger_t *l); + +const char *map_uri_to_worker_ext(jk_uri_worker_map_t *uw_map, + const char *uri, const char *vhost, + rule_extension_t **extensions, + int *index, + jk_logger_t *l); + +rule_extension_t *get_uri_to_worker_ext(jk_uri_worker_map_t *uw_map, + int index); + +int uri_worker_map_load(jk_uri_worker_map_t *uw_map, + jk_logger_t *l); + +int uri_worker_map_update(jk_uri_worker_map_t *uw_map, + int force, jk_logger_t *l); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ +#endif /* JK_URI_WORKER_MAP_H */ |