From ce168dd27f87304dc5cc5ed4cced93fe92d00fc4 Mon Sep 17 00:00:00 2001 From: Graham Leggett Date: Tue, 10 Apr 2001 20:44:16 +0000 Subject: [PATCH] Make sure the filter stack in a reused downstream connection is reset so we don't get lots of DECHUNK filters when we don't want them. PR: Obtained from: Reviewed by: git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@88797 13f79535-47bb-0310-9956-ffa450edef68 --- modules/proxy/mod_proxy.h | 1 + modules/proxy/proxy_http.c | 4 ++++ modules/proxy/proxy_util.c | 19 +++++++++++++++++++ 3 files changed, 24 insertions(+) diff --git a/modules/proxy/mod_proxy.h b/modules/proxy/mod_proxy.h index 7a35204cb4..c0305b1c8a 100644 --- a/modules/proxy/mod_proxy.h +++ b/modules/proxy/mod_proxy.h @@ -243,5 +243,6 @@ int ap_proxy_is_word(struct dirconn_entry *This, apr_pool_t *p); int ap_proxy_checkproxyblock(request_rec *r, proxy_server_conf *conf, apr_sockaddr_t *uri_addr); int ap_proxy_pre_http_connection(conn_rec *c, request_rec *r); apr_status_t ap_proxy_string_read(conn_rec *c, apr_bucket_brigade *bb, char *buff, size_t bufflen); +void ap_proxy_reset_output_filters(conn_rec *c); #endif /*MOD_PROXY_H*/ diff --git a/modules/proxy/proxy_http.c b/modules/proxy/proxy_http.c index 48ec878a88..e99aa2e653 100644 --- a/modules/proxy/proxy_http.c +++ b/modules/proxy/proxy_http.c @@ -313,6 +313,9 @@ int ap_proxy_http_handler(request_rec *r, char *url, origin = conf->connection; new = 0; + /* reset the connection filters */ + ap_proxy_reset_output_filters(origin); + /* XXX FIXME: If the socket has since closed, change new to 1 so * a new socket is opened */ } @@ -699,6 +702,7 @@ int ap_proxy_http_handler(request_rec *r, char *url, if ((buf = ap_proxy_removestr(r->pool, buf, "chunked"))) { apr_table_set(r->headers_out, "Transfer-Encoding", buf); } +/* FIXME: Make sure this filter is removed if this connection is reused */ ap_add_input_filter("DECHUNK", NULL, rp, origin); } diff --git a/modules/proxy/proxy_util.c b/modules/proxy/proxy_util.c index 92f65c4985..42c45648a3 100644 --- a/modules/proxy/proxy_util.c +++ b/modules/proxy/proxy_util.c @@ -1131,6 +1131,25 @@ apr_status_t ap_proxy_string_read(conn_rec *c, apr_bucket_brigade *bb, char *buf } +/* remove other filters (like DECHUNK) from filter stack */ +void ap_proxy_reset_output_filters(conn_rec *c) +{ + ap_filter_t *f = c->output_filters; + + while (f) { + if (!strcasecmp(f->frec->name, "CORE") || + !strcasecmp(f->frec->name, "CONTENT_LENGTH") || + !strcasecmp(f->frec->name, "HTTP_HEADER")) { + f = f->next; + continue; + } + else { + ap_remove_output_filter(f); + f = f->next; + } + } +} + #if defined WIN32 static DWORD tls_index; -- 2.40.0