From: William A. Rowe Jr Date: Wed, 11 Aug 2004 22:00:47 +0000 (+0000) Subject: Add ap_proxy_pre_request API function. X-Git-Tag: post_ajp_proxy~52 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f9596ca564ddf76ca5a599a068e783e309454c29;p=apache Add ap_proxy_pre_request API function. It calls the actual module pre_request hook if present Submitted by: mturk git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@104578 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/modules/proxy/mod_proxy.h b/modules/proxy/mod_proxy.h index 7a617324b4..4911a3bdfb 100644 --- a/modules/proxy/mod_proxy.h +++ b/modules/proxy/mod_proxy.h @@ -249,11 +249,13 @@ struct proxy_balancer { #endif }; -/* data structure for set/get module_config */ +/* per connection data structure for set/get module_config */ typedef struct { char *url; /* rewtitten url */ struct proxy_balancer *balancer; /* load balancer to use */ proxy_worker *worker; /* most suitable worker */ + proxy_conn_rec *conn_rec; + proxy_conn *conn; void *opaque; /* module private data */ } proxy_module_conf; @@ -350,7 +352,7 @@ PROXY_DECLARE(const char *) ap_proxy_add_worker(proxy_worker **worker, apr_pool_ PROXY_DECLARE(struct proxy_balancer *) ap_proxy_get_balancer(apr_pool_t *p, proxy_server_conf *conf, const char *url); PROXY_DECLARE(const char *) ap_proxy_add_balancer(struct proxy_balancer **balancer, apr_pool_t *p, proxy_server_conf *conf, const char *url); PROXY_DECLARE(void) ap_proxy_add_worker_to_balancer(struct proxy_balancer *balancer, proxy_worker *worker); - +PROXY_DECLARE(int) ap_proxy_pre_request(proxy_worker **worker, struct proxy_balancer **balancer, request_rec *r, proxy_server_conf *conf, char **url); /* For proxy_util */ extern module PROXY_DECLARE_DATA proxy_module; diff --git a/modules/proxy/proxy_util.c b/modules/proxy/proxy_util.c index d84a0e4e49..d35fc1abf2 100644 --- a/modules/proxy/proxy_util.c +++ b/modules/proxy/proxy_util.c @@ -1192,6 +1192,47 @@ ap_proxy_add_worker_to_balancer(struct proxy_balancer *balancer, proxy_worker *w } +PROXY_DECLARE(int) ap_proxy_pre_request(proxy_worker **worker, + struct proxy_balancer **balancer, + request_rec *r, + proxy_server_conf *conf, char **url) +{ + int access_status; + + access_status = proxy_run_pre_request(worker, balancer, r, conf, url); + if (access_status == DECLINED && *balancer == NULL) { + *worker = ap_proxy_get_worker(r->pool, conf, *url); + if (*worker) { + *balancer = NULL; + access_status = OK; + } + else + access_status = DECLINED; + } + else if (access_status == DECLINED && balancer != NULL) { + /* All the workers are busy */ + access_status = HTTP_SERVICE_UNAVAILABLE; + } + return access_status; +} + +PROXY_DECLARE(int) ap_proxy_post_request(proxy_worker *worker, + struct proxy_balancer *balancer, + request_rec *r, + proxy_server_conf *conf) +{ + int access_status; + if (balancer) + access_status = proxy_run_post_request(worker, balancer, r, conf); + else { + + + access_status = OK; + } + + return access_status; +} + PROXY_DECLARE(int) ap_proxy_connect_to_backend(apr_socket_t **newsock, const char *proxy_function, apr_sockaddr_t *backend_addr,