You are viewing a plain text version of this content. The canonical link for it is here.
Posted to rivet-dev@tcl.apache.org by da...@apache.org on 2002/12/14 20:04:35 UTC

cvs commit: tcl-rivet/src TclWeb.h TclWebapache.c apache_request.c apache_request.h mod_rivet.h rivetCore.c

davidw      2002/12/14 11:04:35

  Modified:    .        ChangeLog
               src      TclWeb.h TclWebapache.c apache_request.c
                        apache_request.h mod_rivet.h rivetCore.c
  Log:
  * src/rivetCore.c: Implemented Tcl commands (via objv[0]) to retrieve
    variables from different, specified sources (query string,
    POST). (David Brancato).
  
  * src/mod_rivet.h: Added defines for variable sources. (David
    Brancato).
  
  * src/apache_request.c: Added functions to get query and post
    params. (David Brancato).
  
  * src/TclWebapache.c: Implemented TclWeb.h API change. (David
    Brancato).
  
  * src/TclWeb.h: Changed API to include a source option in order to
    indicate the origin (query string, POST) of a variable.  (David
    Brancato).
  
  Revision  Changes    Path
  1.89      +19 -0     tcl-rivet/ChangeLog
  
  Index: ChangeLog
  ===================================================================
  RCS file: /home/cvs/tcl-rivet/ChangeLog,v
  retrieving revision 1.88
  retrieving revision 1.89
  diff -u -r1.88 -r1.89
  --- ChangeLog	14 Dec 2002 01:03:51 -0000	1.88
  +++ ChangeLog	14 Dec 2002 19:04:35 -0000	1.89
  @@ -1,3 +1,22 @@
  +2002-12-14  David N. Welton  <da...@dedasys.com>
  +
  +	* src/rivetCore.c: Implemented Tcl commands (via objv[0]) to
  +	retrieve variables from different, specified sources (query
  +	string, POST). (David Brancato).
  +
  +	* src/mod_rivet.h: Added defines for variable sources. (David
  +	Brancato).
  +
  +	* src/apache_request.c: Added functions to get query and post
  +	params. (David Brancato).
  +
  +	* src/TclWebapache.c: Implemented TclWeb.h API change. (David
  +	Brancato).
  +
  +	* src/TclWeb.h: Changed API to include a source option in order to
  +	indicate the origin (query string, POST) of a variable.  (David
  +	Brancato).
  +
   2002-12-13  David N. Welton  <da...@dedasys.com>
   
   	* src/mod_rivet.c (Rivet_InitTclStuff): Apache actually loads all
  
  
  
  1.19      +7 -7      tcl-rivet/src/TclWeb.h
  
  Index: TclWeb.h
  ===================================================================
  RCS file: /home/cvs/tcl-rivet/src/TclWeb.h,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- TclWeb.h	22 Oct 2002 18:40:53 -0000	1.18
  +++ TclWeb.h	14 Dec 2002 19:04:35 -0000	1.19
  @@ -100,17 +100,17 @@
   
   int TclWeb_MakeURL(Tcl_Obj *result, char *filename, TclWebRequest *req);
   
  -int TclWeb_GetVar(Tcl_Obj *result, char *varname, TclWebRequest *req);
  +int TclWeb_GetVar(Tcl_Obj *result, char *varname, int source, TclWebRequest *req);
   
  -int TclWeb_GetVarAsList(Tcl_Obj *result, char *varname, TclWebRequest *req);
  +int TclWeb_GetVarAsList(Tcl_Obj *result, char *varname, int source, TclWebRequest *req);
   
  -int TclWeb_VarExists(Tcl_Obj *result, char *varname, TclWebRequest *req);
  +int TclWeb_VarExists(Tcl_Obj *result, char *varname, int source, TclWebRequest *req);
   
  -int TclWeb_VarNumber(Tcl_Obj *result, TclWebRequest *req);
  +int TclWeb_VarNumber(Tcl_Obj *result, int source, TclWebRequest *req);
   
  -int TclWeb_GetVarNames(Tcl_Obj *result, TclWebRequest *req);
  +int TclWeb_GetVarNames(Tcl_Obj *result, int source, TclWebRequest *req);
   
  -int TclWeb_GetAllVars(Tcl_Obj *result, TclWebRequest *req);
  +int TclWeb_GetAllVars(Tcl_Obj *result, int source, TclWebRequest *req);
   
   int TclWeb_GetEnvVars(Tcl_Obj *envvar, TclWebRequest *req);
   
  
  
  
  1.38      +70 -18    tcl-rivet/src/TclWebapache.c
  
  Index: TclWebapache.c
  ===================================================================
  RCS file: /home/cvs/tcl-rivet/src/TclWebapache.c,v
  retrieving revision 1.37
  retrieving revision 1.38
  diff -u -r1.37 -r1.38
  --- TclWebapache.c	6 Dec 2002 01:20:26 -0000	1.37
  +++ TclWebapache.c	14 Dec 2002 19:04:35 -0000	1.38
  @@ -134,16 +134,25 @@
   }
   
   int
  -TclWeb_GetVar(Tcl_Obj *result, char *varname, TclWebRequest *req)
  +TclWeb_GetVar(Tcl_Obj *result, char *varname, int source, TclWebRequest *req)
   {
  -    int i;
  +    int i, j;
       array_header *parmsarray = ap_table_elts(req->apachereq->parms);
       table_entry *parms = (table_entry *)parmsarray->elts;
       int flag = 0;
   
  +	/* determine which part of table to traverse */
  +	if (source == VAR_SRC_QUERYSTRING) {
  +		i = 0; j = req->apachereq->nargs;
  +	} else if (source == VAR_SRC_POST) {
  +		i = req->apachereq->nargs; j = parmsarray->nelts;
  +	} else {
  +		i = 0; j = parmsarray->nelts;
  +	}
  +
       /* This isn't real efficient - move to hash table later
          on... */
  -    for (i = 0; i < parmsarray->nelts; ++i)
  +    for (; i < j; ++i)
       {
   	char *parmkey = TclWeb_StringToUtf(parms[i].key, req);
   	if (!strncmp(varname, parmkey,
  @@ -177,14 +186,23 @@
   }
   
   int
  -TclWeb_GetVarAsList(Tcl_Obj *result, char *varname, TclWebRequest *req)
  +TclWeb_GetVarAsList(Tcl_Obj *result, char *varname, int source, TclWebRequest *req)
   {
  -    int i;
  +    int i, j;
       array_header *parmsarray = ap_table_elts(req->apachereq->parms);
       table_entry *parms = (table_entry *)parmsarray->elts;
   
  +	/* determine which part of table to traverse */
  +	if (source == VAR_SRC_QUERYSTRING) {
  +		i = 0; j = req->apachereq->nargs;
  +	} else if (source == VAR_SRC_POST) {
  +		i = req->apachereq->nargs; j = parmsarray->nelts;
  +	} else {
  +		i = 0; j = parmsarray->nelts;
  +	}
  +
       /* This isn't real efficient - move to hash table later on. */
  -    for (i = 0; i < parmsarray->nelts; ++i)
  +    for (; i < j; ++i)
       {
   
   	if (!strncmp(varname, TclWeb_StringToUtf(parms[i].key, req),
  @@ -204,13 +222,22 @@
   }
   
   int
  -TclWeb_GetAllVars(Tcl_Obj *result, TclWebRequest *req)
  +TclWeb_GetAllVars(Tcl_Obj *result, int source, TclWebRequest *req)
   {
  -    int i;
  +    int i, j;
       array_header *parmsarray = ap_table_elts(req->apachereq->parms);
       table_entry *parms = (table_entry *)parmsarray->elts;
   
  -    for (i = 0; i < parmsarray->nelts; ++i)
  +	/* determine which part of table to traverse */
  +	if (source == VAR_SRC_QUERYSTRING) {
  +		i = 0; j = req->apachereq->nargs;
  +	} else if (source == VAR_SRC_POST) {
  +		i = req->apachereq->nargs; j = parmsarray->nelts;
  +	} else {
  +		i = 0; j = parmsarray->nelts;
  +	}
  +
  +    for (; i < j; ++i)
       {
   	Tcl_ListObjAppendElement(req->interp, result,
   				 TclWeb_StringToUtfToObj(parms[i].key, req));
  @@ -226,13 +253,22 @@
   }
   
   int
  -TclWeb_GetVarNames(Tcl_Obj *result, TclWebRequest *req)
  +TclWeb_GetVarNames(Tcl_Obj *result, int source, TclWebRequest *req)
   {
  -    int i;
  +    int i, j;
       array_header *parmsarray = ap_table_elts(req->apachereq->parms);
       table_entry *parms = (table_entry *)parmsarray->elts;
   
  -    for (i = 0; i < parmsarray->nelts; ++i)
  +	/* determine which part of table to traverse */
  +	if (source == VAR_SRC_QUERYSTRING) {
  +		i = 0; j = req->apachereq->nargs;
  +	} else if (source == VAR_SRC_POST) {
  +		i = req->apachereq->nargs; j = parmsarray->nelts;
  +	} else {
  +		i = 0; j = parmsarray->nelts;
  +	}
  +
  +    for (; i < j; ++i)
       {
   	Tcl_ListObjAppendElement(req->interp, result,
   				 TclWeb_StringToUtfToObj(parms[i].key, req));
  @@ -247,14 +283,23 @@
   }
   
   int
  -TclWeb_VarExists(Tcl_Obj *result, char *varname, TclWebRequest *req)
  +TclWeb_VarExists(Tcl_Obj *result, char *varname, int source, TclWebRequest *req)
   {
  -    int i;
  +    int i, j;
       array_header *parmsarray = ap_table_elts(req->apachereq->parms);
       table_entry *parms = (table_entry *)parmsarray->elts;
   
  +	/* determine which part of table to traverse */
  +	if (source == VAR_SRC_QUERYSTRING) {
  +		i = 0; j = req->apachereq->nargs;
  +	} else if (source == VAR_SRC_POST) {
  +		i = req->apachereq->nargs; j = parmsarray->nelts;
  +	} else {
  +		i = 0; j = parmsarray->nelts;
  +	}
  +
       /* This isn't real efficient - move to hash table later on. */
  -    for (i = 0; i < parmsarray->nelts; ++i)
  +    for (; i < j; ++i)
       {
   	if (!strncmp(varname, TclWeb_StringToUtf(parms[i].key, req),
   		     strlen(varname) < strlen(parms[i].key) ?
  @@ -269,11 +314,18 @@
   }
   
   int
  -TclWeb_VarNumber(Tcl_Obj *result, TclWebRequest *req)
  +TclWeb_VarNumber(Tcl_Obj *result, int source, TclWebRequest *req)
   {
       array_header *parmsarray = ap_table_elts(req->apachereq->parms);
   
  -    Tcl_SetIntObj(result, parmsarray->nelts);
  +	if (source == VAR_SRC_QUERYSTRING) {
  +		Tcl_SetIntObj(result, req->apachereq->nargs);
  +	} else if (source == VAR_SRC_POST) {
  +		Tcl_SetIntObj(result, parmsarray->nelts - req->apachereq->nargs);
  +	} else {
  +		Tcl_SetIntObj(result, parmsarray->nelts);
  +	}
  +
       return TCL_OK;
   }
   
  
  
  
  1.4       +29 -0     tcl-rivet/src/apache_request.c
  
  Index: apache_request.c
  ===================================================================
  RCS file: /home/cvs/tcl-rivet/src/apache_request.c,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- apache_request.c	5 Nov 2002 01:13:24 -0000	1.3
  +++ apache_request.c	14 Dec 2002 19:04:35 -0000	1.4
  @@ -167,6 +167,33 @@
       return retval;
   }
   
  +table *ApacheRequest_query_params(ApacheRequest *req, ap_pool *p)
  +{
  +	array_header *a = ap_palloc(p, sizeof *a);
  +	array_header *b = (array_header *)req->parms;
  +
  +	a->elts     = b->elts;
  +	a->nelts    = req->nargs;
  +
  +	a->nalloc   = a->nelts; /* COW hack: array push will induce copying */
  +	a->elt_size = sizeof(table_entry);
  +	return (table *)a;
  +}
  +
  +table *ApacheRequest_post_params(ApacheRequest *req, ap_pool *p)
  +{
  +	array_header *a = ap_palloc(p, sizeof *a);
  +	array_header *b = (array_header *)req->parms;
  +
  +	a->elts     = (void *)( (table_entry *)b->elts + req->nargs );
  +	a->nelts    = b->nelts - req->nargs;
  +
  +	a->nalloc   = a->nelts; /* COW hack: array push will induce copying */
  +	a->elt_size = sizeof(table_entry);
  +	return (table *)a;
  +}
  +
  +
   ApacheUpload *ApacheUpload_new(ApacheRequest *req)
   {
       ApacheUpload *upload = (ApacheUpload *)
  @@ -210,6 +237,7 @@
       req->temp_dir = NULL;
       req->parsed = 0;
       req->r = r;
  +    req->nargs = 0;
   
       return req;
   }
  @@ -264,6 +292,7 @@
   
       if (r->args) {
           split_to_parms(req, r->args);
  +	req->nargs = ((array_header *)req->parms)->nelts;
       }
   
       if (r->method_number == M_POST) {
  
  
  
  1.2       +3 -0      tcl-rivet/src/apache_request.h
  
  Index: apache_request.h
  ===================================================================
  RCS file: /home/cvs/tcl-rivet/src/apache_request.h,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- apache_request.h	19 Sep 2001 13:12:58 -0000	1.1
  +++ apache_request.h	14 Dec 2002 19:04:35 -0000	1.2
  @@ -45,6 +45,7 @@
       void *hook_data;
       char* temp_dir;
       request_rec *r;
  +    int nargs;
   } ApacheRequest;
   
   struct ApacheUpload {
  @@ -97,6 +98,8 @@
   int ApacheRequest___parse(ApacheRequest *req);
   #define ApacheRequest_parse(req) \
       (req->status = req->parsed ? req->status : ApacheRequest___parse(req)) 
  +table *ApacheRequest_query_params(ApacheRequest *req, ap_pool *p);
  +table *ApacheRequest_post_params(ApacheRequest *req, ap_pool *p);
   
   FILE *ApacheRequest_tmpfile(ApacheRequest *req, ApacheUpload *upload);
   ApacheUpload *ApacheUpload_new(ApacheRequest *req);
  
  
  
  1.24      +4 -1      tcl-rivet/src/mod_rivet.h
  
  Index: mod_rivet.h
  ===================================================================
  RCS file: /home/cvs/tcl-rivet/src/mod_rivet.h,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- mod_rivet.h	14 Dec 2002 01:03:51 -0000	1.23
  +++ mod_rivet.h	14 Dec 2002 19:04:35 -0000	1.24
  @@ -43,6 +43,10 @@
   #define STARTING_SEQUENCE "<?"
   #define ENDING_SEQUENCE "?>"
   
  +#define VAR_SRC_QUERYSTRING 1
  +#define VAR_SRC_POST 2
  +#define VAR_SRC_ALL 3
  +
   #define DEFAULT_ERROR_MSG "[an error occurred while processing this directive]"
   #define DEFAULT_TIME_FORMAT "%A, %d-%b-%Y %H:%M:%S %Z"
   #define MULTIPART_FORM_DATA 1
  @@ -79,7 +83,6 @@
   
       /* stuff for buffering output */
       Tcl_Channel *outchannel;
  -
   } rivet_server_conf;
   
   /* eventually we will transfer 'global' variables in here and
  
  
  
  1.32      +25 -7     tcl-rivet/src/rivetCore.c
  
  Index: rivetCore.c
  ===================================================================
  RCS file: /home/cvs/tcl-rivet/src/rivetCore.c,v
  retrieving revision 1.31
  retrieving revision 1.32
  diff -u -r1.31 -r1.32
  --- rivetCore.c	6 Dec 2002 01:20:26 -0000	1.31
  +++ rivetCore.c	14 Dec 2002 19:04:35 -0000	1.32
  @@ -320,8 +320,10 @@
       int objc,
       Tcl_Obj *CONST objv[])
   {
  +    char *cmd;
       char *command;
       Tcl_Obj *result = NULL;
  +    int source;
       rivet_interp_globals *globals = Tcl_GetAssocData(interp, "rivet", NULL);
   
       if (objc < 2 || objc > 4)
  @@ -331,9 +333,15 @@
   			 "|number|all)");
   	return TCL_ERROR;
       }
  +    cmd = Tcl_GetString(objv[0]);
       command = Tcl_GetString(objv[1]);
       result = Tcl_NewObj();
   
  +    /* determine if var_qs, var_post or var was called */
  +    if (!strcmp(cmd, "var_qs")) source = VAR_SRC_QUERYSTRING;
  +    else if (!strcmp(cmd, "var_post")) source = VAR_SRC_POST;
  +    else source = VAR_SRC_ALL;
  +
       if (!strcmp(command, "get"))
       {
   	char *key = NULL;
  @@ -349,7 +357,7 @@
   	    deflt = Tcl_GetString(objv[3]);
   	}
   
  -	if (TclWeb_GetVar(result, key, globals->req) != TCL_OK)
  +	if (TclWeb_GetVar(result, key, source, globals->req) != TCL_OK)
   	{
   	    if (deflt == NULL) {
   		Tcl_SetStringObj(result, "", -1);
  @@ -366,7 +374,7 @@
   	}
   	key = Tcl_GetString(objv[2]);
   
  -	TclWeb_VarExists(result, key, globals->req);
  +	TclWeb_VarExists(result, key, source, globals->req);
       } else if(!strcmp(command, "list")) {
   	char *key;
   	if (objc != 3)
  @@ -376,7 +384,7 @@
   	}
   	key = Tcl_GetStringFromObj(objv[2], NULL);
   
  -	if (TclWeb_GetVarAsList(result, key, globals->req) != TCL_OK)
  +	if (TclWeb_GetVarAsList(result, key, source, globals->req) != TCL_OK)
   	{
   	    result = Tcl_NewStringObj("", -1);
   	}
  @@ -387,7 +395,7 @@
   	    return TCL_ERROR;
   	}
   
  -	if (TclWeb_GetVarNames(result, globals->req) != TCL_OK)
  +	if (TclWeb_GetVarNames(result, source, globals->req) != TCL_OK)
   	{
   	    result = Tcl_NewStringObj("", -1);
   	}
  @@ -398,14 +406,14 @@
   	    return TCL_ERROR;
   	}
   
  -	TclWeb_VarNumber(result, globals->req);
  +	TclWeb_VarNumber(result, source, globals->req);
       } else if(!strcmp(command, "all")) {
   	if (objc != 2)
   	{
   	    Tcl_WrongNumArgs(interp, 2, objv, NULL);
   	    return TCL_ERROR;
   	}
  -	if (TclWeb_GetAllVars(result, globals->req) != TCL_OK)
  +	if (TclWeb_GetAllVars(result, source, globals->req) != TCL_OK)
   	{
   	    result = Tcl_NewStringObj("", -1);
   	}
  @@ -669,6 +677,16 @@
   			 (Tcl_CmdDeleteProc *)NULL);
       Tcl_CreateObjCommand(interp,
   			 "var",
  +			 Rivet_Var,
  +			 NULL,
  +			 (Tcl_CmdDeleteProc *)NULL);
  +	Tcl_CreateObjCommand(interp,
  +			 "var_qs",
  +			 Rivet_Var,
  +			 NULL,
  +			 (Tcl_CmdDeleteProc *)NULL);
  +	Tcl_CreateObjCommand(interp,
  +			 "var_post",
   			 Rivet_Var,
   			 NULL,
   			 (Tcl_CmdDeleteProc *)NULL);
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: rivet-cvs-unsubscribe@tcl.apache.org
For additional commands, e-mail: rivet-cvs-help@tcl.apache.org