You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by mt...@apache.org on 2002/09/23 19:39:24 UTC

cvs commit: jakarta-tomcat-connectors/jk/native2/common jk_uriEnv.c

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:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


RE: cvs commit: jakarta-tomcat-connectors/jk/native2/common jk_uriEnv.c

Posted by Mladen Turk <mt...@mappingsoft.com>.
OK will make the uri parser on my own. Not such a big deal.

> -----Original Message-----
> From: news [mailto:news@main.gmane.org] On Behalf Of Costin Manolache
> 
> As I mentioned, I prefer doing this _after_ jk2.0 ( i.e. the first 
> milestone), possibly in a branch. 
>

MT


--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re: cvs commit: jakarta-tomcat-connectors/jk/native2/common jk_uriEnv.c

Posted by Costin Manolache <cm...@yahoo.com>.
As I mentioned, I prefer doing this _after_ jk2.0 ( i.e. the first 
milestone), possibly in a branch. 

Alternatively, you can use ifdefs - but please keep the old code 
at least for a while. When we decide to require apr, all the old
code can/should be removed - the pools, socket, etc. We keep it 
for a single reason - to support the possible cases when apr can't 
be used and build problems on those platforms. 

I'm -1 on making such a big change ( requiring apr/aprutil ) right
now, and not only because of compilation issues with apache1.3 - when 
we do it we should go all the way.

Costin

mturk@apache.org wrote:

> 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;
>    }
>   -

-- 
Costin



--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>