| extern module AP_MODULE_DECLARE_DATA apreq_module; |
| |
| struct dir_config { |
| const char *temp_dir; |
| apr_uint64_t read_limit; |
| apr_size_t brigade_limit; |
| }; |
| |
| /* The "warehouse", stored in r->request_config */ |
| struct apache2_handle { |
| apreq_handle_t handle; |
| request_rec *r; |
| apr_table_t *jar, *args; |
| apr_status_t jar_status, args_status; |
| ap_filter_t *f; |
| }; |
| |
| /* Tracks the apreq filter state */ |
| struct filter_ctx { |
| apr_bucket_brigade *bb; /* input brigade that's passed to the parser */ |
| apr_bucket_brigade *bbtmp; /* temporary copy of bb, destined for the spool */ |
| apr_bucket_brigade *spool; /* copied prefetch data for downstream filters */ |
| apreq_parser_t *parser; |
| apreq_hook_t *hook_queue; |
| apreq_hook_t *find_param; |
| apr_table_t *body; |
| apr_status_t body_status; |
| apr_status_t filter_error; |
| apr_uint64_t bytes_read; /* Total bytes read into this filter. */ |
| apr_uint64_t read_limit; /* Max bytes the filter may show to parser */ |
| apr_size_t brigade_limit; |
| const char *temp_dir; |
| }; |
| |
| apr_status_t apreq_filter_prefetch(ap_filter_t *f, apr_off_t readbytes); |
| apr_status_t apreq_filter(ap_filter_t *f, |
| apr_bucket_brigade *bb, |
| ap_input_mode_t mode, |
| apr_read_type_e block, |
| apr_off_t readbytes); |
| |
| void apreq_filter_make_context(ap_filter_t *f); |
| void apreq_filter_init_context(ap_filter_t *f); |
| |
| APR_INLINE |
| static void apreq_filter_relocate(ap_filter_t *f) |
| { |
| request_rec *r = f->r; |
| |
| if (f != r->input_filters) { |
| ap_filter_t *top = r->input_filters; |
| ap_remove_input_filter(f); |
| r->input_filters = f; |
| f->next = top; |
| } |
| } |