--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/components/apache2-modules/mod_dtrace/src/mod_dtrace.c Thu Jun 02 00:54:08 2011 -0700
@@ -0,0 +1,208 @@
+/*
+* License:
+* Copyright 2004 The Apache Software Foundation
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Module Name: mod_dtrace
+*
+* Purpose: Apache implements a set of hooks and filters to allow
+* modules to view and modify requests sent to the server.
+* This module takes advantage of this architecture to
+* implement several DTrace hooks.
+*
+* Notes: To get the most use out of the mod_dtrace Apache module, it will
+* be useful to familiarize yourself with the Apache request_rec,
+* server_rec and conn_rec structures. These can be viewed on the
+* docx website:
+*
+* http://docx.webperf.org/httpd_8h-source.html
+*
+* A basic overview of each structure is included below:
+*
+* request_rec : Contains all of the attributes (URI, filename,
+* method, bytes_sent) needed to describe an
+* HTTP request
+*
+* conn_rec : Stores the connection attributes including
+* IP addresses and ports
+*
+* server_rec : Stores information to describe each virtual server
+*
+* Last Modified: 02-08-2007
+*
+* Author: Matty < matty91 at gmail dot com >
+*
+* Version: 0.3a
+*
+* Release history:
+*
+* 0.3a: Fixed bug due to NULL values -- Sebastien Bouchex Bellomie
+*
+* 0.2a: Initial release
+*
+* Build instructions are available at the following site:
+* http://prefetch.net/projects/apache_modtrace/build.txt
+*
+*/
+
+#include "ap_config.h"
+#include "httpd.h"
+#include "http_config.h"
+#include "http_connection.h"
+#include "http_protocol.h"
+#include "http_request.h"
+#include <sys/sdt.h>
+
+module AP_MODULE_DECLARE_DATA dtrace_module;
+
+/*
+* Probe Function Purpoose:
+* This probe will fire each time a request is send to the server.
+*
+* arg0 -> address of the request_rec structure
+*/
+int apache_receive_request(request_rec *r)
+{
+ DTRACE_PROBE1(apache,
+ receive__request,
+ r);
+
+ return DECLINED;
+}
+
+/*
+* This probe will fire each time the web server invokes the logging handlers.
+* Since the request_rec, server_rec and conn_rec should be completely filled
+* in when this probe fires -- this will be a useful probe.
+*
+* arg0 -> The address of the request_rec structure
+*/
+int apache_log_request(request_rec *r)
+{
+ /* apr_table_get will return the value of User-Agent or NULL */
+ const char *userAgent = NULL;
+ if (r->headers_in != NULL)
+ {
+ userAgent = apr_table_get(r->headers_in, "User-Agent");
+ }
+
+ /* apr_table_get will return the value of Location or NULL */
+ const char *redirectLocation = NULL;
+ if (r->headers_out) {
+ redirectLocation = apr_table_get(r->headers_out, "Location");
+ }
+
+ DTRACE_PROBE3(apache,
+ log__request,
+ r,
+ userAgent,
+ redirectLocation);
+
+ return DECLINED;
+}
+
+/*
+* This probe will fire each time an httpd child process is created
+*/
+void apache_create_child(apr_pool_t *p, server_rec *s)
+{
+ DTRACE_PROBE(apache,
+ create__child);
+}
+
+/*
+* This probe will fire each time a new TCP connection is created
+*
+* arg0 -> Client's IP address
+*/
+int apache_accept_connection(conn_rec *c, void *csd)
+{
+ DTRACE_PROBE1(apache,
+ accept__connection,
+ c);
+
+ return DECLINED;
+}
+
+/*
+* This probe will fire when the authentication stage is encountered
+*
+* arg0 -> The address of the request_rec structure
+*
+*/
+int apache_check_user(request_rec *r)
+{
+ DTRACE_PROBE1(apache,
+ check__user__credentials,
+ r);
+
+ return DECLINED;
+}
+
+/*
+* This probe will fire when the access checking stage is encountered
+*
+* arg0 -> The address of the request_rec structure
+*
+*/
+int apache_check_access(request_rec *r)
+{
+ DTRACE_PROBE1(apache,
+ check__access,
+ r);
+
+ return DECLINED;
+}
+
+/*
+* This probe will fire when the authorization checking stage is encountered
+*
+* arg0 -> The address of the request_rec structure
+*
+*/
+int apache_check_authorization(request_rec *r)
+{
+ DTRACE_PROBE1(apache,
+ check__authorization,
+ r);
+
+ return DECLINED;
+}
+
+/*
+* Define the hooks and the functions registered to those hooks
+*/
+void dtrace_register_hooks(apr_pool_t *p)
+{
+ ap_hook_post_read_request(apache_receive_request,NULL,NULL,APR_HOOK_MIDDLE);
+ ap_hook_child_init(apache_create_child,NULL, NULL, APR_HOOK_MIDDLE);
+ ap_hook_pre_connection(apache_accept_connection,NULL, NULL, APR_HOOK_MIDDLE);
+ ap_hook_check_user_id(apache_check_user,NULL,NULL,APR_HOOK_MIDDLE);
+ ap_hook_access_checker(apache_check_access,NULL,NULL,APR_HOOK_MIDDLE);
+ ap_hook_auth_checker(apache_check_authorization,NULL,NULL,APR_HOOK_MIDDLE);
+ ap_hook_log_transaction(apache_log_request,NULL,NULL,APR_HOOK_MIDDLE);
+}
+
+module AP_MODULE_DECLARE_DATA dtrace_module =
+{
+ STANDARD20_MODULE_STUFF,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ dtrace_register_hooks
+};
+
+