blob: d5f5e520a8744641783a658039efc20559233aac [file] [log] [blame]
/* ====================================================================
* 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