Commit f8057369 authored by Jim Jagielski's avatar Jim Jagielski
Browse files

New hook: ap_run_pre_read_request()

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1070616 13f79535-47bb-0310-9956-ffa450edef68
parent 5ce9c761
Loading
Loading
Loading
Loading
+13 −0
Changes for include/http_protocol.h: 13 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -555,6 +555,19 @@ AP_DECLARE(const char *) ap_method_name_of(apr_pool_t *p, int methnum);


/* 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.
+18 −0
Changes for modules/examples/mod_example_hooks.c: 18 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -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);
+6 −0
Changes for server/protocol.c: 6 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -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,