No httpd header dependencies in src/; those go in env/. Only APR is used here. Data structures and relations: BASE: apreq_value_t: basic type for handling opaque data. The type is meant to be extended by placing all "metadata" in front (within a larger structure). apreq_table_t : apreq_value_t container. treats value_t as "key -> data" pair and provides lookup api. Custom copy/merge functions can be added to internally handle additional metadata attached to the contained apreq_value_t's. COOKIE EXTENSIONS: apreq_cookie_t: extends apreq_value_t to represent server-side cookie data. apreq_jar_t: A pool and a table with cookie-based copy/merge functions. This struct is analogous to apreq_request_t for params. PARAM EXTENSIONS: apreq_param_t: extends apreq_value_t to represent POST param data. apreq_request_t: maintains arg/body tables which represent parsed data. REQUEST STATES: req->body == NULL: No POST data has been read/parsed yet. At this point, req->v.data holds a pointer to the parser table. req->body != NULL: req->v.data now points to the active parser. status: (as returned by apreq_env_read) APR_INCOMPLETE: Parsing in progress. APR_SUCCESS: Parsing complete. : parser error, parsing aborted. PARSER EXTENSIONS: apreq_parser_t: extends apreq_value_t to represent a parser callback, with its associated configuration data. apreq_hook_t: extends multipart/form-data by transforming the input brigade and pushing buckets onto the current param->bb.