/* ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 1996-2000 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. * ==================================================================== */ #define CORE_PRIVATE #include "mod_perl.h" #define MP_TYPE_DIR 1 #define MP_TYPE_SRV 2 static void *vector_from_sv (SV *sv, int *type) { if(sv_derived_from(sv, "Apache") && SvROK(sv)) { request_rec *r = sv2request_rec(sv, "Apache", Nullcv); *type = MP_TYPE_DIR; return r->per_dir_config; } else if(sv_derived_from(sv, "Apache::Server") && SvROK(sv)) { server_rec *s = (server_rec *) SvIV((SV*)SvRV(sv)); *type = MP_TYPE_SRV; return s->module_config; } else { croak("Argument is not an Apache or Apache::Server object"); } } MODULE = Apache::ModuleConfig PACKAGE = Apache::ModuleConfig PROTOTYPES: DISABLE BOOT: items = items; /*avoid warning*/ SV * get(self=Nullsv, obj, svkey=Nullsv) SV *self SV *obj SV *svkey PREINIT: SV *caller = Nullsv; CODE: RETVAL = Nullsv; if(svkey && (gv_stashpv(SvPV(svkey,na), FALSE))) caller = svkey; if((svkey == Nullsv) || caller) { module *mod = NULL; if(!caller) caller = perl_eval_pv("scalar caller", TRUE); if(caller) mod = perl_get_module_ptr(SvPVX(caller), SvCUR(caller)); if(mod) { int type = 0; void *ptr = vector_from_sv(obj, &type); mod_perl_perl_dir_config *data = get_module_config(ptr, mod); if(data && data->obj) { ++SvREFCNT(data->obj); RETVAL = data->obj; } else RETVAL = Nullsv; } } if(!RETVAL) XSRETURN_UNDEF; OUTPUT: RETVAL MODULE = Apache::ModuleConfig PACKAGE = Apache::CmdParms char * info(parms) Apache::CmdParms parms CODE: RETVAL = ((mod_perl_cmd_info *)parms->info)->info; OUTPUT: RETVAL int GETC(parms) Apache::CmdParms parms CODE: #if MODULE_MAGIC_NUMBER >= 19980413 RETVAL = cfg_getc(cmd_infile); #else croak("httpd too old for getc"); #endif OUTPUT: RETVAL SV * getline(parms, buff=Nullsv, len=MAX_STRING_LEN) Apache::CmdParms parms SV *buff int len ALIAS: Apache::CmdParms::READ = 1 Apache::CmdParms::READLINE = 2 PREINIT: char *l; int ret = 0; CODE: RETVAL = newSV(0); l = (char *)palloc(parms->temp_pool, len); ret = !cfg_getline(l, len, cmd_infile); if(!buff) buff = sv_newmortal(); switch((ix = XSANY.any_i32)) { case 0: sv_setiv(RETVAL, ret); sv_setpv(buff, l); break; case 1: sv_setiv(RETVAL, SvCUR(buff)); sv_setpv(buff, l); break; case 2: sv_setpv(RETVAL, l); break; } OUTPUT: buff RETVAL char * path(parms) Apache::CmdParms parms CODE: if(!(RETVAL = parms->path)) XSRETURN_UNDEF; OUTPUT: RETVAL Apache::Server server(parms) Apache::CmdParms parms CODE: RETVAL = parms->server; OUTPUT: RETVAL Apache::Command cmd(parms) Apache::CmdParms parms CODE: RETVAL = (Apache__Command)parms->cmd; OUTPUT: RETVAL int override(parms) Apache::CmdParms parms CODE: RETVAL = parms->override; OUTPUT: RETVAL int limited(parms) Apache::CmdParms parms CODE: RETVAL = parms->limited; OUTPUT: RETVAL