From: Jim Jagielski Date: Tue, 19 Mar 2013 18:27:17 +0000 (+0000) Subject: Keep mod_req clear. Simply scan thru input filters and X-Git-Tag: 2.5.0-alpha~5650 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=44319eb4c031c2c7865a7c7af028685f0b445822;p=apache Keep mod_req clear. Simply scan thru input filters and remove it within the ws submodule. Nasty, but it keeps mod_req untouched (for now ;) ) git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1458447 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/modules/filters/mod_reqtimeout.c b/modules/filters/mod_reqtimeout.c index c7742a7b6c..3250efcade 100644 --- a/modules/filters/mod_reqtimeout.c +++ b/modules/filters/mod_reqtimeout.c @@ -177,17 +177,6 @@ static apr_status_t reqtimeout_filter(ap_filter_t *f, apr_interval_time_t saved_sock_timeout = UNSET; reqtimeout_con_cfg *ccfg = f->ctx; - /* connections can remove the filter even if configured */ - if (apr_table_get(f->c->notes, "remove-reqtimeout")) { - ap_remove_input_filter(f); - return ap_get_brigade(f->next, bb, mode, block, readbytes); - } - - /* connections can bypass the filter even if configured */ - if (apr_table_get(f->c->notes, "bypass-reqtimeout")) { - return ap_get_brigade(f->next, bb, mode, block, readbytes); - } - if (ccfg->in_keep_alive) { /* For this read, the normal keep-alive timeout must be used */ ccfg->in_keep_alive = 0; diff --git a/modules/proxy/mod_proxy_wstunnel.c b/modules/proxy/mod_proxy_wstunnel.c index 75f87cba1d..365a20549e 100644 --- a/modules/proxy/mod_proxy_wstunnel.c +++ b/modules/proxy/mod_proxy_wstunnel.c @@ -136,6 +136,29 @@ static int proxy_wstunnel_transfer(request_rec *r, conn_rec *c_i, conn_rec *c_o, return rv; } +/* Search thru the input filters and remove the reqtimeout one */ +static void remove_reqtimeout(ap_filter_t *next) +{ + ap_filter_t *reqto = NULL; + ap_filter_rec_t *filter; + + filter = ap_get_input_filter_handle("reqtimeout"); + if (!filter) { + return; + } + + while (next) { + if (next->frec == filter) { + reqto = next; + break; + } + next = next->next; + } + if (reqto) { + ap_remove_input_filter(reqto); + } +} + /* * process the request and write the response. */ @@ -166,8 +189,6 @@ static int ap_proxy_wstunnel_request(apr_pool_t *p, request_rec *r, header_brigade = apr_brigade_create(p, backconn->bucket_alloc); - apr_table_setn(c->notes, "bypass-reqtimeout", "1"); - ap_log_rerror(APLOG_MARK, APLOG_TRACE2, 0, r, "sending request"); rv = ap_proxy_create_hdrbrgd(p, header_brigade, r, conn, @@ -217,6 +238,8 @@ static int ap_proxy_wstunnel_request(apr_pool_t *p, request_rec *r, r->input_filters = c->input_filters; r->proto_input_filters = c->input_filters; + remove_reqtimeout(r->input_filters); + while (1) { /* Infinite loop until error (one side closes the connection) */ if ((rv = apr_pollset_poll(pollset, -1, &pollcnt, &signalled)) != APR_SUCCESS) {