blob: f8d93eb6ad7c156aeafef116e6113db5a8a9c1a3 [file] [log] [blame]
/*
* Copyright 1999-2004 The Apache Software Foundation
*
* Licensed 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.
*/
/**
* URI enviroment. All properties associated with a particular URI will be
* stored here. This coresponds to a per_dir structure in Apache.
*
* Replaces uri_worker_map, etc.
*
* Author: Costin Manolache
*/
#ifndef JK_URIENV_H
#define JK_URIENV_H
#include "jk_logger.h"
#include "jk_endpoint.h"
#include "jk_worker.h"
#include "jk_map.h"
#include "jk_uriMap.h"
#ifdef __cplusplus
extern "C"
{
#endif /* __cplusplus */
struct jk_worker;
struct jk_endpoint;
struct jk_env;
struct jk_uri_worker_map;
struct jk_map;
struct jk_webapp;
struct jk_uriEnv;
typedef struct jk_uriEnv jk_uriEnv_t;
/* Standard exact mapping */
#define MATCH_TYPE_EXACT (0)
/* Standard prefix mapping */
#define MATCH_TYPE_PREFIX (1)
/* Standard suffix mapping ( *.jsp ) */
#define MATCH_TYPE_SUFFIX (2)
/* Special: match all URIs of the form *ext */
#define MATCH_TYPE_GENERAL_SUFFIX (3)
/* Special: match all context path URIs with a path component suffix */
#define MATCH_TYPE_CONTEXT_PATH (4)
/* The uriEnv corresponds to a virtual host */
#define MATCH_TYPE_HOST (5)
/* Top level context mapping. WEB-INF and META-INF will be checked,
and the information will be passed to tomcat
*/
#define MATCH_TYPE_CONTEXT (6)
/* Regular Expression match */
#define MATCH_TYPE_REGEXP (7)
struct jk_uriEnv
{
struct jk_bean *mbean;
struct jk_pool *pool;
struct jk_workerEnv *workerEnv;
struct jk_uriMap *uriMap;
/* Generic name/value properties.
*/
struct jk_map *properties;
/* -------------------- Properties extracted from the URI name ---------- */
/** Full name */
char *name;
/* Virtual server handled - '*' means 'global' ( visible in all
* virtual servers ). Part of the uri name.
*/
char *virtual;
/* Virtual server port - '0' means 'all' ( visible in all
* ports on the virtual servers ). Part of the uri name.
*/
int port;
/* Original uri ( unparsed ). Part of the uri name.
*/
char *uri;
/* -------------------- Properties set using setAttribute ---------- */
/** ContextPath. Set with 'context' attribute.
*/
char *contextPath;
int ctxt_len;
/** ServletName. Set with 'servlet' attribute.
*/
char *servlet;
int servletId;
/** Group, set with 'group' attribute. Defaults to 'lb'.
*/
char *workerName;
struct jk_worker *worker;
/** For MATCH_TYPE_HOST, the list of aliases for the virtual host.
* Set using (multi-value ) 'alias' attribute on vhost uris.
*/
struct jk_map *aliases;
/* If set we'll use apr_time to get the request time in microseconds and update
the scoreboard to reflect that.
*/
int timing;
/* -------------------- Properties extracted from the uri, at init() -------------------- */
/* Extracted suffix, for extension-based mathces */
char *suffix;
int suffix_len;
/* Prefix based mapping. Same a contextPath for MATCH_TYPE_CONTEXT
*/
char *prefix;
int prefix_len;
int match_type;
/* Regular Expression structure
*/
void *regexp;
/** For MATCH_TYPE_HOST, the list of webapps in that host
*/
struct jk_map *webapps;
/** For MATCH_TYPE_CONTEXT, the list of local mappings
*/
struct jk_map *exactMatch;
struct jk_map *prefixMatch;
struct jk_map *suffixMatch;
struct jk_map *regexpMatch;
/** For MATCH_TYPE_CONTEXT, the config used to read properties
for that context.
For MATCH_TYPE_HOST, the config used to read contexts
For MATCH_TYPE_HOST/default it also contains all vhosts
If NULL - no config was attached.
( this will be used in future for run-time deployment )
*/
struct jk_config *config;
/* -------------------- Other properties -------------------- */
/** Different apps can have different loggers.
*/
struct jk_logger *l;
/* Environment variables support
*/
int envvars_in_use;
struct jk_map *envvars;
int merged;
int inherit_globals;
/** XXX .
*/
/* int status; */
/* int virtualPort; */
/* -------------------- Methods -------------------- */
int (*init) (struct jk_env * env, struct jk_uriEnv * _this);
};
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* JK_URIENV_H */