mturk 2002/09/23 10:38:04
Modified: jk/native2/common jk_uriMap.c
Log:
Rewrite the uriMap using hostname:port scheme.
The default host is now named *.
Revision Changes Path
1.41 +219 -351 jakarta-tomcat-connectors/jk/native2/common/jk_uriMap.c
Index: jk_uriMap.c
===================================================================
RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_uriMap.c,v
retrieving revision 1.40
retrieving revision 1.41
diff -u -r1.40 -r1.41
--- jk_uriMap.c 22 Sep 2002 09:58:16 -0000 1.40
+++ jk_uriMap.c 23 Sep 2002 17:38:04 -0000 1.41
@@ -77,10 +77,6 @@
static INLINE const char *jk2_findExtension(jk_env_t *env, const char *uri);
-static jk_uriEnv_t *jk2_uriMap_mapUri(jk_env_t *env, jk_uriMap_t *uriMap,
- const char *vhost,
- const char *uri);
-
static int jk2_uriMap_checkUri(jk_env_t *env, jk_uriMap_t *uriMap,
const char *uri);
@@ -140,46 +136,44 @@
uri in the table ( XXX use a map keyed on name ). In init() we process this
and set the right structures.
*/
-static int jk2_uriMap_addUriEnv( jk_env_t *env, jk_uriMap_t *uriMap, jk_uriEnv_t
*uriEnv )
+static int jk2_uriMap_addUriEnv(jk_env_t *env, jk_uriMap_t *uriMap,
+ jk_uriEnv_t *uriEnv)
{
- uriMap->maps->put( env, uriMap->maps, uriEnv->name, uriEnv, NULL );
- if( uriMap->mbean->debug > 0 )
+ uriMap->maps->put(env, uriMap->maps, uriEnv->name, uriEnv, NULL);
+ if (uriMap->mbean->debug > 0)
env->l->jkLog(env, env->l, JK_LOG_DEBUG,
- "uriMap.addUriEnv() %s %s %s\n", uriEnv->name,
uriEnv->virtual, uriEnv->uri);
+ "uriMap.addUriEnv() %s %s %s\n", uriEnv->name,
+ uriEnv->virtual, uriEnv->uri);
return JK_OK;
}
static int JK_METHOD jk2_uriMap_setProperty(jk_env_t *env, jk_bean_t *mbean,
- char *name, void *valueP)
+ char *name, void *valueP)
{
- jk_uriMap_t *uriMap=mbean->object;
- char *value=valueP;
+ jk_uriMap_t *uriMap = mbean->object;
+ char *value = valueP;
return JK_OK;
}
static jk_uriEnv_t *jk2_uriMap_prefixMap(jk_env_t *env, jk_uriMap_t *uriMap,
jk_map_t *mapTable, const char *uri,
- int uriLen, int reverse)
+ int uriLen)
{
- int best_match=0;
- jk_uriEnv_t *match=NULL;
+ int best_match = 0;
+ jk_uriEnv_t *match = NULL;
int i;
- int sz=mapTable->size( env, mapTable);
- for(i = 0 ; i < sz ; i++) {
- jk_uriEnv_t *uwr=mapTable->valueAt( env, mapTable, i);
-
- if( uriLen < uwr->prefix_len ) continue;
- if( strncmp( uri, uwr->prefix, uwr->prefix_len ) == 0 ) {
- if( uwr->prefix_len > best_match ) {
+ int sz = mapTable->size(env, mapTable);
+ for (i = 0; i < sz; i++) {
+ jk_uriEnv_t *uwr = mapTable->valueAt(env, mapTable, i);
+
+ if (uriLen < uwr->prefix_len)
+ continue;
+ if (strncmp(uri, uwr->prefix, uwr->prefix_len) == 0) {
+ if (uwr->prefix_len >best_match) {
best_match=uwr->prefix_len;
- if (reverse > 0) {
- if (uwr->reverse)
- match=uwr;
- }
- else if (!uwr->reverse)
- match=uwr;
+ match=uwr;
}
}
}
@@ -188,21 +182,19 @@
static jk_uriEnv_t *jk2_uriMap_exactMap(jk_env_t *env, jk_uriMap_t *uriMap,
jk_map_t *mapTable, const char *uri,
- int uriLen, int reverse)
+ int uriLen)
{
int i;
- int sz=mapTable->size( env, mapTable);
- for(i = 0 ; i < sz ; i++) {
- jk_uriEnv_t *uwr=mapTable->valueAt( env, mapTable, i);
+ int sz = mapTable->size(env, mapTable);
+ jk_uriEnv_t *match=NULL;
+
+ for (i = 0; i < sz; i++) {
+ jk_uriEnv_t *uwr = mapTable->valueAt( env, mapTable, i);
- if( uriLen != uwr->prefix_len ) continue;
- if( strncmp( uri, uwr->prefix, uriLen ) == 0 ) {
- if (reverse > 0) {
- if (uwr->reverse)
- return uwr;
- }
- else if (!uwr->reverse)
- return uwr;
+ if (uriLen != uwr->prefix_len)
+ continue;
+ if (strncmp(uri, uwr->prefix, uriLen) == 0) {
+ return uwr;
}
}
return NULL;
@@ -210,30 +202,26 @@
static jk_uriEnv_t *jk2_uriMap_suffixMap(jk_env_t *env, jk_uriMap_t *uriMap,
jk_map_t *mapTable, const char *suffix,
- int suffixLen, int reverse)
+ int suffixLen)
{
int i;
- int sz=mapTable->size( env, mapTable);
- for(i = 0 ; i < sz ; i++) {
- jk_uriEnv_t *uwr=mapTable->valueAt( env, mapTable, i);
+ int sz = mapTable->size( env, mapTable);
+
+ for (i = 0; i < sz; i++) {
+ jk_uriEnv_t *uwr = mapTable->valueAt(env, mapTable, i);
/* for WinXX, fix the JsP != jsp problems */
#ifdef WIN32
- if(0 == strcasecmp(suffix, uwr->suffix)) {
+ if (strcasecmp(suffix, uwr->suffix) == 0) {
#else
- if(0 == strcmp(suffix, uwr->suffix)) {
+ if (strcmp(suffix, uwr->suffix) == 0) {
#endif
- if( uriMap->mbean->debug > 0 ) {
+ if (uriMap->mbean->debug > 0) {
env->l->jkLog(env, env->l,JK_LOG_DEBUG,
"uriMap.mapUri() suffix match %s\n",
- uwr->suffix );
- }
- if (reverse > 0) {
- if (uwr->reverse)
- return uwr;
+ uwr->suffix);
}
- else if (!uwr->reverse)
- return uwr;
+ return uwr;
/* indentation trick */
#ifdef WIN32
}
@@ -246,224 +234,138 @@
/* Find the vhost */
static jk_uriEnv_t *jk2_uriMap_hostMap(jk_env_t *env, jk_uriMap_t *uriMap,
- const char *vhost)
+ const char *vhost, int port)
{
- int i;
-
- if( vhost!=NULL ) {
- int sz=uriMap->vhosts->size( env, uriMap->vhosts);
- for(i = 0 ; i < sz ; i++) {
- char *name=uriMap->vhosts->nameAt( env, uriMap->vhosts, i);
-
- /* Host name is not case sensitive */
- if( strcasecmp( name, vhost ) == 0 ) {
- return uriMap->vhosts->valueAt( env, uriMap->vhosts, i);
+ int i, j;
+ char *name;
+ char vs[1024];
+ char vv[1024];
+
+ int n = uriMap->vhosts->size(env, uriMap->vhosts);
+ if (port) {
+ sprintf(vs, "%s:%d", vhost ? vhost : "*", port);
+ sprintf(vs, "*:%d", port);
+ }
+ else
+ strcpy(vs, vhost ? vhost : "*");
+ for (i = 0 ; i < n ; i++) {
+ jk_uriEnv_t *uriEnv = uriMap->vhosts->valueAt(env, uriMap->vhosts, i);
+ name = uriMap->vhosts->nameAt(env, uriMap->vhosts, i);
+ /* Host name is not case sensitive */
+ if (strcasecmp(name, vs) == 0) {
+ if (port == 0 || port == uriEnv->port)
+ return uriEnv;
+ }
+ else if (port && strcasecmp(name, vv) == 0) {
+ return uriEnv;
+ }
+ else if (uriEnv->aliases) {
+ int m = uriEnv->aliases->size(env, uriEnv->aliases);
+ for (j = 0; j < m; j++) {
+ name = uriEnv->aliases->nameAt(env, uriEnv->aliases, j);
+ if (strcasecmp(name, vhost) == 0) {
+ if (port == 0 || port == uriEnv->port)
+ return uriEnv;
+ }
}
}
- /* Can't find vhost */
- return NULL;
}
- return uriMap->defaultVhost;
+ return uriMap->vhosts->get(env, uriMap->vhosts, "*");
}
-static void jk2_uriMap_correctHosts(jk_env_t *env, jk_uriMap_t *uriMap) {
- int i;
- jk_bean_t *mbean;
- /* XXX Make sure all vhosts are created and we didn't miss any */
- for(i = 0 ; i < uriMap->maps->size( env, uriMap->maps ) ; i++) {
- jk_uriEnv_t *uriEnv=uriMap->maps->valueAt( env, uriMap->maps, i );
+static int jk2_uriMap_init(jk_env_t *env, jk_uriMap_t *uriMap)
+{
+ int rc = JK_OK;
+ int i;
+ jk_workerEnv_t *workerEnv = uriMap->workerEnv;
+ jk_bean_t *mbean = env->getBean2(env, "uri", "*");
- char *vhost= uriEnv->virtual;
- if( vhost != NULL ) {
- jk_env_t *hostEnv=uriMap->vhosts->get( env, uriMap->vhosts,
- vhost );
- if( hostEnv == NULL ) {
- env->l->jkLog( env, env->l, JK_LOG_INFO,
- "uriMap: creating vhost %s\n", vhost);
- mbean=env->getBean2( env, "uri", vhost );
- if( mbean==NULL )
- mbean=env->createBean2(env, uriMap->pool,"uri", vhost);
- if( mbean==NULL || mbean->object==NULL ) {
- env->l->jkLog( env, env->l, JK_LOG_ERROR,
- "uriMap: can't create vhost object %s\n", vhost);
- continue;
- }
- uriMap->vhosts->put( env, uriMap->vhosts,
- vhost, mbean->object, NULL );
- }
+ /* create the default server */
+ if (mbean == NULL) {
+ mbean = env->createBean2(env, workerEnv->pool,"uri", "*");
+ if (mbean == NULL || mbean->object == NULL) {
+ env->l->jkLog(env, env->l, JK_LOG_ERROR,
+ "uriMap.factory() Fail to create default host\n");
+ return JK_ERR;
}
}
-}
-
-static void jk2_uriMap_correctWebapps(jk_env_t *env, jk_uriMap_t *uriMap) {
- int i;
- jk_bean_t *mbean;
-
- /* Init all contexts */
- /* For each context, init the local uri maps */
- for(i = 0 ; i < uriMap->maps->size( env, uriMap->maps ) ; i++) {
- jk_uriEnv_t *uriEnv=uriMap->maps->valueAt( env, uriMap->maps, i );
-
- char *vhost= uriEnv->virtual;
- jk_uriEnv_t *hostEnv=jk2_uriMap_hostMap( env, uriMap, vhost );
- char *context= uriEnv->contextPath;
- jk_uriEnv_t *ctxEnv;
-
- if( context==NULL ) {
- env->l->jkLog( env, env->l, JK_LOG_ERROR,
- "uriMap: no context %s\n", uriEnv->uri );
+ /* Initialize the context table */
+ for (i = 0; i < uriMap->maps->size(env, uriMap->maps); i++) {
+ jk_uriEnv_t *uriEnv = uriMap->maps->valueAt(env, uriMap->maps, i);
+ if (uriEnv == NULL)
continue;
- }
-
- ctxEnv=jk2_uriMap_prefixMap( env, uriMap, hostEnv->webapps, context,
strlen( context), -1);
- /* if not alredy created, create it */
- if( ctxEnv == NULL ) {
- env->l->jkLog( env, env->l, JK_LOG_INFO,
- "uriMap: creating context %s\n", vhost);
- mbean=env->getBean2( env, "uri", context );
- if( mbean==NULL )
- mbean=env->createBean2(env, uriMap->pool,"uri", context );
- if( mbean==NULL || mbean->object==NULL ) {
- env->l->jkLog( env, env->l, JK_LOG_ERROR,
- "uriMap: can't create context object %s\n",context);
- continue;
+ if (uriEnv->match_type == MATCH_TYPE_HOST) {
+ jk2_map_default_create(env, &uriEnv->webapps, uriMap->pool);
+ if (uriEnv->virtual != NULL && strlen(uriEnv->virtual)) {
+ uriMap->vhosts->put(env, uriMap->vhosts,
+ uriEnv->virtual, uriEnv, NULL);
}
- ctxEnv=mbean->object;
- ctxEnv->match_type = MATCH_TYPE_CONTEXT;
- hostEnv->webapps->put( env, hostEnv->webapps, context, ctxEnv, NULL );
}
}
-}
-
-static int jk2_uriMap_init(jk_env_t *env, jk_uriMap_t *uriMap)
-{
- int rc=JK_OK;
- int i;
- jk_workerEnv_t *workerEnv=uriMap->workerEnv;
- jk_bean_t *mbean;
- jk_uriEnv_t *uriEnv;
-
- mbean=env->getBean2( env, "uri", "" );
- if( mbean==NULL )
- mbean=env->createBean2(env, workerEnv->pool,"uri", "");
- if( mbean==NULL || mbean->object==NULL ) {
- env->l->jkLog(env, env->l, JK_LOG_ERROR,
- "uriMap.factory() Fail to create default host\n");
- return JK_ERR;
- }
- uriMap->defaultVhost=mbean->object;
-
- if( uriMap->mbean->debug > 5 )
- env->l->jkLog(env, env->l, JK_LOG_DEBUG, "uriMap.init() set default
host\n");
- /* XXX Initializes vhosts from uris */
- jk2_uriMap_correctHosts(env,uriMap);
-
- /* Initialize the vhosts table */
- for(i = 0 ; i < uriMap->maps->size( env, uriMap->maps ) ; i++) {
- uriEnv=uriMap->maps->valueAt( env, uriMap->maps, i );
-
- if( uriEnv == NULL ) continue;
- if( uriEnv->match_type== MATCH_TYPE_HOST ) {
- jk2_map_default_create( env, & uriEnv->webapps, uriMap->pool );
- if( uriEnv->virtual!=NULL ) {
- uriMap->vhosts->put( env, uriMap->vhosts,
- uriEnv->virtual, uriEnv, NULL );
- }
- if( uriMap->mbean->debug > 5 )
- env->l->jkLog(env, env->l, JK_LOG_DEBUG,
- "uriMap.init() loaded host %s\n",uriEnv->virtual);
- }
- }
-
-
- /* Add the vhost aliases ( for each vhost, by looking in the aliases ) */
- for(i = 0 ; i < uriMap->maps->size( env, uriMap->maps ) ; i++) {
- uriEnv=uriMap->maps->valueAt( env, uriMap->maps, i );
- if( uriEnv->match_type== MATCH_TYPE_HOST &&
- uriEnv->virtual!=NULL ) {
-
-
- /* XXX TODO */
-
- }
- }
-
/** Make sure each vhost has a default context
*/
- for(i = 0 ; i < uriMap->vhosts->size( env, uriMap->vhosts ) ; i++) {
- jk_uriEnv_t *hostEnv=uriMap->vhosts->valueAt( env, uriMap->vhosts, i );
+ for(i = 0; i < uriMap->vhosts->size(env, uriMap->vhosts); i++) {
+ jk_uriEnv_t *hostEnv = uriMap->vhosts->valueAt(env, uriMap->vhosts, i);
jk_uriEnv_t *rootCtx;
char *uriPath;
- if( hostEnv->virtual != NULL ) {
- uriPath=env->tmpPool->calloc( env, env->tmpPool,
- strlen( hostEnv->virtual ) + 3 );
- strcpy( uriPath, hostEnv->virtual );
- strcat( uriPath, "/" );
+ if (hostEnv->virtual != NULL) {
+ uriPath=env->tmpPool->calloc(env, env->tmpPool,
+ strlen(hostEnv->virtual) + 3);
+ strcpy(uriPath, hostEnv->virtual);
+ strcat(uriPath, "/");
} else {
- uriPath="/";
+ uriPath = "/";
}
- rootCtx=env->getByName2( env, "uri", uriPath );
- if( rootCtx==NULL ) {
- env->createBean2( env, uriMap->mbean->pool, "uri", uriPath );
- rootCtx=env->getByName2( env, "uri", uriPath );
- if( uriMap->mbean->debug > 0 )
+ rootCtx = env->getByName2(env, "uri", uriPath);
+ if (rootCtx == NULL) {
+ env->createBean2(env, uriMap->mbean->pool, "uri", uriPath);
+ rootCtx = env->getByName2(env, "uri", uriPath);
+ if (uriMap->mbean->debug > 0)
env->l->jkLog(env, env->l, JK_LOG_DEBUG,
- "uriMap.init() Create default context %s\n", uriPath
);
- rootCtx->mbean->setAttribute( env, rootCtx->mbean, "context", "/" );
+ "uriMap.init() Create default context %s\n", uriPath);
+ rootCtx->mbean->setAttribute(env, rootCtx->mbean, "context", "/");
}
}
-
- uriEnv=env->getByName2( env, "uri", "/" );
- if( uriEnv==NULL ) {
- env->createBean2( env, uriMap->mbean->pool, "uri", "/" );
- uriEnv=env->getByName2( env, "uri", "/" );
- if( uriMap->mbean->debug > 0 )
- env->l->jkLog(env, env->l, JK_LOG_DEBUG,
- "uriMap.init() Create default context / ( for default
host )\n" );
- uriEnv->mbean->setAttribute( env, uriEnv->mbean, "context", "/" );
- }
-
/* Init all contexts */
/* For each context, init the local uri maps */
- for(i = 0 ; i < uriMap->maps->size( env, uriMap->maps ) ; i++) {
- jk_uriEnv_t *uriEnv=uriMap->maps->valueAt( env, uriMap->maps, i );
+ for (i = 0; i < uriMap->maps->size(env, uriMap->maps); i++) {
+ jk_uriEnv_t *uriEnv = uriMap->maps->valueAt(env, uriMap->maps, i);
char *uri;
char *context;
- if( uriEnv==NULL ) {
+ if (uriEnv == NULL) {
env->l->jkLog(env, env->l, JK_LOG_INFO,
"uriMap.init() NPE\n");
}
- uri=uriEnv->uri;
- context= uriEnv->contextPath;
+ uri = uriEnv->uri;
+ context = uriEnv->contextPath;
- if( uri!=NULL && context!=NULL && strcmp( uri, context ) == 0 ) {
- char *vhost= uriEnv->virtual;
- jk_uriEnv_t *hostEnv=jk2_uriMap_hostMap( env, uriMap, vhost );
+ if (uri != NULL && context != NULL && strcmp(uri, context) == 0) {
+ char *vhost = uriEnv->virtual;
+ int port = uriEnv->port;
+ jk_uriEnv_t *hostEnv = jk2_uriMap_hostMap(env, uriMap, vhost, port);
if (!hostEnv)
continue;
- if( uriMap->mbean->debug > 5 )
+ if ( uriMap->mbean->debug > 5)
env->l->jkLog(env, env->l, JK_LOG_DEBUG,
"uriMap.init() loaded context %s %s %#lx %#lx %#lx\n",
uriEnv->virtual, context, hostEnv, hostEnv->webapps,
uriMap->pool);
- uriEnv->match_type=MATCH_TYPE_CONTEXT;
+ uriEnv->match_type = MATCH_TYPE_CONTEXT;
- uriEnv->prefix=context;
- uriEnv->prefix_len=strlen( context );
- hostEnv->webapps->put( env, hostEnv->webapps, context, uriEnv, NULL );
- jk2_map_default_create( env, & uriEnv->exactMatch, uriMap->pool );
- jk2_map_default_create( env, & uriEnv->prefixMatch, uriMap->pool );
- jk2_map_default_create( env, & uriEnv->suffixMatch, uriMap->pool );
-
- /* add default mappings for WEB-INF, META-INF, servlet/, .jsp */
+ uriEnv->prefix = context;
+ uriEnv->prefix_len = strlen(context);
+ hostEnv->webapps->put(env, hostEnv->webapps, context, uriEnv, NULL);
+ jk2_map_default_create(env, &uriEnv->exactMatch, uriMap->pool);
+ jk2_map_default_create(env, &uriEnv->prefixMatch, uriMap->pool);
+ jk2_map_default_create(env, &uriEnv->suffixMatch, uriMap->pool);
}
}
- if( uriMap->mbean->debug > 5 )
+ if (uriMap->mbean->debug > 5)
env->l->jkLog(env, env->l, JK_LOG_DEBUG,
"uriMap.init() processing mappings\n");
@@ -472,35 +374,45 @@
it won't have too bigger benefits, the number of mappings per ctx is
typically
small
*/
- for(i = 0 ; i < uriMap->maps->size( env, uriMap->maps ) ; i++) {
- jk_uriEnv_t *uriEnv=uriMap->maps->valueAt( env, uriMap->maps, i );
+ for (i = 0; i < uriMap->maps->size(env, uriMap->maps); i++) {
+ jk_uriEnv_t *uriEnv = uriMap->maps->valueAt(env, uriMap->maps, i);
- char *vhost= uriEnv->virtual;
- jk_uriEnv_t *hostEnv=jk2_uriMap_hostMap( env, uriMap, vhost );
+ char *vhost = uriEnv->virtual;
+ int port = uriEnv->port;
+ jk_uriEnv_t *hostEnv = jk2_uriMap_hostMap(env, uriMap, vhost, port);
- char *uri= uriEnv->uri;
+ char *uri = uriEnv->uri;
jk_uriEnv_t *ctxEnv;
- if( hostEnv==NULL ) continue;
- if( uri==NULL ) continue;
- uriEnv->uriMap=uriMap;
- uriEnv->init( env, uriEnv );
+ if (hostEnv == NULL)
+ continue;
+ if (uri == NULL )
+ continue;
+ uriEnv->uriMap = uriMap;
+ uriEnv->init(env, uriEnv);
- if( uri==NULL ) continue;
+ if (uri == NULL)
+ continue;
- ctxEnv=jk2_uriMap_prefixMap( env, uriMap, hostEnv->webapps, uri, strlen(
uri ), -1 );
+ ctxEnv = jk2_uriMap_prefixMap(env, uriMap, hostEnv->webapps, uri,
+ strlen(uri));
- if( ctxEnv==NULL ) {
- env->l->jkLog(env, env->l, JK_LOG_INFO, "uriMap.init() no context for
%s\n", uri);
+ if (ctxEnv == NULL) {
+ env->l->jkLog(env, env->l, JK_LOG_INFO,
+ "uriMap.init() no context for %s\n", uri);
return JK_ERR;
}
- if( MATCH_TYPE_EXACT == uriEnv->match_type ) {
- ctxEnv->exactMatch->add( env, ctxEnv->exactMatch, uri, uriEnv );
- } else if( MATCH_TYPE_SUFFIX == uriEnv->match_type ) {
- ctxEnv->suffixMatch->add( env, ctxEnv->suffixMatch, uri, uriEnv );
- } else if (MATCH_TYPE_PREFIX== uriEnv->match_type ) {
- ctxEnv->prefixMatch->add( env, ctxEnv->prefixMatch, uri, uriEnv );
+ switch (uriEnv->match_type) {
+ case MATCH_TYPE_EXACT:
+ ctxEnv->exactMatch->add(env, ctxEnv->exactMatch, uri, uriEnv);
+ break;
+ case MATCH_TYPE_SUFFIX:
+ ctxEnv->suffixMatch->add(env, ctxEnv->suffixMatch, uri, uriEnv);
+ break;
+ case MATCH_TYPE_PREFIX:
+ ctxEnv->prefixMatch->add(env, ctxEnv->prefixMatch, uri, uriEnv);
+ break;
}
}
return rc;
@@ -556,211 +468,167 @@
#define SAFE_URI_SIZE 8192
-static jk_uriEnv_t *jk2_uriMap_map(jk_env_t *env, jk_uriMap_t *uriMap,
- const char *vhost,
- const char *uri, int reverse)
+static jk_uriEnv_t *jk2_uriMap_mapUri(jk_env_t *env, jk_uriMap_t *uriMap,
+ const char *vhost, int port,
+ const char *uri)
{
int best_match = -1;
int longest_match = 0;
- char * clean_uri = NULL;
- char *url_rewrite=NULL;
+ char *clean_uri = NULL;
+ char *url_rewrite = NULL;
const char *suffix;
int uriLen;
jk_uriEnv_t *hostEnv;
jk_uriEnv_t *ctxEnv;
jk_uriEnv_t *match;
-
+
/* Ugly hack to avoid using non-thread safe code.
Modify the uri in place for uri session encoding, then
restore it to the original. That works since the processing
happens in a single thred. A better solution is to allocate
the jk_ws_service and it's pool and pass it as param */
- char origChar='\0';
+ char origChar = '\0';
/* XXX - need to make sure prefix match take precedence over
extension match ( now it doesn't )
*/
- if( uriMap == NULL || uri==NULL )
- return NULL;
+ if (uriMap == NULL || uri==NULL)
+ return NULL;
- if( uriMap->mbean->debug > 1 )
+ if (uriMap->mbean->debug > 1)
env->l->jkLog(env, env->l, JK_LOG_DEBUG,
- "uriMap.mapUri() %s %s\n", vhost, uri);
-
- if( '/' != uri[0]) {
+ "uriMap.mapUri() hostname %s port %d uri %s\n", vhost, port,
uri);
+ if (uri[0] != '/') {
env->l->jkLog(env, env->l, JK_LOG_ERROR,
"uriMap.mapUri() uri must start with /\n");
return NULL;
}
- hostEnv=jk2_uriMap_hostMap( env, uriMap, vhost );
+ hostEnv = jk2_uriMap_hostMap(env, uriMap, vhost, port);
if (!hostEnv) {
env->l->jkLog(env, env->l, JK_LOG_INFO,
"uriMap.mapUri() cannot find host %s/\n", vhost);
return NULL;
}
- if( uriMap->mbean->debug > 1 )
+ if (uriMap->mbean->debug > 1)
env->l->jkLog(env, env->l, JK_LOG_DEBUG,
"uriMap.mapUri() found host %s\n", hostEnv->virtual);
url_rewrite = strstr(uri, JK_PATH_SESSION_IDENTIFIER);
- if(url_rewrite) {
- origChar=*url_rewrite;
+ if (url_rewrite) {
+ origChar = *url_rewrite;
*url_rewrite = '\0';
- if( uriMap->mbean->debug > 0 )
+ if (uriMap->mbean->debug > 0)
env->l->jkLog(env, env->l, JK_LOG_DEBUG,
- "uriMap.mapUri() rewrote uri %s \n",uri );
+ "uriMap.mapUri() rewrote uri %s \n",uri);
}
- uriLen=strlen( uri );
+ uriLen = strlen(uri);
/* Map the context */
- ctxEnv=jk2_uriMap_prefixMap( env, uriMap, hostEnv->webapps, uri, uriLen, 0 );
+ ctxEnv = jk2_uriMap_prefixMap(env, uriMap, hostEnv->webapps, uri, uriLen);
- if( ctxEnv==NULL ) {
+ if (ctxEnv == NULL) {
env->l->jkLog(env, env->l, JK_LOG_INFO,
"uriMap.mapUri() no context %s\n", uri);
return NULL;
}
- if( uriMap->mbean->debug > 1 )
+ if (uriMap->mbean->debug > 1)
env->l->jkLog(env, env->l, JK_LOG_DEBUG,
"uriMap.mapUri() found ctx %s\n", ctxEnv->uri);
/* As per Servlet spec, do exact match first */
- match=jk2_uriMap_exactMap( env, uriMap, ctxEnv->exactMatch, uri, uriLen,
reverse );
- if( match != NULL ) {
+ match = jk2_uriMap_exactMap(env, uriMap, ctxEnv->exactMatch, uri, uriLen);
+ if (match != NULL) {
/* restore */
- if( url_rewrite ) *url_rewrite=origChar;
- if( uriMap->mbean->debug > 0 )
+ if (url_rewrite)
+ *url_rewrite = origChar;
+ if (uriMap->mbean->debug > 0)
env->l->jkLog(env, env->l, JK_LOG_DEBUG,
"uriMap.mapUri() exact match %s %s\n",
- uri, match->workerName );
+ uri, match->workerName);
return match;
}
/* Then prefix match */
- match=jk2_uriMap_prefixMap( env, uriMap, ctxEnv->prefixMatch, uri, uriLen,
reverse );
- if( match != NULL ) {
- char c=uri[match->prefix_len];
+ match = jk2_uriMap_prefixMap(env, uriMap, ctxEnv->prefixMatch, uri, uriLen);
+ if (match != NULL) {
+ char c = uri[match->prefix_len];
/* XXX Filter prefix matches to allow only exact
matches with an optional path_info or query string at end.
Fixes Bugzilla#12141, needs review..
*/
- if (( uriLen > match->prefix_len && ( c=='/' || c=='?' ) ) ||
- uriLen == match->prefix_len ) {
+ if ((uriLen > match->prefix_len && (c=='/' || c=='?')) ||
+ uriLen == match->prefix_len) {
/* restore */
- if( url_rewrite ) *url_rewrite=origChar;
- if( uriMap->mbean->debug > 0 )
+ if (url_rewrite)
+ *url_rewrite = origChar;
+ if (uriMap->mbean->debug > 0)
env->l->jkLog(env, env->l, JK_LOG_DEBUG,
"uriMap.mapUri() prefix match %s %s\n",
- uri, match->workerName );
+ uri, match->workerName);
return match;
}
}
/* And extension match at the end */
/* Only once, no need to compute it for each extension match */
- suffix=jk2_findExtension( env, uri );
- if( suffix!=NULL ) {
- match=jk2_uriMap_suffixMap( env, uriMap, ctxEnv->suffixMatch,
- suffix, strlen( suffix ), reverse);
- if( match != NULL ) {
+ suffix = jk2_findExtension(env, uri);
+ if (suffix != NULL) {
+ match = jk2_uriMap_suffixMap(env, uriMap, ctxEnv->suffixMatch,
+ suffix, strlen(suffix));
+ if (match != NULL) {
/* restore */
- if( url_rewrite ) *url_rewrite=origChar;
- if( uriMap->mbean->debug > 0 )
+ if (url_rewrite)
+ *url_rewrite = origChar;
+ if (uriMap->mbean->debug > 0)
env->l->jkLog(env, env->l, JK_LOG_DEBUG,
"uriMap.mapUri() extension match %s %s\n",
- uri, match->workerName );
+ uri, match->workerName);
return match;
}
}
-/* for(i = 0 ; i < ctxEnv->ctxMap->size( env, ctxEnv->ctxMap ) ; i++) { */
-/* jk_uriEnv_t *uwr=ctxEnv->ctxMap->valueAt( env, ctxEnv->ctxMap, i ); */
-
-/* if(MATCH_TYPE_GENERAL_SUFFIX == uwr->match_type) { */
-/* if(uwr->prefix_len >= longest_match) { */
-/* int suffix_start=jk2_last_index_of(uri,uwr->suffix[0]); */
-/* if (suffix_start>=0 && 0==strcmp(uri+suffix_start,uwr->suffix))
{ */
-/* if( uriMap->mbean->debug > 0 ) */
-/* env->l->jkLog(env, env->l, JK_LOG_INFO, */
-/* "uriMap.mapUri() general suffix match %s\n",
*/
-/* uwr->suffix ); */
-/* longest_match = uwr->prefix_len; */
-/* best_match = i; */
-/* } */
-/* } */
-/* } else if(MATCH_TYPE_CONTEXT_PATH == uwr->match_type) { */
-/* char *suffix_path = NULL; */
-/* if (strlen(uri) > 1 && (suffix_path = strchr(uri+1,'/')) != NULL) {
*/
-/* if (0 == strncmp(suffix_path,uwr->suffix, strlen(uwr->suffix)))
{ */
-/* if(uwr->prefix_len >= longest_match) { */
-/* env->l->jkLog(env, env->l, JK_LOG_INFO, */
-/* "jk_uri_worker_map_t::map_uri_to_worker, "
*/
-/* "Found a general context path match %s ->
*%s\n", */
-/* uwr->worker_name, uwr->suffix ); */
-/* longest_match = uwr->prefix_len; */
-/* best_match = i; */
-/* } */
-/* } */
-/* } */
-/* } */
-/* } */
-
/* restore */
- if( url_rewrite )
- *url_rewrite=origChar;
+ if (url_rewrite)
+ *url_rewrite = origChar;
- if( uriMap->mbean->debug > 1 )
+ if (uriMap->mbean->debug > 1)
env->l->jkLog(env, env->l, JK_LOG_DEBUG,
"uriMap.mapUri() no match found\n");
return NULL;
}
-static jk_uriEnv_t *jk2_uriMap_mapUri(jk_env_t *env, jk_uriMap_t *uriMap,
- const char *vhost, const char *uri)
-{
- jk_uriEnv_t *match;
-
- match = jk2_uriMap_map(env, uriMap, vhost, uri, 0);
- if (match) {
- jk_uriEnv_t *rmatch = jk2_uriMap_map(env, uriMap, vhost, uri, 1);
- if (rmatch)
- return NULL;
- }
- return match;
-}
-
int JK_METHOD jk2_uriMap_factory(jk_env_t *env, jk_pool_t *pool, jk_bean_t *result,
const char *type, const char *name)
{
jk_uriMap_t *uriMap;
uriMap = (jk_uriMap_t *)pool->calloc(env, pool, sizeof(jk_uriMap_t));
- if( ! uriMap) {
+ if (!uriMap) {
env->l->jkLog(env, env->l, JK_LOG_ERROR,
"uriMap.factory() OutOfMemoryError\n");
return JK_ERR;
}
- uriMap->pool=pool;
+ uriMap->pool = pool;
- jk2_map_default_create( env, &uriMap->maps, pool );
- jk2_map_default_create( env, &uriMap->vhosts, pool );
+ jk2_map_default_create(env, &uriMap->maps, pool);
+ jk2_map_default_create(env, &uriMap->vhosts, pool);
- uriMap->init=jk2_uriMap_init;
- uriMap->destroy=jk2_uriMap_destroy;
- uriMap->addUriEnv=jk2_uriMap_addUriEnv;
- uriMap->checkUri=jk2_uriMap_checkUri;
- uriMap->mapUri=jk2_uriMap_mapUri;
+ uriMap->init = jk2_uriMap_init;
+ uriMap->destroy = jk2_uriMap_destroy;
+ uriMap->addUriEnv = jk2_uriMap_addUriEnv;
+ uriMap->checkUri = jk2_uriMap_checkUri;
+ uriMap->mapUri = jk2_uriMap_mapUri;
- result->object=uriMap;
- result->setAttribute=jk2_uriMap_setProperty;
- uriMap->mbean=result;
+ result->object = uriMap;
+ result->setAttribute = jk2_uriMap_setProperty;
+ uriMap->mbean = result;
return JK_OK;
}
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>