diff options
author | Jim Jagielski <jim@apache.org> | 2011-11-23 14:52:43 +0000 |
---|---|---|
committer | Jim Jagielski <jim@apache.org> | 2011-11-23 14:52:43 +0000 |
commit | d2342460fd03844f6f73670bb4ac25b77ee599b6 (patch) | |
tree | e772b9b2fe9c7f21ee15fc3d782ad191309d2684 /server/util_filter.c | |
parent | 00225ba565897ffc4b109dab12ae47ee29d557e3 (diff) | |
download | httpd-d2342460fd03844f6f73670bb4ac25b77ee599b6.tar.gz |
Add ap_pass_brigade_fchk() which does a Filter CHecK on the
brigade pass.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1205419 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'server/util_filter.c')
-rw-r--r-- | server/util_filter.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/server/util_filter.c b/server/util_filter.c index 27046b330e..fd07145dbb 100644 --- a/server/util_filter.c +++ b/server/util_filter.c @@ -535,6 +535,33 @@ AP_DECLARE(apr_status_t) ap_pass_brigade(ap_filter_t *next, return AP_NOBODY_WROTE; } +/* Pass the buckets to the next filter in the filter stack + * checking return status for filter errors. + * returns: OK if ap_pass_brigade returns APR_SUCCESS + * AP_FILTER_ERROR if filter error exists + * HTTP_INTERNAL_SERVER_ERROR for all other cases + * logged with optional errmsg + */ +AP_DECLARE(apr_status_t) ap_pass_brigade_fchk(request_rec *r, + apr_bucket_brigade *bb, + const char *errmsg) +{ + apr_status_t rv; + if (!errmsg) + errmsg = "ap_pass_brigade returned"; + + rv = ap_pass_brigade(r->output_filters, bb); + if (rv != APR_SUCCESS) { + if (rv != AP_FILTER_ERROR) { + ap_log_rerror(APLOG_MARK, APLOG_DEBUG, rv, r, + "%s %d", errmsg, rv); + return HTTP_INTERNAL_SERVER_ERROR; + } + return AP_FILTER_ERROR; + } + return OK; +} + AP_DECLARE(apr_status_t) ap_save_brigade(ap_filter_t *f, apr_bucket_brigade **saveto, apr_bucket_brigade **b, apr_pool_t *p) |