]> granicus.if.org Git - apache/commitdiff
New hook: ap_run_pre_read_request()
authorJim Jagielski <jim@apache.org>
Mon, 14 Feb 2011 19:21:37 +0000 (19:21 +0000)
committerJim Jagielski <jim@apache.org>
Mon, 14 Feb 2011 19:21:37 +0000 (19:21 +0000)
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1070616 13f79535-47bb-0310-9956-ffa450edef68

include/http_protocol.h
modules/examples/mod_example_hooks.c
server/protocol.c

index 5b71dfd0e66405d436eb61add0f0a3179ce16ad7..bc00e7bed7baa7a3377a375725d3135adeba73ff 100644 (file)
@@ -554,11 +554,24 @@ AP_DECLARE(int) ap_method_number_of(const char *method);
 AP_DECLARE(const char *) ap_method_name_of(apr_pool_t *p, int methnum);
 
 
-  /* Hooks */
-  /*
-   * post_read_request --- run right after read_request or internal_redirect,
-   *                  and not run during any subrequests.
-   */
+/* Hooks */
+/*
+ * pre_read_request --- run right before read_request_line(),
+ *                  and not run during any subrequests.
+ */
+/**
+ * This hook allows modules to affect the request or connection immediately before
+ * the request has been read, and before any other phases have been processes.
+ * @param r The current request of the soon-to-be-read request
+ * @param c The connection
+ * @return None/void
+ */
+AP_DECLARE_HOOK(void,pre_read_request,(request_rec *r, conn_rec *c))
+
+/*
+ * post_read_request --- run right after read_request or internal_redirect,
+ *                  and not run during any subrequests.
+ */
 /**
  * This hook allows modules to affect the request immediately after the request
  * has been read, and before any other phases have been processes.  This allows
@@ -567,7 +580,7 @@ AP_DECLARE(const char *) ap_method_name_of(apr_pool_t *p, int methnum);
  * @return OK or DECLINED
  */
 AP_DECLARE_HOOK(int,post_read_request,(request_rec *r))
-
+    
 /**
  * This hook allows modules to perform any module-specific logging activities
  * over and above the normal server things.
index 256a6e8f4c0de4708b4d0174619a905d96d940d0..cbdf28ead4dbbecc0a40c513fa51f9863f840990 100644 (file)
@@ -1146,6 +1146,22 @@ static int x_process_connection(conn_rec *c)
     return DECLINED;
 }
 
+/*
+ * This routine is called after the request has been read but before any other
+ * phases have been processed.  This allows us to make decisions based upon
+ * the input header fields.
+ *
+ * This is a HOOK_VOID hook.
+ */
+void x_post_read_request(request_rec *r, conn_rec *c)
+{
+    /*
+     * We don't actually *do* anything here, except note the fact that we were
+     * called.
+     */
+    trace_request(r, "x_pre_read_request()");
+}
+
 /*
  * This routine is called after the request has been read but before any other
  * phases have been processed.  This allows us to make decisions based upon
@@ -1449,6 +1465,8 @@ static void x_register_hooks(apr_pool_t *p)
     ap_hook_quick_handler(x_quick_handler, NULL, NULL, APR_HOOK_MIDDLE);
     ap_hook_pre_connection(x_pre_connection, NULL, NULL, APR_HOOK_MIDDLE);
     ap_hook_process_connection(x_process_connection, NULL, NULL, APR_HOOK_MIDDLE);
+    ap_hook_pre_read_request(x_pre_read_request, NULL, NULL,
+                              APR_HOOK_MIDDLE);
     /* [1] post read_request handling */
     ap_hook_post_read_request(x_post_read_request, NULL, NULL,
                               APR_HOOK_MIDDLE);
index be9d183932e7dcf18835763a8bd9ff3719d309b1..359f848f394a3099404aab5fffe2e8c46c2ae4b8 100644 (file)
@@ -60,6 +60,7 @@
 APLOG_USE_MODULE(core);
 
 APR_HOOK_STRUCT(
+    APR_HOOK_LINK(pre_read_request)
     APR_HOOK_LINK(post_read_request)
     APR_HOOK_LINK(log_transaction)
     APR_HOOK_LINK(http_scheme)
@@ -915,6 +916,8 @@ request_rec *ap_read_request(conn_rec *conn)
 
     tmp_bb = apr_brigade_create(r->pool, r->connection->bucket_alloc);
 
+    ap_run_pre_read_request(r, conn);
+    
     /* Get the request... */
     if (!read_request_line(r, tmp_bb)) {
         if (r->status == HTTP_REQUEST_URI_TOO_LARGE
@@ -1733,6 +1736,9 @@ AP_DECLARE(void) ap_send_interim_response(request_rec *r, int send_headers)
 }
 
 
+AP_IMPLEMENT_HOOK_VOID(pre_read_request,
+                       (request_rec *r, conn_rec *c),
+                       (r, c))
 AP_IMPLEMENT_HOOK_RUN_ALL(int,post_read_request,
                           (request_rec *r), (r), OK, DECLINED)
 AP_IMPLEMENT_HOOK_RUN_ALL(int,log_transaction,