Commit bbf83b24 authored by Jim Jagielski's avatar Jim Jagielski
Browse files

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
parent 9f1a21c4
Loading
Loading
Loading
Loading
+20 −0
Changes for include/util_filter.h: 20 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -314,6 +314,26 @@ AP_DECLARE(apr_status_t) ap_get_brigade(ap_filter_t *filter,
AP_DECLARE(apr_status_t) ap_pass_brigade(ap_filter_t *filter,
                                         apr_bucket_brigade *bucket);

/**
 * Pass the current bucket brigade down to the next filter on the filter
 * stack checking for filter errors.  The filter returns an apr_status_t value.
 * Returns ::OK if the brigade is successfully passed
 *         ::AP_FILTER_ERROR on a filter error
 *         ::HTTP_INTERNAL_SERVER_ERROR on all other errors
 * @param r      The request rec
 * @param bucket The current bucket brigade
 * @param msg    Optional error msg; if NULL defaults to "ap_pass_brigade returned"
 *
 * @remark Ownership of the brigade is retained by the caller. On return,
 *         the contents of the brigade are UNDEFINED, and the caller must
 *         either call apr_brigade_cleanup or apr_brigade_destroy on
 *         the brigade.
 */
AP_DECLARE(apr_status_t) ap_pass_brigade_fchk(request_rec *r,
                                              apr_bucket_brigade *bucket,
                                              const char *msg);


/**
 * This function is used to register an input filter with the system.
 * After this registration is performed, then a filter may be added
+27 −0
Changes for server/util_filter.c: 27 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -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)