src/generic/querystring.c (44 lines of code) (raw):

/* * querystring.c -- CGI QUERY_STRING parsing * nca-073-9 * * Copyright (c) 1996-2000 by Netcetera AG. * Copyright (c) 2001 by Apache Software Foundation. * All rights reserved. * * See the file "license.terms" for information on usage and * redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * @(#) $Id$ * */ #include <tcl.h> #include <string.h> #include "crypt.h" #include "paramlist.h" #include "request.h" #include "conv.h" #include "url.h" /* ---------------------------------------------------------------------------- * parseQueryString -- * parse "k1=v1&k2=v2" kind of data, and store in web::params structure * ------------------------------------------------------------------------- */ int parseQueryString(RequestData * requestData, Tcl_Interp * interp, Tcl_Obj * query_string) { Tcl_Obj *tclo = NULL; int tRes = 0; int listLen = 0; tRes = TCL_OK; if ((requestData == NULL) || (query_string == NULL)) return TCL_ERROR; /* -------------------------------------------------------------------------- * decrypt * ----------------------------------------------------------------------- */ Tcl_IncrRefCount(query_string); if (dodecrypt(interp, query_string, 1) == TCL_OK) { tclo = Tcl_DuplicateObj(Tcl_GetObjResult(interp)); Tcl_IncrRefCount(tclo); Tcl_ResetResult(interp); Tcl_DecrRefCount(query_string); /* ------------------------------------------------------------------------ * only add if list length > 0 * --------------------------------------------------------------------- */ if ((listLen = tclGetListLength(interp, tclo)) == -1) { Tcl_DecrRefCount(tclo); return TCL_ERROR; } if (listLen > 0) { /* ---------------------------------------------------------------------- * add list to requestData * ------------------------------------------------------------------- */ tRes = listObjAsParamList(tclo, requestData->paramList); Tcl_DecrRefCount(tclo); return tRes; } /* ------------------------------------------------------------------------ * done * --------------------------------------------------------------------- */ Tcl_DecrRefCount(tclo); return TCL_OK; } else { /* just write a note */ LOG_MSG(interp, WRITE_LOG, __FILE__, __LINE__, "web::dispatch", WEBLOG_DEBUG, "error decrypting \"", Tcl_GetString(query_string), "\"", NULL); } Tcl_DecrRefCount(query_string); return TCL_OK; }