17#define APR_WANT_STRFUNC
32#define FILTER_POOL apr_hook_global_pool
41#define INSERT_BEFORE(f, before_this) ((before_this) == NULL \
42 || (before_this)->frec->ftype > (f)->frec->ftype \
43 || (before_this)->r != (f)->r)
50#undef APLOG_MODULE_INDEX
51#define APLOG_MODULE_INDEX AP_CORE_MODULE_INDEX
71#define TRIE_INITIAL_SIZE 4
98 for (j =
parent->nchildren; j >
i; j--) {
118 for (
i = 0;
i <
parent->nchildren;
i++) {
186 if (node && node->
frec) {
252 f.in_func = filter_func;
271 unsigned int proto_flags)
275 f.out_func = filter_func;
278 ret->proto_flags = proto_flags ;
298 "a content filter was added without a request: %s", frec->
name);
308 "a protocol filter was added without a request: %s", frec->
name);
398 if (node && node->
frec) {
405 "an unknown filter was not added: %s",
name);
459 while (
fscan->next !=
f) {
471 f->r ? &
f->r->proto_input_filters :
NULL,
472 &
f->c->input_filters);
478 f->r ? &
f->r->proto_output_filters :
NULL,
479 &
f->c->output_filters);
497 if (next->
frec == filter) {
525 if (next->
frec == filter) {
615 "ap_pass_brigade returned %d", rv);
732 f->frec->proto_flags =
flags ;
#define AP_DECLARE_NONSTD(type)
ap hook functions and macros
APR general purpose library routines.
APR Standard Headers Support.
ap_filter_rec_t * ap_get_input_filter_handle(const char *name)
apr_status_t ap_fflush(ap_filter_t *f, apr_bucket_brigade *bb)
ap_filter_rec_t * ap_get_output_filter_handle(const char *name)
void ap_remove_input_filter(ap_filter_t *f)
ap_filter_rec_t * ap_register_output_filter_protocol(const char *name, ap_out_filter_func filter_func, ap_init_filter_func filter_init, ap_filter_type ftype, unsigned int proto_flags)
apr_status_t(* ap_out_filter_func)(ap_filter_t *f, apr_bucket_brigade *b)
apr_status_t ap_pass_brigade(ap_filter_t *next, apr_bucket_brigade *bb)
int(* ap_init_filter_func)(ap_filter_t *f)
ap_filter_t * ap_add_input_filter(const char *name, void *ctx, request_rec *r, conn_rec *c)
apr_status_t ap_remove_input_filter_byhandle(ap_filter_t *next, const char *handle)
apr_status_t(* ap_in_filter_func)(ap_filter_t *f, apr_bucket_brigade *b, ap_input_mode_t mode, apr_read_type_e block, apr_off_t readbytes)
apr_status_t ap_remove_output_filter_byhandle(ap_filter_t *next, const char *handle)
ap_filter_t * ap_add_input_filter_handle(ap_filter_rec_t *f, void *ctx, request_rec *r, conn_rec *c)
apr_status_t ap_save_brigade(ap_filter_t *f, apr_bucket_brigade **saveto, apr_bucket_brigade **b, apr_pool_t *p)
ap_filter_rec_t * ap_register_output_filter(const char *name, ap_out_filter_func filter_func, ap_init_filter_func filter_init, ap_filter_type ftype)
apr_status_t ap_filter_flush(apr_bucket_brigade *bb, void *ctx)
ap_filter_t * ap_add_output_filter(const char *name, void *ctx, request_rec *r, conn_rec *c)
apr_status_t ap_fputstrs(ap_filter_t *f, apr_bucket_brigade *bb,...)
ap_filter_rec_t * ap_register_input_filter(const char *name, ap_in_filter_func filter_func, ap_init_filter_func filter_init, ap_filter_type ftype)
ap_filter_t * ap_add_output_filter_handle(ap_filter_rec_t *f, void *ctx, request_rec *r, conn_rec *c)
apr_status_t ap_get_brigade(ap_filter_t *next, apr_bucket_brigade *bb, ap_input_mode_t mode, apr_read_type_e block, apr_off_t readbytes)
void ap_filter_protocol(ap_filter_t *f, unsigned int flags)
void ap_remove_output_filter(ap_filter_t *f)
#define APR_BRIGADE_LAST(b)
#define APR_BRIGADE_INSERT_TAIL(b, e)
apr_file_t apr_off_t start
#define APR_BUCKET_NEXT(e)
#define APR_BRIGADE_CONCAT(a, b)
#define APR_BRIGADE_SENTINEL(b)
#define APR_BUCKET_IS_EOS(e)
apr_brigade_flush void * ctx
#define apr_bucket_setaside(e, p)
#define APR_BRIGADE_FIRST(b)
#define apr_bucket_read(e, str, len, block)
apr_pool_t apr_dbd_t apr_dbd_results_t ** res
apr_dbd_transaction_t int mode
apr_pool_t const char apr_dbd_t ** handle
const char apr_ssize_t int flags
#define HTTP_INTERNAL_SERVER_ERROR
void ap_str_tolower(char *s)
apr_vformatter_buff_t const char * fmt
apr_vformatter_buff_t * c
apr_vformatter_buff_t const char va_list ap
#define apr_pcalloc(p, size)
const apr_array_header_t * first
const char const char *const * args
static int filter_init(ap_filter_t *f)
This structure is used for recording information about the registered filters. It associates a name w...
ap_init_filter_func filter_init_func
ap_filter_func filter_func
The representation of a filter chain.
Structure to store things which are per connection.
filter_trie_child_ptr * children
A structure that represents the current request.
struct ap_filter_t * output_filters
struct ap_filter_t * proto_input_filters
struct ap_filter_t * proto_output_filters
struct ap_filter_t * input_filters
ap_out_filter_func out_func
ap_in_filter_func in_func
apr_status_t ap_fprintf(ap_filter_t *f, apr_bucket_brigade *bb, const char *fmt,...)
static filter_trie_node * registered_input_filters
#define INSERT_BEFORE(f, before_this)
static void trie_node_link(apr_pool_t *p, filter_trie_node *parent, filter_trie_node *child, int c)
static filter_trie_node * registered_output_filters
static filter_trie_node * trie_node_alloc(apr_pool_t *p, filter_trie_node *parent, char c)
static ap_filter_rec_t * get_filter_handle(const char *name, const filter_trie_node *filter_set)
static void remove_any_filter(ap_filter_t *f, ap_filter_t **r_filt, ap_filter_t **p_filt, ap_filter_t **c_filt)
static apr_status_t filter_cleanup(void *ctx)
static ap_filter_t * add_any_filter_handle(ap_filter_rec_t *frec, void *ctx, request_rec *r, conn_rec *c, ap_filter_t **r_filters, ap_filter_t **p_filters, ap_filter_t **c_filters)
apr_status_t ap_pass_brigade_fchk(request_rec *r, apr_bucket_brigade *bb, const char *fmt,...)
static ap_filter_rec_t * register_filter(const char *name, ap_filter_func filter_func, ap_init_filter_func filter_init, ap_filter_type ftype, filter_trie_node **reg_filter_set)
#define TRIE_INITIAL_SIZE
static ap_filter_t * add_any_filter(const char *name, void *ctx, request_rec *r, conn_rec *c, const filter_trie_node *reg_filter_set, ap_filter_t **r_filters, ap_filter_t **p_filters, ap_filter_t **c_filters)
ap_input_mode_t
input filtering modes