costin 02/04/29 23:44:57 Modified: jk/native2/common jk_uriEnv.c Log: A bit of reorganization to support the new maping. Note that the 'special' maps are recognized but not curently used in uriMap, we may add them later. Revision Changes Path 1.13 +133 -55 jakarta-tomcat-connectors/jk/native2/common/jk_uriEnv.c Index: jk_uriEnv.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_uriEnv.c,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- jk_uriEnv.c 29 Apr 2002 19:35:35 -0000 1.12 +++ jk_uriEnv.c 30 Apr 2002 06:44:57 -0000 1.13 @@ -69,41 +69,51 @@ #include "jk_uriMap.h" #include "jk_registry.h" -static int jk2_uriEnv_init(jk_env_t *env, jk_uriEnv_t *uriEnv); +/** Parse the name: + VHOST/PATH -static int jk2_uriEnv_parseUri( jk_env_t *env, jk_uriEnv_t *uriEnv, - char *name) + If VHOST is empty, we map to the default host. + + The PATH will be further split in CONTEXT/LOCALPATH during init ( after + we have all uris, including the context paths ). +*/ +static int jk2_uriEnv_parseName( jk_env_t *env, jk_uriEnv_t *uriEnv, + char *name) { char *n=name; - char *slash=strchr( n, '/' ); + char *slash=strchr( name, '/' ); + fprintf( stderr, "XXX parseURI %s\n", name ); + if( slash==NULL ) { - env->l->jkLog( env, env->l, JK_LOG_ERROR, - "uriEnv.parseUri(): At least a '/' must be included %s\n", name); - return JK_ERR; + /* That's a virtual host definition ( no actual mapping, just global + * settings like aliases, etc + */ + uriEnv->match_type= MATCH_TYPE_HOST; + if( name[0]=='\0' ) { + uriEnv->virtual=NULL; /* "" for the default host */ + } else { + uriEnv->virtual=name; + } + return JK_OK; } - /* Cut the "uri." prefix, if any */ - if( (strncmp( name, "uri.", 4 ) == 0 )|| - (strncmp( name, "uri:", 4 ) == 0 )) { - n=name+4; - } - /* Cut the " */ - if( *n == '"' ) n++; - /* If it doesn't start with /, it must be a vhost */ - if( *n != '/' ) { - char *portIdx=strchr( n, ':' ); - char *vhost=NULL; - - /* XXX Extract and set the vhost */ + /* If it doesn't start with /, it must have a vhost */ + if( *name != '/' ) { + jk_uriEnv_t *vhost; + // char *portIdx=strchr( n, ':' ); + uriEnv->virtual=uriEnv->pool->calloc( env, uriEnv->pool, slash - name + 2 ); + strncpy( uriEnv->virtual, name, slash-name ); } n=slash; uriEnv->uri=uriEnv->pool->pstrdup(env, uriEnv->pool, n); - jk2_uriEnv_init(env, uriEnv); - /* env->l->jkLog( env, env->l, JK_LOG_INFO, */ - /* "uriEnv.parseUri() Setting path %s for %s\n", n, name); */ + + /* No further init - will be called by uriMap.init() */ + env->l->jkLog( env, env->l, JK_LOG_INFO, + "uriEnv.parseUri() Parsing %s to host=%s uri=%s\n", name, + uriEnv->virtual, uriEnv->uri ); return JK_OK; } @@ -122,7 +132,7 @@ return NULL; } -static int JK_METHOD jk2_uriEnv_setProperty(jk_env_t *env, +static int JK_METHOD jk2_uriEnv_setAttribute(jk_env_t *env, jk_bean_t *mbean, char *nameParam, void *valueP) @@ -135,20 +145,50 @@ uriEnv->properties->add( env ,uriEnv->properties, name, val ); - if( strcmp("worker", name) == 0 ) { + + if( strcmp("group", name) == 0 ) { uriEnv->workerName=val; - } - if( strcmp("debug", name) == 0 ) { + return JK_OK; + } else if( strcmp("context", name) == 0 ) { + jk_bean_t *ctxMB; + jk_uriEnv_t *ctxEnv; + char *cname; + + uriEnv->contextPath=val; + uriEnv->ctxt_len=strlen( val ); + + if( strcmp( val, uriEnv->uri ) == 0 ) { + uriEnv->match_type= MATCH_TYPE_CONTEXT; + } + return JK_OK; + } else if( strcmp("servlet", name) == 0 ) { + uriEnv->servlet=val; + } else if( strcmp("alias", name) == 0 ) { + if( uriEnv->match_type == MATCH_TYPE_HOST ) { + if( uriEnv->aliases==NULL ) { + jk2_map_default_create( env, &uriEnv->aliases, mbean->pool ); + } + uriEnv->aliases->put( env, uriEnv->aliases, val, uriEnv, NULL ); + } + } else if( strcmp("debug", name) == 0 ) { uriEnv->debug=atoi( val ); - } - if( strcmp("path", name) == 0 ) { + return JK_OK; + } + + /* OLD - DEPRECATED */ + if( strcmp("worker", name) == 0 ) { + uriEnv->workerName=val; + } else if( strcmp("path", name) == 0 ) { if( val==NULL ) uriEnv->uri=NULL; else uriEnv->uri=uriEnv->pool->pstrdup(env, uriEnv->pool, val); } if( strcmp("uri", name) == 0 ) { - jk2_uriEnv_parseUri( env, uriEnv, val); + jk2_uriEnv_parseName( env, uriEnv, val); + } + if( strcmp("name", name) == 0 ) { + jk2_uriEnv_parseName( env, uriEnv, val); } if( strcmp("vhost", name) == 0 ) { if( val==NULL ) @@ -156,7 +196,6 @@ else uriEnv->virtual=uriEnv->pool->pstrdup(env, uriEnv->pool, val); } - return JK_OK; } @@ -167,6 +206,29 @@ char *asterisk; char *uri=uriEnv->pool->pstrdup( env, uriEnv->pool, uriEnv->uri); + /* Set the worker */ + char *wname=uriEnv->workerName; + + if( uriEnv->workerName == NULL ) { + /* The default worker */ + uriEnv->workerName=uriEnv->uriMap->workerEnv->defaultWorker->mbean->name;; + uriEnv->worker=uriEnv->uriMap->workerEnv->defaultWorker; + + env->l->jkLog(env, env->l, JK_LOG_DEBUG, + "uriMap.init() map %s %s\n", + uriEnv->uri, uriEnv->uriMap->workerEnv->defaultWorker->mbean->name); + } + + if( uriEnv->workerName != NULL && uriEnv->worker==NULL ) { + uriEnv->worker= env->getByName( env, wname ); + if( uriEnv->worker==NULL ) { + env->l->jkLog(env, env->l, JK_LOG_ERROR, + "uriMap.init() map to invalid worker %s %s\n", + uriEnv->uri, uriEnv->workerName); + /* XXX that's allways a 'lb' worker, create it */ + } + } + if( uri==NULL ) return JK_ERR; @@ -191,21 +253,38 @@ uriEnv->prefix = uri; uriEnv->prefix_len =strlen( uriEnv->prefix ); uriEnv->suffix = NULL; - uriEnv->match_type = MATCH_TYPE_EXACT; + if( uriEnv->match_type != MATCH_TYPE_CONTEXT && + uriEnv->match_type != MATCH_TYPE_HOST ) { + /* Context and host maps do not have ASTERISK */ + uriEnv->match_type = MATCH_TYPE_EXACT; + } if( uriEnv->debug > 0 ) { - env->l->jkLog(env, env->l, JK_LOG_INFO, - "uriMap.addMapping() exact mapping %s=%s was added\n", - uri, uriEnv->workerName); + if( uriEnv->match_type == MATCH_TYPE_CONTEXT ) { + env->l->jkLog(env, env->l, JK_LOG_INFO, + "uriMap.addMapping() context mapping %s=%s \n", + uriEnv->prefix, uriEnv->workerName); + + } else if( uriEnv->match_type == MATCH_TYPE_HOST ) { + env->l->jkLog(env, env->l, JK_LOG_INFO, + "uriMap.addMapping() host mapping %s=%s \n", + uriEnv->virtual, uriEnv->workerName); + } else { + env->l->jkLog(env, env->l, JK_LOG_INFO, + "uriMap.addMapping() exact mapping %s=%s \n", + uriEnv->prefix, uriEnv->workerName); + } } return JK_OK; } /* * We have an * in the uri. Check the type. - * - /ASTERISK/PREFIX - * * - /context/ASTERISK.suffix * - /context/PREFIX/ASTERISK + * + * Unsupported: + * - context path: /ASTERISK/prefix + * - general suffix rule /context/prefix/ASTERISKsuffix */ asterisk--; if ('/' == asterisk[0]) { @@ -222,9 +301,9 @@ "Into jk_uri_worker_map_t::uri_worker_map_open, " "general context path rule %s * %s -> %s was added\n", uri, asterisk + 2, uriEnv->workerName); - + } } else if ('.' == asterisk[2]) { - /* suffix rule: /foo/bar/ASTERISK.extension */ + /* suffix rule: /context/ASTERISK.extension */ asterisk[1] = '\0'; asterisk[2] = '\0'; uriEnv->prefix = uri; @@ -233,11 +312,11 @@ uriEnv->match_type = MATCH_TYPE_SUFFIX; if( uriEnv->debug > 0 ) { env->l->jkLog(env, env->l, JK_LOG_INFO, - "uriMap.addMapping() suffix mapping %s.%s=%s was added\n", - uri, asterisk + 3, uriEnv->workerName); + "uriMap.addMapping() suffix mapping %s .%s=%s was added\n", + uriEnv->prefix, uriEnv->suffix, uriEnv->workerName); } } else if ('\0' != asterisk[2]) { - /* general suffix rule /foo/bar/ASTERISKextraData */ + /* general suffix rule /context/prefix/ASTERISKextraData */ asterisk[1] = '\0'; uriEnv->suffix = asterisk + 2; uriEnv->prefix = uri; @@ -245,11 +324,11 @@ uriEnv->match_type = MATCH_TYPE_GENERAL_SUFFIX; if( uriEnv->debug > 0 ) { env->l->jkLog(env, env->l, JK_LOG_INFO, - "uriMap.addMapping() general suffix mapping %s.%s=%s\n", + "uriMap.addMapping() general suffix mapping %s.%s=%s\n", uri, asterisk + 2, uriEnv->workerName); } } else { - /* context based /foo/bar/ASTERISK */ + /* context based /context/prefix/ASTERISK */ asterisk[1] = '\0'; uriEnv->suffix = NULL; uriEnv->prefix = uri; @@ -258,7 +337,7 @@ if( uriEnv->debug > 0 ) { env->l->jkLog(env, env->l, JK_LOG_INFO, "uriMap.addMapping() prefix mapping %s=%s\n", - uri, uriEnv->workerName); + uriEnv->prefix, uriEnv->workerName); } } } else { @@ -270,22 +349,20 @@ uriEnv->match_type = MATCH_TYPE_PREFIX; if( uriEnv->debug > 0 ) { env->l->jkLog(env, env->l, JK_LOG_INFO, - "uriMap.addMapping() prefix mapping2 %s=%s\n", + "uriMap.addMapping() prefix mapping2 %s=%s\n", uri, uriEnv->workerName); } } - return JK_OK; } static char *myAttInfo[]={ "host", "uri", "worker", NULL }; - + int JK_METHOD jk2_uriEnv_factory(jk_env_t *env, jk_pool_t *pool, jk_bean_t *result, const char *type, const char *name) { jk_pool_t *uriPool; -// int err; jk_uriEnv_t *uriEnv; uriPool=(jk_pool_t *)pool->create( env, pool, @@ -298,22 +375,23 @@ jk2_map_default_create( env, &uriEnv->properties, uriPool ); + uriEnv->debug=10; uriEnv->init=jk2_uriEnv_init; - result->setAttribute=jk2_uriEnv_setProperty; + result->setAttribute=jk2_uriEnv_setAttribute; result->getAttribute=jk2_uriEnv_getAttribute; uriEnv->mbean=result; result->object=uriEnv; result->getAttributeInfo=myAttInfo; - - /* The name is a path */ - if( strchr( name, '/' ) != NULL ) { - jk2_uriEnv_setProperty( env, result, "uri", (char *)name ); - } + + uriEnv->name=result->localName; + jk2_uriEnv_parseName( env, uriEnv, result->localName); uriEnv->workerEnv=env->getByName( env, "workerEnv" ); uriEnv->workerEnv->uriMap->addUriEnv( env, uriEnv->workerEnv->uriMap, uriEnv ); + uriEnv->uriMap=uriEnv->workerEnv->uriMap; + return JK_OK; }
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>