From: Ian Holsman Date: Mon, 8 Oct 2001 19:25:35 +0000 (+0000) Subject: initial port of new Request-mode HTTP_IN filter to proxy. X-Git-Tag: 2.0.26~78 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4bd8279a92033453ea18e694310666775abe6b07;p=thirdparty%2Fapache%2Fhttpd.git initial port of new Request-mode HTTP_IN filter to proxy. Status: It serves a reverse-proxy page.. but SLOWLY. VERY SLOWLY. still looking at why, but now it serves pages instead of dumping core. PR: Obtained from: Submitted by: Reviewed by: git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@91363 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/modules/proxy/mod_proxy.h b/modules/proxy/mod_proxy.h index 91e661dbe7a..7aa95d45840 100644 --- a/modules/proxy/mod_proxy.h +++ b/modules/proxy/mod_proxy.h @@ -258,7 +258,8 @@ PROXY_DECLARE(int) ap_proxy_is_domainname(struct dirconn_entry *This, apr_pool_t PROXY_DECLARE(int) ap_proxy_is_hostname(struct dirconn_entry *This, apr_pool_t *p); PROXY_DECLARE(int) ap_proxy_is_word(struct dirconn_entry *This, apr_pool_t *p); PROXY_DECLARE(int) ap_proxy_checkproxyblock(request_rec *r, proxy_server_conf *conf, apr_sockaddr_t *uri_addr); -PROXY_DECLARE(int) ap_proxy_pre_http_connection(conn_rec *c, request_rec *r); +PROXY_DECLARE(int) ap_proxy_pre_http_connection(conn_rec *c); +PROXY_DECLARE(int) ap_proxy_pre_http_request(conn_rec *c, request_rec *r); PROXY_DECLARE(apr_status_t) ap_proxy_string_read(conn_rec *c, apr_bucket_brigade *bb, char *buff, size_t bufflen, int *eos); PROXY_DECLARE(void) ap_proxy_reset_output_filters(conn_rec *c); diff --git a/modules/proxy/proxy_ftp.c b/modules/proxy/proxy_ftp.c index b396c5f7d56..1c505809e16 100644 --- a/modules/proxy/proxy_ftp.c +++ b/modules/proxy/proxy_ftp.c @@ -774,7 +774,7 @@ int ap_proxy_ftp_handler(request_rec *r, proxy_server_conf *conf, */ /* set up the connection filters */ - ap_proxy_pre_http_connection(origin, NULL); + ap_proxy_pre_http_connection(origin); /* possible results: */ /* 120 Service ready in nnn minutes. */ @@ -1558,7 +1558,7 @@ int ap_proxy_ftp_handler(request_rec *r, proxy_server_conf *conf, } /* set up the connection filters */ - ap_proxy_pre_http_connection(remote, NULL); + ap_proxy_pre_http_connection(remote); /* diff --git a/modules/proxy/proxy_http.c b/modules/proxy/proxy_http.c index 3fbc8a5003b..b9d9ddc8370 100644 --- a/modules/proxy/proxy_http.c +++ b/modules/proxy/proxy_http.c @@ -432,7 +432,7 @@ apr_status_t ap_proxy_http_create_connection(apr_pool_t *p, request_rec *r, "proxy: connection complete"); /* set up the connection filters */ - ap_proxy_pre_http_connection(*origin, NULL); + ap_proxy_pre_http_connection(*origin); } return OK; } diff --git a/modules/proxy/proxy_util.c b/modules/proxy/proxy_util.c index 998904399e5..567f1486626 100644 --- a/modules/proxy/proxy_util.c +++ b/modules/proxy/proxy_util.c @@ -373,8 +373,11 @@ PROXY_DECLARE(request_rec *)ap_proxy_make_fake_req(conn_rec *c, request_rec *r) rp->server = r->server; rp->request_time = r->request_time; rp->connection = c; + rp->output_filters=NULL; + rp->input_filters=NULL; rp->output_filters = c->output_filters; rp->input_filters = c->input_filters; + ap_proxy_pre_http_request(c,rp); rp->request_config = ap_create_request_config(c->pool); req_cfg = apr_pcalloc(rp->pool, sizeof(core_request_config)); @@ -976,14 +979,18 @@ PROXY_DECLARE(int) ap_proxy_checkproxyblock(request_rec *r, proxy_server_conf *c } /* set up the minimal filter set */ -PROXY_DECLARE(int) ap_proxy_pre_http_connection(conn_rec *c, request_rec *r) +PROXY_DECLARE(int) ap_proxy_pre_http_connection(conn_rec *c) +{ +// ap_add_input_filter("HTTP_IN", NULL, r, c); + ap_add_input_filter("CORE_IN", NULL, NULL, c); + ap_add_output_filter("CORE", NULL, NULL, c); + return OK; +} +PROXY_DECLARE(int) ap_proxy_pre_http_request(conn_rec *c, request_rec *r) { ap_add_input_filter("HTTP_IN", NULL, r, c); - ap_add_input_filter("CORE_IN", NULL, r, c); - ap_add_output_filter("CORE", NULL, r, c); return OK; } - /* converts a series of buckets into a string */ PROXY_DECLARE(apr_status_t) ap_proxy_string_read(conn_rec *c, apr_bucket_brigade *bb, char *buff, size_t bufflen, int *eos)