You are viewing a plain text version of this content. The canonical link for it is here.
Posted to apreq-cvs@httpd.apache.org by jo...@apache.org on 2003/04/21 21:40:12 UTC

cvs commit: httpd-apreq-2/t cookie.c

joes        2003/04/21 12:40:11

  Modified:    src      apreq_cookie.c apreq_cookie.h
               t        cookie.c
  Log:
  Make cookie API more like the param API.
  
  Revision  Changes    Path
  1.11      +34 -33    httpd-apreq-2/src/apreq_cookie.c
  
  Index: apreq_cookie.c
  ===================================================================
  RCS file: /home/cvs/httpd-apreq-2/src/apreq_cookie.c,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- apreq_cookie.c	21 Apr 2003 18:45:57 -0000	1.10
  +++ apreq_cookie.c	21 Apr 2003 19:40:11 -0000	1.11
  @@ -79,13 +79,12 @@
       return apreq_add_cookie(jar,c);
   }
   
  -APREQ_DECLARE(void) apreq_cookie_expires(apreq_cookie_t *c, 
  +APREQ_DECLARE(void) apreq_cookie_expires(apr_pool_t *p,
  +                                         apreq_cookie_t *c, 
                                            const char *time_str)
   {
       if ( c->version == NETSCAPE )
  -        c->time.expires = apreq_expires(apreq_env_pool(c->env), 
  -                                        time_str,
  -                                        NSCOOKIE);
  +        c->time.expires = apreq_expires(p, time_str, NSCOOKIE);
       else
           c->time.max_age = apreq_atol(time_str);
   }
  @@ -107,7 +106,7 @@
           if (j == NULL || apreq_jar_nelts(j) == 0) 
               return APREQ_COOKIE_VERSION;
   
  -        else if (apreq_table_do(has_rfc_cookie, NULL, j) == 1)
  +        else if (apreq_table_do(has_rfc_cookie, NULL, j->cookies) == 1)
               return NETSCAPE;
   
           else
  @@ -117,9 +116,10 @@
           return RFC;
   }
   
  -APREQ_DECLARE(apr_status_t) apreq_cookie_attr(apreq_cookie_t *c, 
  -                                              char *attr,
  -                                              char *val)
  +static apr_status_t apreq_cookie_attr(apr_pool_t *p,
  +                                      apreq_cookie_t *c, 
  +                                      char *attr,
  +                                      char *val)
   {
       dAPREQ_LOG;
   
  @@ -140,13 +140,11 @@
               return APR_SUCCESS;
           }
           else {
  -            apreq_log(APREQ_WARN APR_BADARG, c->env, 
  -                       "Bad Version number (no digits found).");
               return APR_BADARG;
           }
   
       case 'e': case 'm': /* expires, max-age */
  -        apreq_cookie_expires(c, val);
  +        apreq_cookie_expires(p, c, val);
           return APR_SUCCESS;
   
       case 'd':
  @@ -181,23 +179,17 @@
   
       };
   
  -    apreq_log(APREQ_WARN APR_ENOTIMPL, c->env,
  -               "unknown cookie attribute: `%s' => `%s'", 
  -               attr, val);
  -
       return APR_ENOTIMPL;
   }
   
  -APREQ_DECLARE(apreq_cookie_t *) apreq_make_cookie(void *ctx, 
  +APREQ_DECLARE(apreq_cookie_t *) apreq_make_cookie(apr_pool_t *p, 
                                     const apreq_cookie_version_t version,
                                     const char *name, const apr_size_t nlen,
                                     const char *value, const apr_size_t vlen)
   {
  -    apr_pool_t *p = apreq_env_pool(ctx);
       apreq_cookie_t *c = apr_palloc(p, vlen + sizeof *c);
       apreq_value_t *v = &c->v;
   
  -    c->env = ctx;
       v->size = vlen;
       v->name = apr_pstrmemdup(p, name, nlen);
       memcpy(v->data, value, vlen);
  @@ -305,9 +297,13 @@
           j = apreq_env_jar(ctx, NULL);
           if ( j != NULL )
               return j;
  -        
  +
  +        j = apr_palloc(p, sizeof *j);
  +        j->pool = p;
  +        j->env = ctx;
  +        j->cookies = apreq_table_make(p, APREQ_NELTS);
  +
           data = apreq_env_cookie(ctx);
  -        j = apreq_table_make(apreq_env_pool(ctx), APREQ_NELTS);
   
           /* XXX: potential race condition here 
              between env_jar fetch and env_jar set.  */
  @@ -318,7 +314,10 @@
               return j;
       }
       else {
  -        j = apreq_table_make(p, APREQ_NELTS);
  +        j = apr_palloc(p, sizeof *j);
  +        j->pool = p;
  +        j->env = ctx;
  +        j->cookies = apreq_table_make(p, APREQ_NELTS);
       }
   
       origin = data;
  @@ -377,8 +376,8 @@
               status = get_pair(&data, &name, &nlen, &value, &vlen);
   
               if (status == APR_SUCCESS)
  -                apreq_cookie_attr(c, apr_pstrmemdup(p, name, nlen),
  -                                     apr_pstrmemdup(p,value, vlen));    
  +                apreq_cookie_attr(p, c, apr_pstrmemdup(p, name, nlen),
  +                                        apr_pstrmemdup(p,value, vlen));    
               else {
                   c->v.status = status;
                   apreq_log(APREQ_WARN c->v.status, ctx,
  @@ -390,7 +389,7 @@
               status = get_pair(&data, &name, &nlen, &value, &vlen);
   
               if (status == APR_SUCCESS) {
  -                c = apreq_make_cookie(ctx, version, name, nlen, 
  +                c = apreq_make_cookie(p, version, name, nlen, 
                                         value, vlen);
                   apreq_log(APREQ_DEBUG status, ctx, 
                             "adding cookie: %s => %s", c->v.name, c->v.data);
  @@ -485,39 +484,41 @@
           return NULL;
   }
   
  -APREQ_DECLARE(apr_status_t) apreq_bake_cookie(const apreq_cookie_t *c)
  +APREQ_DECLARE(apr_status_t) apreq_bake_cookie(const apreq_cookie_t *c,
  +                                              void *ctx)
   {
  -    char *s = apreq_cookie_as_string(apreq_env_pool(c->env),c);
  +    char *s = apreq_cookie_as_string(apreq_env_pool(ctx),c);
       dAPREQ_LOG;
   
       if (s == NULL) {
  -        apreq_log(APREQ_ERROR APR_ENAMETOOLONG, c->env, 
  +        apreq_log(APREQ_ERROR APR_ENAMETOOLONG, ctx, 
                     "Serialized cookie exceeds APREQ_COOKIE_LENGTH = %d", 
                       APREQ_COOKIE_LENGTH);
           return APR_ENAMETOOLONG;
       }
   
  -    return apreq_env_set_cookie(c->env, s);
  +    return apreq_env_set_cookie(ctx, s);
   }
   
  -APREQ_DECLARE(apr_status_t) apreq_bake2_cookie(const apreq_cookie_t *c)
  +APREQ_DECLARE(apr_status_t) apreq_bake2_cookie(const apreq_cookie_t *c,
  +                                               void *ctx)
   {
  -    char *s = apreq_cookie_as_string(apreq_env_pool(c->env),c);
  +    char *s = apreq_cookie_as_string(apreq_env_pool(ctx),c);
       dAPREQ_LOG;
   
       if ( s == NULL ) {
  -        apreq_log(APREQ_ERROR APR_ENAMETOOLONG, c->env,
  +        apreq_log(APREQ_ERROR APR_ENAMETOOLONG, ctx,
                     "Serialized cookie exceeds APREQ_COOKIE_LENGTH = %d", 
                       APREQ_COOKIE_LENGTH);
           return APR_ENAMETOOLONG;
       }
       else if ( c->version == NETSCAPE ) {
  -        apreq_log(APREQ_ERROR APR_EMISMATCH, c->env,
  +        apreq_log(APREQ_ERROR APR_EMISMATCH, ctx,
                     "Cannot bake2 a Netscape cookie: %s", s);
           return APR_EMISMATCH;
       }
   
  -    return apreq_env_set_cookie2(c->env, s);
  +    return apreq_env_set_cookie2(ctx, s);
   }
   
   
  
  
  
  1.10      +15 -15    httpd-apreq-2/src/apreq_cookie.h
  
  Index: apreq_cookie.h
  ===================================================================
  RCS file: /home/cvs/httpd-apreq-2/src/apreq_cookie.h,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- apreq_cookie.h	18 Apr 2003 20:15:50 -0000	1.9
  +++ apreq_cookie.h	21 Apr 2003 19:40:11 -0000	1.10
  @@ -7,7 +7,11 @@
   extern "C" {
   #endif 
   
  -typedef struct apreq_table_t apreq_jar_t;
  +typedef struct apreq_jar_t {
  +    apreq_table_t *cookies;
  +    apr_pool_t    *pool;
  +    void          *env;
  +} apreq_jar_t;
   
   typedef enum { NETSCAPE, RFC } apreq_cookie_version_t;
   
  @@ -31,8 +35,6 @@
           const char *expires; 
       } time;
   
  -    void           *env;
  -
       apreq_value_t   v;           /* "raw" value (extended struct) */
   
   } apreq_cookie_t;
  @@ -52,8 +54,8 @@
    */
   
   int apreq_jar_items(apreq_jar_t *jar);
  -#define apreq_jar_items(j) apreq_table_nelts(j)
  -#define apreq_jar_nelts(j) apreq_table_nelts(j)
  +#define apreq_jar_items(j) apreq_table_nelts(j->cookies)
  +#define apreq_jar_nelts(j) apreq_table_nelts(j->cookies)
   
   /**
    * Fetches a cookie from the jar
  @@ -64,7 +66,7 @@
   
   apreq_cookie_t *apreq_cookie(const apreq_jar_t *jar, const char *name);
   #define apreq_cookie(j,k) apreq_value_to_cookie(apreq_char_to_value( \
  -                              apreq_table_get(j,k)))
  +                              apreq_table_get((j)->cookies,k)))
   
   /**
    * Adds a cookie by pushing it to the bottom of the jar.
  @@ -74,7 +76,7 @@
    */
   
   apr_status_t apreq_add_cookie(apreq_jar_t *jar, const apreq_cookie_t *c);
  -#define apreq_add_cookie(jar,c)  apreq_table_add(jar, &(c)->v)
  +#define apreq_add_cookie(jar,c)  apreq_table_add(jar->cookies, &(c)->v)
   
   /**
    * Parse the incoming "Cookie:" headers into a cookie jar.
  @@ -109,15 +111,11 @@
    * @param value The cookie's value.
    * @param vlen  Length of value.
    */
  -APREQ_DECLARE(apreq_cookie_t *) apreq_make_cookie(void *ctx, 
  +APREQ_DECLARE(apreq_cookie_t *) apreq_make_cookie(apr_pool_t *p, 
                                     const apreq_cookie_version_t version,
                                     const char *name, const apr_size_t nlen, 
                                     const char *value, const apr_size_t vlen);
   
  -
  -APREQ_DECLARE(apr_status_t) apreq_cookie_attr(apreq_cookie_t *c, 
  -                                              char *attr, char *val);
  -
   /**
    * Returns a string that represents the cookie as it would appear 
    * in a valid "Set-Cookie*" header.
  @@ -152,7 +150,7 @@
    * replace with this value instead.  The time_str should be in a format
    * that apreq_atod() can understand, namely /[+-]?\d+\s*[YMDhms]/.
    */
  -APREQ_DECLARE(void) apreq_cookie_expires(apreq_cookie_t *c, 
  +APREQ_DECLARE(void) apreq_cookie_expires(apr_pool_t *p, apreq_cookie_t *c, 
                                            const char *time_str);
   
   /**
  @@ -160,7 +158,8 @@
    *
    * @param c The cookie.
    */
  -APREQ_DECLARE(apr_status_t) apreq_bake_cookie(const apreq_cookie_t *c);
  +APREQ_DECLARE(apr_status_t) apreq_bake_cookie(const apreq_cookie_t *c, 
  +                                              void *ctx);
   
   /* XXX: how about baking whole cookie jars, too ??? */
   
  @@ -169,7 +168,8 @@
    *
    * @param c The cookie.
    */
  -APREQ_DECLARE(apr_status_t) apreq_bake2_cookie(const apreq_cookie_t *c);
  +APREQ_DECLARE(apr_status_t) apreq_bake2_cookie(const apreq_cookie_t *c,
  +                                               void *ctx);
   
   APREQ_DECLARE(apreq_cookie_version_t) apreq_ua_cookie_version(void *ctx);
   
  
  
  
  1.2       +12 -12    httpd-apreq-2/t/cookie.c
  
  Index: cookie.c
  ===================================================================
  RCS file: /home/cvs/httpd-apreq-2/t/cookie.c,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- cookie.c	21 Apr 2003 18:45:57 -0000	1.1
  +++ cookie.c	21 Apr 2003 19:40:11 -0000	1.2
  @@ -71,22 +71,22 @@
   {
       const char *val;
   
  -    val = apreq_table_get(j,"a");
  +    val = apreq_table_get(j->cookies,"a");
       CuAssertStrEquals(tc,"1",val);
  -    val = apreq_table_get(j,"b");
  +    val = apreq_table_get(j->cookies,"b");
       CuAssertStrEquals(tc,"2",val);
   
  -    val = apreq_table_get(j,"foo");
  +    val = apreq_table_get(j->cookies,"foo");
       CuAssertStrEquals(tc,"bar",val);
  -    val = apreq_table_get(j,"fl");
  +    val = apreq_table_get(j->cookies,"fl");
       CuAssertStrEquals(tc,"left",val);
  -    val = apreq_table_get(j,"fr");
  +    val = apreq_table_get(j->cookies,"fr");
       CuAssertStrEquals(tc,"right",val);
  -    val = apreq_table_get(j,"frl");
  +    val = apreq_table_get(j->cookies,"frl");
       CuAssertStrEquals(tc,"right-left",val);
  -    val = apreq_table_get(j,"flr");
  +    val = apreq_table_get(j->cookies,"flr");
       CuAssertStrEquals(tc,"left-right",val);
  -    val = apreq_table_get(j,"fll");
  +    val = apreq_table_get(j->cookies,"fll");
       CuAssertStrEquals(tc,"left-left",val);
   }
   
  @@ -110,17 +110,16 @@
       CuAssertStrEquals(tc, "foo=bar; path=/quux; domain=example.com",
                         apreq_cookie_as_string(p,c));
   
  -    apreq_cookie_expires(c, "+1y");
  +    apreq_cookie_expires(p, c, "+1y");
       CuAssertStrEquals(tc,apr_pstrcat(p,
                            "foo=bar; path=/quux; domain=example.com; expires=", 
                            expires, NULL), apreq_cookie_as_string(p,c));
  -
   }
   
   
   static void rfc_cookie(CuTest *tc)
   {
  -    apreq_cookie_t *c = apreq_make_cookie(NULL,RFC,"rfc",3,"out",3);
  +    apreq_cookie_t *c = apreq_make_cookie(p,RFC,"rfc",3,"out",3);
       apreq_cookie_version_t version = RFC;
       long expires = apreq_atol("+3m");
   
  @@ -137,7 +136,8 @@
                 "rfc=out; Version=1; path=/quux; domain=example.com",
                         apreq_cookie_as_string(p,c));
   
  -    apreq_cookie_expires(c, "+3m");
  +
  +    apreq_cookie_expires(p, c, "+3m");
       CuAssertStrEquals(tc,apr_psprintf(p,
            "rfc=out; Version=1; path=/quux; domain=example.com; max-age=%ld", 
                  expires), apreq_cookie_as_string(p,c));