| CGI C++ Variable Wrapper: DocumentationC++ CGI Wrapper Documentation -- http://www.purplepixie.org/cgi
            * REFERENCE: Wrapper Software Reference *
 ---------------------------------------------------------------
 The actual data is stored as a linked list of CGI_Variableclass nodes. The actual definition of this class and it's
 members etc is not of important to the user generally. If
 you wish to use it directly I would encourage you to have a
 look at the source code.
 
 The user-interface class is CGI_Interface and it is definedwith the following public members and methods:
 
 class CGI_Interface
 Members:
  bool PrintError;char NullString[LENMAX_VAR_NULLSTRING];
 bool ReturnValidPointer;
 
 Methods:
  CGI_Interface(bool pError=false);int AutoLoad(void);
 int CookieLoad(void);
 void PrintDump(void);
 int StringLoad(const char *input);
 char* Fetch(const char *name, bool UseReturnValidPointer);
 int Set(const char *name, const char *value);
 int HiddenDump(void);
 int GetDump(void);
 ~CGI_Interface();
 
 The PrintError flag determines if a routine (such asAutoLoad for example) should print textual error output
 to the screen as well as returning it's error value. This
 can be useful for debugging when you are not bothing
 to test the return values of methods.
 
 The ReturnValidPointer flag and the associated chararray NullString are included as of version 2.5 and
 address a niggle of having to check a Fetch() result
 against 0 before entering a string based evaluation.
 
 With ReturnValidPointer set (it is not by default), apointer to NullString will be returned if Fetch fails
 to find a matching variable. You can differentiate
 between a found and null-length variable and an unfound
 variable by comparing the pointer returned by Fetch
 and NullString. Alternatively you may like to set
 NullString to a meaningful value. It defaults to the
 size set by LENMAX_VAR_NULLSTRING (2 as shipped) and
 the constructor fills the string with zeros.
 
 Fetch also takes a bool UseReturnValidPointer whichis a default parameter set to true. Passing false will
 override the ReturnValidPointer flag and always return
 0 if the variable is not found.
 
 Each method and it's uses are detailed as follows:
  CGI_Interface(bool pError=false);
 The default constructor. Do NOT call this functiondirectly. It will be used by the new operator, and
 a wrapper should be initialisd with a call such as:
 CGI_Wrapper *cgi=new CGI_Wrapper(ERROR_VALUE) where
 ERROR_VALUE is a boolean variable to set the initial
 value of the PrintError flag. This is not a necessary
 argument and will default to false.
 
  int AutoLoad(void);
 The AutoLoad method is the normal method used to loaddata into the list. AutoLoad will first of all determine
 the method with which the CGI is called (GET or POST)
 then act appropriately. POST data is read into a buffer
 from stdin (as of version 1.01 limited to 32k) with this
 data being gained from QUERY_STRING for a GET. Once it
 has filled the input buffer from the relevant source,
 StringLoad is called for this input. AutoLoad returns
 the value returned from StringLoad namely a -1 for
 an error or the number of variables found and added
 to the list. AutoLoad will return a -1 before calling
 StringLoad if it is unable to determine the method
 used. With the PrintError flag set a textual description
 of the error will be output for debugging purposes.
 
  int CookieLoad(void)
 The CookieLoad method loads variables into the list fromthe HTTP_COOKIE environment variable (if it exists). These
 will be decoded as normal and appended/replaced into the
 list. The return integer is the number of variables found
 and loaded in the HTTP_COOKIE variable.
 
  void PrintDump(void);
 PrintDump will (regardless of the PrintError flag)output a full list of all the variable names and values
 stored in it's list. This method is provided for debug
 purposes primarily.
 
  int StringLoad(const char *input);
 The StringLoad method parses a URLEncoded string forvariables and values. Very basically it parses from start
 to finish building the variable name, finding an equal,
 building the variable value and then finding an ampersand
 where it adds the values to the list and starts again or
 EOL upon which it finishes. StringLoad returns a -1 on
 error (text is output if the PrintError flag is set) or
 the number of variables found and added to the list (0
 would mean a valid string etc but no content found). This
 function also handles URL decoding and CAN ONLY deal with
 URL encoded strings. If a 'normal' string is parsed and
 a percent, ampersand or equals is found in the normal text
 things will go horribly wrong.
 
  char* Fetch(const char *name, bool UseReturnValidPointer);
 The Fetch method is called by passing the case sensitivename of the variable. If the variable is found in the list
 a char* pointer to the contents is returned (see below).
 When the variable is not in the list the return behaviour
 is controlled by use of the ReturnValidPointer flag in the
 CGI_Interface class. If this flag is set (it is false by
 default) then Fetch will return a pointer to the char
 array NullString which (as mentioned above) is filled with
 0's. You can then operate on this string or check its
 pointer against NullString's. When this flag is not set
 an empty string being returned by Fetch means the varible
 does exist in the list but has the null string as a value.
 
 You can override the operation of ReturnValidPointer bypassing false as the UseReturnValidPointer parameter (this
 defaults to true and is optional). If UseReturnValidPointer
 is false then Fetch will return the variable contents or
 a 0 as if ReturnValidPointer was itself false.
 
 Please note that the pointer returned is the actual pointerto the char array in the linked list containing the variable
 value. This is probably not too safe but make's life a bit
 easier. You should never really change the content of this
 pointer as things can go badly wrong - use the Set method
 instead.
 
  int Set(const char *name, const char *value);
 Does what it says on the tin - sets a variable with thevalue. Please remember that the variable name is case
 sensitive. If the variable exists then it is updated
 and if not, created and added to the list. Currently
 the function returns just a 1 upon success (and it
 won't fail as it doesn't test anything). I think the
 idea of returning an integer was to be able to show
 if the result was an updated variable or a totally new
 one but this wasn't actually implemented.
 
  int HiddenDump(void);
 This function is designed to be used with a form topersist the data as <input type=hidden> fields. When
 invoked it will output to stdout a complete list of
 all variables and values. The output is not URL encoded
 but is parsed for quotation marks which are replaced
 with the %22 code. Use of this feature would involve your
 code outputting a <form> tag before calling this, along
 side any other inputs your wish and then a </form> tag.
 The method returns the number of variables found in the
 list and outputted to stdout.
 
  int GetDump(void);
 This method outputs a list of variable names and valuesin URL format (please note only the value is URL Encoded
 as all variable names must be URL-safe). This will output
 to stdout a list of the form:
 VarOneName=Var+One+Content&VarTwoName=Var+Two+Content
 Suitable for use in, for example, an a href statement or
 for direct GET input. Although this function can be used
 with a form with a get or post method as part of the
 action to persist data, it is suggested you use the
 HiddenDump() method for this.
 
  ~CGI_Interface();
 The destructor. It is always important to properlydestroy the CGI_Interface instantiation to delete all
 the nodes of the linked list and avoid memory leakage
 problems. Do not call this directly, rather use the
 C++ delete instruction with a line such as:
 delete i;
 
 ** USING COOKIES **
 Versions 2.06 and later support rudimentary cookies.Cookies are set using the SetCookie global function
 (from the cookie.h include file). Cookies are loaded
 into the list using the CookieLoad method. Please see
 the COOKIE document for more information.
 
 If something is not covered in the reference and youwould like it added please visit the website for
 contact information and request it.
 
 http://www.purplepixie.org/cgi
 © Copyright 2004-2007 
purplepixie.org, all rights reserved.
 |