mturk 2002/09/23 10:39:24 Modified: jk/native2/common jk_uriEnv.c Log: Rewrite the uriEnv using the apr_uri_t. Revision Changes Path 1.27 +105 -83 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.26 retrieving revision 1.27 diff -u -r1.26 -r1.27 --- jk_uriEnv.c 22 Sep 2002 02:50:42 -0000 1.26 +++ jk_uriEnv.c 23 Sep 2002 17:39:24 -0000 1.27 @@ -69,6 +69,7 @@ #include "jk_uriMap.h" #include "jk_registry.h" +#include "apr_uri.h" /** Parse the name: VHOST/PATH @@ -80,35 +81,41 @@ static int jk2_uriEnv_parseName( jk_env_t *env, jk_uriEnv_t *uriEnv, char *name) { - char *n=name; - char *slash=strchr( name, '/' ); - - /* fprintf( stderr, "XXX parseURI %s\n", name ); */ + + apr_uri_t uri; + char s[1024]; + + /* If it uri starts with / then it is simple + * default host uri + */ + if (*name == '/') + strcpy(s, name); + else { + strcpy(s, "http://"); + strcat(s, name); + } + env->l->jkLog(env, env->l, JK_LOG_DEBUG, + "uriEnv.parseName() uri %s name %s real %s\n", + uriEnv->name, name, s); - if( slash==NULL ) { - /* 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; + if (apr_uri_parse(uriEnv->pool->_private, s, &uri) == APR_SUCCESS) { + + uriEnv->port = uri.port; + if (uri.hostname) { + if (!uriEnv->port) + uriEnv->virtual = uri.hostname; + else + uriEnv->virtual = apr_pstrcat(uriEnv->pool->_private, + uri.hostname, ":", uri.port_str, NULL); } + else + uriEnv->virtual = "*"; + uriEnv->uri = uri.path; + if (!uri.path) + uriEnv->match_type = MATCH_TYPE_HOST; return JK_OK; } - - /* If it doesn't start with /, it must have a vhost */ - if( *name != '/' ) { - 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); - - return JK_OK; + return JK_ERR; } static void * JK_METHOD jk2_uriEnv_getAttribute(jk_env_t *env, jk_bean_t *bean, @@ -134,59 +141,71 @@ jk_uriEnv_t *uriEnv=mbean->object; char *valueParam=valueP; - char *name=uriEnv->pool->pstrdup(env,uriEnv->pool, nameParam); - char *val=uriEnv->pool->pstrdup(env,uriEnv->pool, valueParam); + char *name = uriEnv->pool->pstrdup(env,uriEnv->pool, nameParam); + char *val = uriEnv->pool->pstrdup(env,uriEnv->pool, valueParam); - uriEnv->properties->add( env ,uriEnv->properties, - name, val ); + uriEnv->properties->add(env ,uriEnv->properties, + name, val); - if( strcmp("group", name) == 0 ) { - uriEnv->workerName=val; + if (strcmp("group", name) == 0) { + uriEnv->workerName = val; return JK_OK; - } else if( strcmp("context", name) == 0 ) { - + } + else if (strcmp("context", name) == 0) { uriEnv->contextPath=val; - uriEnv->ctxt_len=strlen( val ); + uriEnv->ctxt_len = strlen(val); - if( strcmp( val, uriEnv->uri ) == 0 ) { - uriEnv->match_type= MATCH_TYPE_CONTEXT; + if (strcmp(val, uriEnv->uri) == 0) { + uriEnv->match_type = MATCH_TYPE_CONTEXT; } return JK_OK; - } else if( strcmp("servlet", name) == 0 ) { + } + else if (strcmp("servlet", name) == 0) { uriEnv->servlet=val; - } else if( strcmp("timing", name) == 0 ) { - uriEnv->timing=atoi( val ); - } else if( strcmp("reverse", name) == 0 ) { - uriEnv->reverse=atoi( 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 ); + } + else if (strcmp("timing", name) == 0) { + uriEnv->timing = atoi(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 ); + uriEnv->aliases->put(env, uriEnv->aliases, val, uriEnv, NULL); } } - - /* 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_parseName( env, uriEnv, val); - } - if( strcmp("name", name) == 0 ) { - jk2_uriEnv_parseName( env, uriEnv, val); - } - if( strcmp("vhost", name) == 0 ) { - if( val==NULL ) - uriEnv->virtual=NULL; + else { + /* OLD - DEPRECATED */ + int d = 1; + if (strcmp("worker", name) == 0) { + d = 1; + 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); + } + else if (strcmp("uri", name) == 0) { + jk2_uriEnv_parseName(env, uriEnv, val); + } + else if (strcmp("name", name) == 0) { + jk2_uriEnv_parseName(env, uriEnv, val); + } + else if (strcmp("vhost", name) == 0) { + if (val == NULL) + uriEnv->virtual = NULL; + else + uriEnv->virtual = uriEnv->pool->pstrdup(env, uriEnv->pool, val); + } else - uriEnv->virtual=uriEnv->pool->pstrdup(env, uriEnv->pool, val); + d = 0; + if (d) + env->l->jkLog(env, env->l, JK_LOG_INFO, + "uriEnv.setAttribute() the %s directive is depriciated\n", + name); + } return JK_OK; } @@ -379,26 +398,29 @@ uriEnv=(jk_uriEnv_t *)pool->calloc(env, uriPool, sizeof(jk_uriEnv_t)); - uriEnv->pool=uriPool; + uriEnv->pool = uriPool; - jk2_map_default_create( env, &uriEnv->properties, uriPool ); + jk2_map_default_create(env, &uriEnv->properties, uriPool); + + uriEnv->init = jk2_uriEnv_init; - uriEnv->init=jk2_uriEnv_init; + result->setAttribute = jk2_uriEnv_setAttribute; + result->getAttribute = jk2_uriEnv_getAttribute; + uriEnv->mbean = result; + result->object = uriEnv; + result->getAttributeInfo = myAttInfo; - result->setAttribute=jk2_uriEnv_setAttribute; - result->getAttribute=jk2_uriEnv_getAttribute; - uriEnv->mbean=result; - result->object=uriEnv; - result->getAttributeInfo=myAttInfo; - - 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; + uriEnv->name = result->localName; + if (jk2_uriEnv_parseName(env, uriEnv, result->localName) != JK_OK) { + env->l->jkLog(env, env->l, JK_LOG_ERROR, + "uriEnv.factory() error parsing %s\n", + uriEnv->name); + return JK_ERR; + } + 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]>