Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
cgi_register_parse_cb(3)	   cgi/cgi.h	      cgi_register_parse_cb(3)

NAME
       cgi_register_parse_cb  -	Register a parse callback

SYNOPSIS
       #include	<cgi/cgi.h>

       NEOERR *cgi_register_parse_cb(CGI *cgi, const char *method, const char *ctype,
				     void *rock, CGI_PARSE_CB parse_cb);

ARGUMENTS
       cgi - a CGI struct
       method -	the HTTP method	you want to handle, or * for all
       ctype - the HTTP	Content-Type you want to handle, or * for all
       rock - opaque data that we'll pass to your call back

DESCRIPTION
       The  ClearSilver	 CGI Kit has built-in functionality to handle the fol-
       lowing methods: GET -> doesn't have any data except query string, which
       is processed for	all methods POST w/  application/x-www-form-urlencoded
       POST  w/	 multipart/form-data  processed	as RFC2388 data	into files and
       HDF (see	cgi_filehandle()) PUT (any type)  The  entire  data  chunk  is
       stored  as  a  file,  with meta data in HDF (similar to single files in
       RFC2388).  The data is accessible  via  cgi_filehandle  with  NULL  for
       name.  To handle	other methods/content types, you have to register your
       own  parse  function.  This isn't necessary if you aren't expecting any
       data, and technically HTTP only allows data on PUT/POST	requests  (and
       presumably user defined methods).  In particular, if you	want to	imple-
       ment  XML-RPC  or SOAP, you'll have to register a callback here to grab
       the XML data chunk.  Usually you'll want	to register POST  w/  applica-
       tion/xml	 or POST w/ text/xml (you either need to register both or reg-
       ister  POST  w/	*  and	check  the   ctype   yourself,	 remember   to
       nerr_raise(CGIParseNotHandled)  if  you	aren't handling	the POST).  In
       general,	your callback should: Find out how much	data is	available: l =
       hdf_get_value (cgi->hdf,	"CGI.ContentLength", NULL); len	= atoi(l); And
       read/handle all of the data using cgiwrap_read.	See the	 builtin  han-
       dlers  for  how this is done.  Note that	cgiwrap_read is	not guarunteed
       to return all of	the data you request (just  like  fread(3))  since  it
       might be	reading	of a socket.  Sorry.  You should be careful when read-
       ing the data to watch for short reads (ie, end of file) and cases where
       the client sends	you data ad infinitum.

RETURN VALUE
       None

SEE ALSO
       cgi_debug_init(3),   cgi_parse(3),   cgi_destroy(3),  cgi_js_escape(3),
       cgi_html_escape_strfunc(3),  cgi_register_strfuncs(3),	cgi_output(3),
       parse_rfc2388(3),  cgi_url_validate(3), open_upload(3), cgi_cs_init(3),
       cgi_url_escape_more(3),	cgi_html_strip_strfunc(3),   cgi_neo_error(3),
       cgi_redirect(3),	     cgi_filehandle(3),	     cgi_register_parse_cb(3),
       cgi_url_escape(3),	   cgi_init(3),		  cgi_redirect_uri(3),
       cgi_cookie_clear(3),  cgi_url_unescape(3),  cgi_vredirect(3),  cgi_dis-
       play(3),	  cgi_html_ws_strip(3),	   cgi_error(3),    cgi_cookie_set(3),
       cgi_text_html_strfunc(3), cgi_cookie_authority

ClearSilver			 12 July 2007	      cgi_register_parse_cb(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=cgi_register_parse_cb&sektion=3&manpath=FreeBSD+Ports+15.0.quarterly>

home | help