Return-Path: Delivered-To: apmail-httpd-cvs-archive@www.apache.org Received: (qmail 42592 invoked from network); 17 Jul 2005 05:12:29 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 17 Jul 2005 05:12:29 -0000 Received: (qmail 31642 invoked by uid 500); 17 Jul 2005 05:12:28 -0000 Delivered-To: apmail-httpd-cvs-archive@httpd.apache.org Received: (qmail 31447 invoked by uid 500); 17 Jul 2005 05:12:27 -0000 Mailing-List: contact cvs-help@httpd.apache.org; run by ezmlm Precedence: bulk Reply-To: dev@httpd.apache.org list-help: list-unsubscribe: List-Post: List-Id: Delivered-To: mailing list cvs@httpd.apache.org Received: (qmail 31426 invoked by uid 99); 17 Jul 2005 05:12:27 -0000 X-ASF-Spam-Status: No, hits=-9.8 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [209.237.227.194] (HELO minotaur.apache.org) (209.237.227.194) by apache.org (qpsmtpd/0.29) with SMTP; Sat, 16 Jul 2005 22:12:15 -0700 Received: (qmail 42437 invoked by uid 65534); 17 Jul 2005 05:12:13 -0000 Message-ID: <20050717051213.42436.qmail@minotaur.apache.org> Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r219372 - in /httpd/httpd/trunk: CHANGES include/ap_mmn.h modules/proxy/mod_proxy.c modules/proxy/mod_proxy.h Date: Sun, 17 Jul 2005 05:12:12 -0000 To: cvs@httpd.apache.org From: ianh@apache.org X-Mailer: svnmailer-1.0.2 X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N Author: ianh Date: Sat Jul 16 22:12:10 2005 New Revision: 219372 URL: http://svn.apache.org/viewcvs?rev=219372&view=rev Log: This patch adds a new hook (request_status) that gets ran in proxy_handler just before the final return. This gives modules an opportunity to do something based on the proxy status. A couple of examples where this is useful: -You are using a caching module and would rather return stale content rather than an error to the client if the origin is down. -you proxy some subrequests (using SSI - mod_include) and do not want SSI errors when the backend is down. If you would normally return HTTP_BAD_GATEWAY, you may have a module that serves some other content. new hook -- so mmn bump.. i made it a major one, hope thats ok Patch From Brian Akins Modified: httpd/httpd/trunk/CHANGES httpd/httpd/trunk/include/ap_mmn.h httpd/httpd/trunk/modules/proxy/mod_proxy.c httpd/httpd/trunk/modules/proxy/mod_proxy.h Modified: httpd/httpd/trunk/CHANGES URL: http://svn.apache.org/viewcvs/httpd/httpd/trunk/CHANGES?rev=219372&r1=219371&r2=219372&view=diff ============================================================================== --- httpd/httpd/trunk/CHANGES (original) +++ httpd/httpd/trunk/CHANGES Sat Jul 16 22:12:10 2005 @@ -1,5 +1,10 @@ Changes with Apache 2.1.7 [Remove entries to the current 2.0 section below, when backported] + + *) new hook (request_status) that gets ran in proxy_handler just before + the final return. This gives modules an opportunity to do something + based on the proxy status. (major MMN bump) + [Brian Akins , Ian Holsman] *) SECURITY: CAN-2005-2088 proxy: Correctly handle the Transfer-Encoding and Content-Length Modified: httpd/httpd/trunk/include/ap_mmn.h URL: http://svn.apache.org/viewcvs/httpd/httpd/trunk/include/ap_mmn.h?rev=219372&r1=219371&r2=219372&view=diff ============================================================================== --- httpd/httpd/trunk/include/ap_mmn.h (original) +++ httpd/httpd/trunk/include/ap_mmn.h Sat Jul 16 22:12:10 2005 @@ -99,12 +99,13 @@ * 20050701.0 (2.1.7-dev) Bump MODULE_MAGIC_COOKIE to "AP21"! * 20050701.1 (2.1.7-dev) trace_enable member added to core server_config * 20050708.0 (2.1.7-dev) Bump MODULE_MAGIC_COOKIE to "AP22"! + * 20050717.0 (2.1.7-dev) add proxy request_status hook */ #define MODULE_MAGIC_COOKIE 0x41503232UL /* "AP22" */ #ifndef MODULE_MAGIC_NUMBER_MAJOR -#define MODULE_MAGIC_NUMBER_MAJOR 20050708 +#define MODULE_MAGIC_NUMBER_MAJOR 20050717 #endif #define MODULE_MAGIC_NUMBER_MINOR 0 /* 0...n */ Modified: httpd/httpd/trunk/modules/proxy/mod_proxy.c URL: http://svn.apache.org/viewcvs/httpd/httpd/trunk/modules/proxy/mod_proxy.c?rev=219372&r1=219371&r2=219372&view=diff ============================================================================== --- httpd/httpd/trunk/modules/proxy/mod_proxy.c (original) +++ httpd/httpd/trunk/modules/proxy/mod_proxy.c Sat Jul 16 22:12:10 2005 @@ -732,9 +732,12 @@ int post_status = proxy_run_post_request(worker, balancer, r, conf); if (post_status == DECLINED) { post_status = OK; /* no post_request handler available */ - /* TODO: reclycle direct worker */ + /* TODO: recycle direct worker */ } } + + proxy_run_request_status(&access_status, r); + return access_status; } @@ -1881,6 +1884,7 @@ APR_HOOK_LINK(canon_handler) APR_HOOK_LINK(pre_request) APR_HOOK_LINK(post_request) + APR_HOOK_LINK(request_status) ) APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(proxy, PROXY, int, scheme_handler, @@ -1907,4 +1911,8 @@ balancer,r,conf),DECLINED) APR_IMPLEMENT_OPTIONAL_HOOK_RUN_ALL(proxy, PROXY, int, fixups, (request_rec *r), (r), + OK, DECLINED) +APR_IMPLEMENT_OPTIONAL_HOOK_RUN_ALL(proxy, PROXY, int, request_status, + (int *status, request_rec *r), + (status, r), OK, DECLINED) Modified: httpd/httpd/trunk/modules/proxy/mod_proxy.h URL: http://svn.apache.org/viewcvs/httpd/httpd/trunk/modules/proxy/mod_proxy.h?rev=219372&r1=219371&r2=219372&view=diff ============================================================================== --- httpd/httpd/trunk/modules/proxy/mod_proxy.h (original) +++ httpd/httpd/trunk/modules/proxy/mod_proxy.h Sat Jul 16 22:12:10 2005 @@ -375,6 +375,13 @@ proxy_balancer *balancer, request_rec *r, proxy_server_conf *conf)) +/** + * request status hook + * It is called after all proxy processing has been done. This gives other + * modules a chance to create default content on failure, for example + */ +APR_DECLARE_EXTERNAL_HOOK(proxy, PROXY, int, request_status, + (int *status, request_rec *r)) /* proxy_util.c */ @@ -541,6 +548,14 @@ proxy_balancer *balancer, request_rec *r, proxy_server_conf *conf); + +/** + * Request status function + * @param status status of proxy request + * @return OK or DECLINED + */ + PROXY_DECLARE(int) ap_proxy_request_status(int *status, request_rec *r); + /** * Deternime backend hostname and port * @param p memory pool used for processing