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)

       cgi_register_parse_cb  -	Register a parse callback

       #include	<cgi/cgi.h>

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

       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

       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.


       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:

home | help