ASF Bugzilla – Attachment 9297 Details for
Bug 25014
A flexible interface for mod_log_config
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
mod_logio.c, modified for the new mod_log_config interface (sorry, no patch:)
mod_logio.c (text/plain), 7.79 KB, created by
Sönke Tesch
on 2003-11-26 13:49:38 UTC
(
hide
)
Description:
mod_logio.c, modified for the new mod_log_config interface (sorry, no patch:)
Filename:
MIME Type:
Creator:
Sönke Tesch
Created:
2003-11-26 13:49:38 UTC
Size:
7.79 KB
patch
obsolete
>/* ==================================================================== > * The Apache Software License, Version 1.1 > * > * Copyright (c) 2002-2003 The Apache Software Foundation. All rights > * reserved. > * > * Redistribution and use in source and binary forms, with or without > * modification, are permitted provided that the following conditions > * are met: > * > * 1. Redistributions of source code must retain the above copyright > * notice, this list of conditions and the following disclaimer. > * > * 2. Redistributions in binary form must reproduce the above copyright > * notice, this list of conditions and the following disclaimer in > * the documentation and/or other materials provided with the > * distribution. > * > * 3. The end-user documentation included with the redistribution, > * if any, must include the following acknowledgment: > * "This product includes software developed by the > * Apache Software Foundation (http://www.apache.org/)." > * Alternately, this acknowledgment may appear in the software itself, > * if and wherever such third-party acknowledgments normally appear. > * > * 4. The names "Apache" and "Apache Software Foundation" must > * not be used to endorse or promote products derived from this > * software without prior written permission. For written > * permission, please contact apache@apache.org. > * > * 5. Products derived from this software may not be called "Apache", > * nor may "Apache" appear in their name, without prior written > * permission of the Apache Software Foundation. > * > * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED > * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES > * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE > * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR > * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, > * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT > * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND > * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, > * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT > * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF > * SUCH DAMAGE. > * ==================================================================== > * > * This software consists of voluntary contributions made by many > * individuals on behalf of the Apache Software Foundation. For more > * information on the Apache Software Foundation, please see > * <http://www.apache.org/>. > * > * Portions of this software are based upon public domain software > * originally written at the National Center for Supercomputing Applications, > * University of Illinois, Urbana-Champaign. > */ > >/* > * Written by Bojan Smojver <bojan@rexursive.com>: > * > * The argument to LogFormat and CustomLog is a string, which can include > * literal characters copied into the log files, and '%' directives as > * follows: > * > * %...I: bytes received, including request and headers, cannot be zero > * %...O: bytes sent, including headers, cannot be zero > * > */ > >#include "apr_strings.h" >#include "apr_lib.h" >#include "apr_hash.h" >#include "apr_optional.h" >#define APR_WANT_STRFUNC >#include "apr_want.h" > >#include "ap_config.h" >#include "mod_log_config.h" >#include "httpd.h" >#include "http_core.h" >#include "http_config.h" >#include "http_connection.h" >#include "http_protocol.h" >#include "http_log.h" > >module AP_MODULE_DECLARE_DATA logio_module; > >static const char logio_filter_name[] = "LOG_INPUT_OUTPUT"; > >/* > * Logging of input and output config... > */ > >typedef struct logio_config_t { > apr_off_t bytes_in; > apr_off_t bytes_out; >} logio_config_t; > >/* > * Optional function for the core to add to bytes_out > */ > >static void ap_logio_add_bytes_out(conn_rec *c, apr_off_t bytes){ > logio_config_t *cf = ap_get_module_config(c->conn_config, &logio_module); > > cf->bytes_out += bytes; >} > >/* > * Format items... > */ > >static void *log_bytes_in(request_rec *r, char *a, ap_log_ehandler_data *d) >{ > logio_config_t *cf = ap_get_module_config(r->connection->conn_config, > &logio_module); > d->type = AP_LOG_EHANDLER_RETURN_UNUMBER; > d->data = apr_palloc(r->pool, sizeof(ap_log_unumber_t)); > *(ap_log_unumber_t*)d->data = cf->bytes_in; >} > >static void *log_bytes_out(request_rec *r, char *a, ap_log_ehandler_data *d) >{ > logio_config_t *cf = ap_get_module_config(r->connection->conn_config, > &logio_module); > > d->type = AP_LOG_EHANDLER_RETURN_UNUMBER; > d->data = apr_palloc(r->pool, sizeof(ap_log_unumber_t)); > *(ap_log_unumber_t*)d->data = cf->bytes_out; >} > >/* > * Reset counters after logging... > */ > >static int logio_transaction(request_rec *r) >{ > logio_config_t *cf = ap_get_module_config(r->connection->conn_config, > &logio_module); > > cf->bytes_in = cf->bytes_out = 0; > > return OK; >} > >/* > * Logging of input and output filters... > */ > >static apr_status_t logio_in_filter(ap_filter_t *f, > apr_bucket_brigade *bb, > ap_input_mode_t mode, > apr_read_type_e block, > apr_off_t readbytes) { > apr_off_t length; > apr_status_t status; > logio_config_t *cf = ap_get_module_config(f->c->conn_config, &logio_module); > > status = ap_get_brigade(f->next, bb, mode, block, readbytes); > > apr_brigade_length (bb, 0, &length); > > if (length > 0) > cf->bytes_in += length; > > return status; >} > >static apr_status_t logio_out_filter(ap_filter_t *f, > apr_bucket_brigade *bb) { > apr_bucket *b = APR_BRIGADE_LAST(bb); > > /* End of data, make sure we flush */ > if (APR_BUCKET_IS_EOS(b)) { > APR_BRIGADE_INSERT_TAIL(bb, > apr_bucket_flush_create(f->c->bucket_alloc)); > APR_BUCKET_REMOVE(b); > apr_bucket_destroy(b); > } > > return ap_pass_brigade(f->next, bb); >} > >/* > * The hooks... > */ > >static int logio_pre_conn(conn_rec *c, void *csd) { > logio_config_t *cf = apr_pcalloc(c->pool, sizeof(*cf)); > > ap_set_module_config(c->conn_config, &logio_module, cf); > > ap_add_input_filter(logio_filter_name, NULL, NULL, c); > ap_add_output_filter(logio_filter_name, NULL, NULL, c); > > return OK; >} > >static int logio_pre_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp) >{ > static APR_OPTIONAL_FN_TYPE(ap_register_log_ehandler) *log_pfn_register; > > log_pfn_register = APR_RETRIEVE_OPTIONAL_FN(ap_register_log_ehandler); > > if (log_pfn_register) { > log_pfn_register(p, "I", log_bytes_in, 0); > log_pfn_register(p, "O", log_bytes_out, 0); > } > > return OK; >} > >static void register_hooks(apr_pool_t *p) >{ > static const char *pre[] = { "mod_log_config.c", NULL }; > > ap_hook_pre_connection(logio_pre_conn, NULL, NULL, APR_HOOK_MIDDLE); > ap_hook_pre_config(logio_pre_config, NULL, NULL, APR_HOOK_REALLY_FIRST); > ap_hook_log_transaction(logio_transaction, pre, NULL, APR_HOOK_MIDDLE); > > ap_register_input_filter(logio_filter_name, logio_in_filter, NULL, > AP_FTYPE_NETWORK - 1); > ap_register_output_filter(logio_filter_name, logio_out_filter, NULL, > AP_FTYPE_NETWORK - 1); > > APR_REGISTER_OPTIONAL_FN(ap_logio_add_bytes_out); >} > >module AP_MODULE_DECLARE_DATA logio_module = >{ > STANDARD20_MODULE_STUFF, > NULL, /* create per-dir config */ > NULL, /* merge per-dir config */ > NULL, /* server config */ > NULL, /* merge server config */ > NULL, /* command apr_table_t */ > register_hooks /* register hooks */ >};
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 25014
:
9295
|
9296
| 9297