summaryrefslogtreecommitdiff
path: root/server/util_filter.c
diff options
context:
space:
mode:
authorJim Jagielski <jim@apache.org>2011-11-23 14:52:43 +0000
committerJim Jagielski <jim@apache.org>2011-11-23 14:52:43 +0000
commitd2342460fd03844f6f73670bb4ac25b77ee599b6 (patch)
treee772b9b2fe9c7f21ee15fc3d782ad191309d2684 /server/util_filter.c
parent00225ba565897ffc4b109dab12ae47ee29d557e3 (diff)
downloadhttpd-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.c27
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)