1cgi_register_parse_cb(3)           cgi/cgi.h          cgi_register_parse_cb(3)
2
3
4

NAME

6       cgi_register_parse_cb  - Register a parse callback
7

SYNOPSIS

9       #include <cgi/cgi.h>
10
11
12       NEOERR *cgi_register_parse_cb(CGI *cgi, const char *method, const char *ctype,
13                                     void *rock, CGI_PARSE_CB parse_cb);
14
15
16
17

ARGUMENTS

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

DESCRIPTION

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

RETURN VALUE

53       None
54
55

SEE ALSO

57       cgi_debug_init(3),  cgi_parse(3),   cgi_destroy(3),   cgi_js_escape(3),
58       cgi_html_escape_strfunc(3),   cgi_register_strfuncs(3),  cgi_output(3),
59       parse_rfc2388(3), cgi_url_validate(3), open_upload(3),  cgi_cs_init(3),
60       cgi_url_escape_more(3),   cgi_html_strip_strfunc(3),  cgi_neo_error(3),
61       cgi_redirect(3),      cgi_filehandle(3),      cgi_register_parse_cb(3),
62       cgi_url_escape(3),           cgi_init(3),          cgi_redirect_uri(3),
63       cgi_cookie_clear(3),  cgi_url_unescape(3),  cgi_vredirect(3),  cgi_dis‐
64       play(3),    cgi_html_ws_strip(3),    cgi_error(3),   cgi_cookie_set(3),
65       cgi_text_html_strfunc(3), cgi_cookie_authority
66
67
68
69ClearSilver                      12 July 2007         cgi_register_parse_cb(3)
Impressum