Changes with Apache 2.0b1
+ *) filters can now report an HTTP error to the server. This is done
+ by sending a brigade where the first bucket is an error_bucket.
+ This bucket is a simple bucket that stores an HTTP error and
+ a string. Currently the string is not used, but it may be needed
+ to output an error log. The http_header_filter will find this
+ bucket, and output the error text, and then return
+ AP_FILTER_ERROR, which informs the server that the error web page
+ has already been sent. [Ryan Bloom]
+
*) If we get an error, then we should remove all filters except for
those critical to serving a web page. This fixes a bug, where
error pages were going through the byterange filter, even though
#ifndef APACHE_HTTP_PROTOCOL_H
#define APACHE_HTTP_PROTOCOL_H
+#include "httpd.h"
#include "apr_hooks.h"
#include "apr_portable.h"
#include "apr_mmap.h"
+#include "apr_buckets.h"
#ifdef __cplusplus
extern "C" {
*/
AP_DECLARE_HOOK(apr_port_t,default_port,(const request_rec *))
+typedef struct ap_bucket_error ap_bucket_error;
+/**
+ * A bucket referring to an HTTP error
+ * This bucket can be passed down the filter stack to indicate that an
+ * HTTP error occurred while running a filter. In order for this bucket
+ * to be used successfully, it MUST be sent as the first bucket in the
+ * first brigade to be sent from a given filter.
+ */
+struct ap_bucket_error {
+ /** The start of the data actually allocated. This should never be
+ * modified, it is only used to free the bucket.
+ */
+ char *start;
+};
+
+extern const apr_bucket_type_t ap_bucket_type_error;
+
+/**
+ * Make the bucket passed in an error bucket
+ * @param b The bucket to make into an error bucket
+ * @param error The HTTP error code to put in the bucket.
+ * @param buf An optional error string to put in the bucket.
+ * @param p A pool to allocate out of.
+ * @return The new bucket, or NULL if allocation failed
+ * @deffunc apr_bucket *ap_bucket_make_error(apr_bucket *b, int error, const char *buf, apr_pool_t *p)
+ */
+AP_DECLARE(apr_bucket *) ap_bucket_make_error(apr_bucket *b, int error,
+ const char *buf, apr_pool_t *p);
+
+/**
+ * Create a bucket referring to an HTTP error.
+ * @param error The HTTP error code to put in the bucket.
+ * @param buf An optional error string to put in the bucket.
+ * @param p A pool to allocate out of.
+ * @return The new bucket, or NULL if allocation failed
+ * @deffunc apr_bucket *ap_bucket_create_error(int error, const char *buf, apr_pool_t *p)
+ */
+AP_DECLARE(apr_bucket *) ap_bucket_create_error(int error,
+ const char *buf, apr_pool_t *p);
+
#ifdef __cplusplus
}
#endif
APACHE_MODPATH_INIT(http)
-http_objects="http_core.lo http_protocol.lo http_request.lo"
+http_objects="http_core.lo http_protocol.lo http_request.lo error_bucket.lo"
APACHE_MODULE(core, HTTP protocol handling, $http_objects, , yes)
APACHE_MODULE(mime, mapping of file-extension to MIME, , , yes)