I'll open this plea for advice by offering some free advice to other
module-writing newbies like me. When you're trying to figure out wtf
some piece of code, e.g. apr_xml_to_text, does, the following will
get you the answer by example, most times:
find modules -name '*.c' -print | xargs egrep xml_to_text
and if that doesn't help, then the deep-dive:
find . -name '*.[ch]' -print | xargs egrep xml_to_text
where is that stupid ap_* function declared/defined?
find . -name '*.[ch]' -print | xargs egrep 'DECLARE.*ap_rputs'
Question: I'm generating output from a module. How do the headers
get sent? mod_example suggests you should call send_http_header but
I can't find an example of any module actually doing this.
Scenario: I'm about to punt a request using HTTP_FORBIDDEN and I'd
like to generate a helpful response body explaining why. DAV does
this in modules/dav/main/mod_dav.c in dav_error_response, sets r-
>status, calls ap_set_content type, fires off the data with rvputs,
and returns DONE. Um... how do any accumulated headers get sent? Is
it all just taken care of?
Related: In that same mod_dav.c, there's this:
/* Apache doesn't allow us to set a variable body for
HTTP_CREATED, so
* we must manufacture the entire response. */
and also
/*
** dav_error_response()
**
** Send a nice response back to the user. In most cases, Apache doesn't
** allow us to provide details in the body about what happened. This
** function allows us to completely specify the response body.
**
** ### this function is not logging any errors! (e.g. the body)
*/
In general, are these comments correct, and is how DAV does things a
good example of how to deal with a situation in which you're going to
return oddities like 201 or 405 (very different kinds of things, I
know) and want to control the body? Returning DONE is a necessity?
So I guess you're on your own for logging then?
-Tim