Hi all, The following patch fixes the problem where the HTTP1 filters are added on non HTTP1 requests.
The filters are now only added if ap_get_protocol() returns AP_PROTOCOL_HTTP1. Regards, Graham -- Index: modules/http/http_core.c =================================================================== --- modules/http/http_core.c (revision 1734998) +++ modules/http/http_core.c (working copy) @@ -34,6 +34,8 @@ #include "mod_core.h" +module AP_MODULE_DECLARE_DATA http_module; + /* Handles for core filters */ AP_DECLARE_DATA ap_filter_rec_t *ap_http_input_filter_handle; AP_DECLARE_DATA ap_filter_rec_t *ap_http_header_filter_handle; @@ -48,6 +50,10 @@ */ static int async_mpm = 0; +typedef struct { + int is_http; +} http_conn_conf; + static const char *set_keep_alive_timeout(cmd_parms *cmd, void *dummy, const char *arg) { @@ -242,9 +248,29 @@ return OK; } +static int http_pre_connection(conn_rec *c, void *csd) +{ + const char *protocol = ap_get_protocol(c); + + http_conn_conf *cconf = apr_pcalloc(c->pool, sizeof(*cconf)); + + if (!protocol || !strcmp(AP_PROTOCOL_HTTP1, protocol)) { + cconf->is_http = 1; + } + + ap_set_module_config(c->conn_config, &http_module, cconf); + + return OK; +} + static int ap_process_http_connection(conn_rec *c) { - if (async_mpm && !c->clogging_input_filters) { + http_conn_conf *cconf = ap_get_module_config(c->conn_config, &http_module); + + if (!cconf || !cconf->is_http) { + return DECLINED; + } + else if (async_mpm && !c->clogging_input_filters) { return ap_process_http_async_connection(c); } else { @@ -254,7 +280,6 @@ static int http_create_request(request_rec *r) { - /* FIXME: we must only add these filters if we are an HTTP request */ if (!r->main && !r->prev) { ap_add_output_filter_handle(ap_byterange_filter_handle, NULL, r, r->connection); @@ -295,6 +320,7 @@ static void register_hooks(apr_pool_t *p) { ap_hook_post_config(http_post_config, NULL, NULL, APR_HOOK_MIDDLE); + ap_hook_pre_connection(http_pre_connection,NULL,NULL, APR_HOOK_REALLY_LAST); ap_hook_process_connection(ap_process_http_connection, NULL, NULL, APR_HOOK_REALLY_LAST); ap_hook_map_to_storage(ap_send_http_trace,NULL,NULL,APR_HOOK_MIDDLE);