blob: 173060dc48c1d527a55d5c5c2c718d10d1d6d512 [file] [log] [blame]
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;
}
}