Apache2-ModLogConfig
view release on metacpan or search on metacpan
ModLogConfig.xs view on Meta::CPAN
struct writer_pair *w;
apr_pool_userdata_get((void**)&w, PPROC_KEY, pproc);
if( w ) {
old_writer_init=w->wi;
old_writer=w->w;
W("found userdata: %p %p / %p %p",
old_writer_init, old_writer, writer_init, writer);
} else {
old_writer_init=set_writer_init(writer_init);
old_writer=set_writer(writer);
w=apr_palloc(pproc, sizeof(*w));
w->wi=old_writer_init;
w->w=old_writer;
apr_pool_userdata_set(w, PPROC_KEY, apr_pool_cleanup_null, pproc);
W("set up userdata: %p %p / %p %p",
old_writer_init, old_writer, writer_init, writer);
}
} else {
old_writer_init=set_writer_init(writer_init);
old_writer=set_writer(writer);
if(old_writer_init==writer_init) croak("buggy");
}
}
# else /* AP_VER < 2002017 */
old_writer_init=set_writer_init(writer_init);
old_writer=set_writer(writer);
if(old_writer_init==writer_init) croak("buggy");
# endif
return OK;
}
static void
boot_me_up(void)
{
apr_pool_t *pconf=modperl_global_get_pconf();
APR_OPTIONAL_FN_TYPE(ap_register_log_handler) *log_register;
log_register=APR_RETRIEVE_OPTIONAL_FN(ap_register_log_handler);
if( !log_register ) croak("mod_log_config not loaded");
log_register(pconf, HND_KEY, log_perl, 0);
ap_hook_open_logs(openlogs, NULL, NULL, APR_HOOK_REALLY_FIRST);
}
MODULE = Apache2::ModLogConfig PACKAGE = Apache2::ServerRec
PROTOTYPES: DISABLE
void
custom_logs(s)
Apache2::ServerRec s
PPCODE:
{
apr_pool_t *pconf=modperl_global_get_pconf();
apr_hash_t *hash;
apr_pool_userdata_get((void**)&hash, PPROC_KEY, pconf);
if( hash ) {
hash=apr_hash_get(hash, &s, sizeof(s));
if( hash ) {
apr_pool_t *p;
apr_hash_index_t *hi;
apr_pool_create(&p, pconf);
for( hi=apr_hash_first(p, hash); hi; hi=apr_hash_next(hi) ) {
const char *k;
apr_ssize_t klen;
void *val;
apr_hash_this(hi, (const void**)&k, &klen, &val);
mXPUSHs(newSVpv(k, klen));
}
apr_pool_destroy(p);
}
}
}
void
custom_log_by_name(s, name)
Apache2::ServerRec s
SV* name
PPCODE:
{
apr_pool_t *pconf=modperl_global_get_pconf();
apr_hash_t *hash;
apr_pool_userdata_get((void**)&hash, PPROC_KEY, pconf);
if( hash ) {
hash=apr_hash_get(hash, &s, sizeof(s));
if( hash ) {
STRLEN len;
char *str=SvPV(name, len);
Apache2__CustomLog log=apr_hash_get(hash, str, len);
if( log ) {
mXPUSHs(modperl_ptr2obj(aTHX_ "Apache2::CustomLog", log));
}
}
}
}
MODULE = Apache2::ModLogConfig PACKAGE = Apache2::CustomLog
void
print(log, r, ...)
Apache2::CustomLog log
Apache2::RequestRec r
PPCODE:
if(items>2) {
apr_pool_t *p;
const char **strs;
int *strl;
int i;
apr_size_t len=0;
apr_status_t rv;
apr_pool_create(&p, r->pool);
strs=apr_palloc(p, (items-2)*sizeof(*strs));
strl=apr_palloc(p, (items-2)*sizeof(*strl));
for( i=2; i<items; i++ ) {
STRLEN l;
strs[i-2]=SvPV(ST(i), l);
strl[i-2]=l;
len+=strl[i-2];
}
rv=writer(r, log, strs, strl, items-2, len);
apr_pool_destroy(p);
mXPUSHi(rv);
}
BOOT:
boot_me_up();
## Local Variables: ##
## mode: c ##
## End: ##
( run in 0.665 second using v1.01-cache-2.11-cpan-71847e10f99 )