very beginning of the request processing before location_walk,
translate_name, etc. This hook is useful for URI keyed content
caches like Mike Abbott's Quick Shortcut Cache.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@88596
13f79535-47bb-0310-9956-
ffa450edef68
Changes with Apache 2.0.16-dev
+ *) Performance: Add quick_handler hook. This hook is called at the
+ very beginning of the request processing before location_walk,
+ translate_name, etc. This hook is useful for URI keyed content
+ caches like Mike Abbott's Quick Shortcut Cache.
+ [Bill Stoddard]
*) top_module global variable renamed to ap_top_module [Perl]
*/
AP_DECLARE_HOOK(int,handler,(request_rec *r))
+/**
+ * Run the quick handler functions for each module. The quick_handler
+ * is run before any other requests hooks are called (location_walk,
+ * directory_walk, access checking, et. al.). This hook was added
+ * to provide a quick way to serve content out of a URI keyed cache.
+ * @param r The request_rec
+ * @deffunc void ap_run_quick_handler(request_rec *r)
+ */
+AP_DECLARE_HOOK(int,quick_handler,(request_rec *r))
+
/**
* Retrieve the optional functions for each module.
* This is run immediately before the server starts. Optional functions should
void ap_process_request(request_rec *r)
{
- process_request_internal(r);
+ int access_status;
+
+ /* Give quick handlers a shot at serving the request on the fast
+ * path, bypassing all of the other Apache hooks.
+ *
+ * This hook was added to enable serving files out of a URI keyed
+ * content cache ( e.g., Mike Abbott's Quick Shortcut Cache,
+ * described here: http://oss.sgi.com/projects/apache/mod_qsc.html )
+ *
+ * It may have other uses as well, such as routing requests directly to
+ * content handlers that have the ability to grok HTTP and do their
+ * own access checking, etc (e.g. servlet engines).
+ *
+ * Use this hook with extreme care and only if you know what you are
+ * doing.
+ *
+ * Consider moving this hook to after the first location_walk in order
+ * to enable the quick handler to make decisions based on config
+ * directives in Location blocks.
+ */
+ access_status = ap_run_quick_handler(r);
+ if (access_status == OK) {
+ ap_finalize_request_protocol(r);
+ }
+ else if (access_status == DECLINED) {
+ process_request_internal(r);
+ }
+ else {
+ ap_die(access_status, r);
+ }
/*
* We want to flush the last packet if this isn't a pipelining connection
APR_HOOK_LINK(open_logs)
APR_HOOK_LINK(child_init)
APR_HOOK_LINK(handler)
+ APR_HOOK_LINK(quick_handler)
APR_HOOK_LINK(optional_fn_retrieve)
)
AP_IMPLEMENT_HOOK_RUN_FIRST(int,handler,(request_rec *r),
(r),DECLINED)
+AP_IMPLEMENT_HOOK_RUN_FIRST(int,quick_handler,(request_rec *r),
+ (r),DECLINED)
AP_IMPLEMENT_HOOK_VOID(optional_fn_retrieve,(void),())