HTML-EmbeddedPerl
view release on metacpan or search on metacpan
mod_twepl/twepl_xcore.c view on Meta::CPAN
HV *hdr;
SV *ctt;
SV *opt;
newXS(EPL_PM_NAME "::header_out", XS_HTML__EmbeddedPerl_header_out, file);
newXS(EPL_PM_NAME "::header", XS_HTML__EmbeddedPerl_header, file);
newXS(EPL_PM_NAME "::content_type", XS_HTML__EmbeddedPerl_content_type, file);
newXS(EPL_PM_NAME "::echo", XS_HTML__EmbeddedPerl_echo, file);
newXS(EPL_PM_NAME "::new", XS_HTML__EmbeddedPerl_new, file);
newXS(EPL_PM_NAME "::get_file", XS_HTML__EmbeddedPerl_get_file, file);
newXS(EPL_PM_NAME "::get_code", XS_HTML__EmbeddedPerl_get_code, file);
newXS(EPL_PM_NAME "::run_file", XS_HTML__EmbeddedPerl_run_file, file);
newXS(EPL_PM_NAME "::run_code", XS_HTML__EmbeddedPerl_run_code, file);
newXS(EPL_XS_NAME "::header_out", XS_HTML__EmbeddedPerl_header_out, file);
newXS(EPL_XS_NAME "::header", XS_HTML__EmbeddedPerl_header, file);
newXS(EPL_XS_NAME "::content_type", XS_HTML__EmbeddedPerl_content_type, file);
newXS(EPL_XS_NAME "::echo", XS_HTML__EmbeddedPerl_echo, file);
newXS(EPL_XS_NAME "::new", XS_HTML__EmbeddedPerl_new, file);
newXS(EPL_XS_NAME "::get_file", XS_HTML__EmbeddedPerl_get_file, file);
newXS(EPL_XS_NAME "::get_code", XS_HTML__EmbeddedPerl_get_code, file);
newXS(EPL_XS_NAME "::run_file", XS_HTML__EmbeddedPerl_run_file, file);
newXS(EPL_XS_NAME "::run_code", XS_HTML__EmbeddedPerl_run_code, file);
newXS("main::header_out", XS_HTML__EmbeddedPerl_header_out, file);
newXS("main::header", XS_HTML__EmbeddedPerl_header, file);
newXS("main::content_type", XS_HTML__EmbeddedPerl_content_type, file);
newXS("main::echo", XS_HTML__EmbeddedPerl_echo, file);
/* HEADERS */
hdr = perl_get_hv(EPL_PM_NAME "::HEADER", EPL_MK_VAR_FLAG);
/* OPTIONS */
opt = perl_get_sv(EPL_PM_NAME "::EPLOPT", EPL_MK_VAR_FLAG);
/* CONTENT-TYPE */
ctt = perl_get_sv(EPL_PM_NAME "::CONTYP", EPL_MK_VAR_FLAG);
/* BUFFER */
perl_get_sv(EPL_PM_NAME "::STIBAK", EPL_MK_VAR_FLAG);
perl_get_sv(EPL_PM_NAME "::STITMP", EPL_MK_VAR_FLAG);
perl_get_sv(EPL_PM_NAME "::STIBUF", EPL_MK_VAR_FLAG);
perl_get_sv(EPL_PM_NAME "::STOBAK", EPL_MK_VAR_FLAG);
perl_get_sv(EPL_PM_NAME "::STOTMP", EPL_MK_VAR_FLAG);
perl_get_sv(EPL_PM_NAME "::STOBUF", EPL_MK_VAR_FLAG);
/* OPTION FLAGS */
twepl_register_constsub(EPL_PM_NAME "\0", "OPT_TAG_NON", OPT_TAG_NON);
twepl_register_constsub(EPL_PM_NAME "\0", "OPT_TAG_ALL", OPT_TAG_ALL);
twepl_register_constsub(EPL_PM_NAME "\0", "OPT_TAG_EPL", OPT_TAG_EPL);
twepl_register_constsub(EPL_PM_NAME "\0", "OPT_TAG_DOL", OPT_TAG_DOL);
twepl_register_constsub(EPL_PM_NAME "\0", "OPT_TAG_PHP", OPT_TAG_PHP);
twepl_register_constsub(EPL_PM_NAME "\0", "OPT_TAG_ASP", OPT_TAG_PHP);
/* OPTION FLAGS(twepl) */
twepl_register_constsub(EPL_XS_NAME "\0", "OPT_TAG_NON", OPT_TAG_NON);
twepl_register_constsub(EPL_XS_NAME "\0", "OPT_TAG_ALL", OPT_TAG_ALL);
twepl_register_constsub(EPL_XS_NAME "\0", "OPT_TAG_EPL", OPT_TAG_EPL);
twepl_register_constsub(EPL_XS_NAME "\0", "OPT_TAG_DOL", OPT_TAG_DOL);
twepl_register_constsub(EPL_XS_NAME "\0", "OPT_TAG_PHP", OPT_TAG_PHP);
twepl_register_constsub(EPL_XS_NAME "\0", "OPT_TAG_ASP", OPT_TAG_PHP);
/* OPTION FLAGS(main) */
#ifndef __EMBEDDED_MODULE__
twepl_register_constsub("main", "OPT_TAG_NON", OPT_TAG_NON);
twepl_register_constsub("main", "OPT_TAG_ALL", OPT_TAG_ALL);
twepl_register_constsub("main", "OPT_TAG_EPL", OPT_TAG_EPL);
twepl_register_constsub("main", "OPT_TAG_DOL", OPT_TAG_DOL);
twepl_register_constsub("main", "OPT_TAG_PHP", OPT_TAG_PHP);
twepl_register_constsub("main", "OPT_TAG_ASP", OPT_TAG_PHP);
#endif
/* X-Powered-By */
#ifndef __MOD_TWEPL__
hv_store(hdr, EPL_POW_KEY, strlen(EPL_POW_KEY), newSVpv(EPL_POW_VAL, 0), 0);
#endif
/* text/html is default */
sv_setpv(ctt, EPL_CONTYPE);
/* OPTIONS-ALL */
sv_setiv(opt, OPT_TAG_ALL);
/* %INC */
inc = perl_get_hv("INC", FALSE);
hv_store(inc, "twepl.pm", 8, newSVpv("INTERNAL:xs_init/mod_twepl/twepl.pm", 0), 0);
}
EXTERN_C int twepl_check_caller(pTHX_ SV *sv, int argc, int argl, const char *name, const char *desc){
char *pkg;
if(sv_isobject(sv)){
pkg = HvNAME(SvSTASH(SvRV(sv)));
if(strcmp(pkg, EPL_XS_NAME "\0") == 0 || strcmp(pkg, EPL_PM_NAME "\0") == 0){
if(argc <= argl){
#ifdef __EMBEDDED_MODULE__
Perl_warn(aTHX_ "Usage: %s::%s(%s)", EPL_PM_NAME "\0", name, desc);
#else
Perl_warn(aTHX_ "Usage: %s::%s(%s)", EPL_XS_NAME "\0", name, desc);
#endif
return -1;
}
return TRUE;
} else{
#ifdef __EMBEDDED_MODULE__
Perl_warn(aTHX_ "%s: bad caller object found in xsub.", EPL_PM_NAME "\0");
#else
Perl_warn(aTHX_ "%s: bad caller object found in xsub.", EPL_XS_NAME "\0");
#endif
return -1;
}
} else if(argc < argl){
#ifdef __EMBEDDED_MODULE__
Perl_warn(aTHX_ "Usage: %s::%s(%s)", EPL_PM_NAME "\0", name, desc);
#else
Perl_warn(aTHX_ "Usage: %s::%s(%s)", EPL_XS_NAME "\0", name, desc);
#endif
return -1;
}
return FALSE;
}
#ifndef __EMBEDDED_MODULE__
EXTERN_C void twepl_xs_init (pTHX);
EXTERN_C void boot_DynaLoader (pTHX_ CV* cv);
EXTERN_C void twepl_xs_init (pTHX){
AV *isa;
AV *exp;
SV *ver;
/* DynaLoader is a special case */
newXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, EPL_XS_NAME "\0");
newXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, EPL_PM_NAME "\0");
XS_VERSION_BOOTCHECK;
/* Register */
twepl_register(aTHX_ EPL_XS_NAME "\0");
/* EXPORTS */
isa = perl_get_av(EPL_XS_NAME "::ISA", EPL_MK_VAR_FLAG);
av_push(isa, newSVpv("Exporter", 0));
exp = perl_get_av(EPL_XS_NAME "::EXPORT", EPL_MK_VAR_FLAG);
av_push(exp, newSVpv("header_out", 0));
av_push(exp, newSVpv("header", 0));
av_push(exp, newSVpv("content_type", 0));
av_push(exp, newSVpv("echo", 0));
ver = perl_get_sv(EPL_XS_NAME "::VERSION", EPL_MK_VAR_FLAG);
sv_setpv(ver, EPL_VERSION);
SvREADONLY(ver);
if(PL_unitcheckav)
call_list(PL_scopestack_ix, PL_unitcheckav);
}
#endif
static int twepl_do_open(pTHX_ char *ioh, char *doh, char *iom, char *iov, int iof){
PerlIO *pxo;
GV *pgv;
SV *ssv;
pgv = gv_fetchpv(doh, TRUE, SVt_PVIO);
save_gp(pgv, 1);
pxo = PerlIO_allocate(aTHX);
if(do_open9(pgv, iom, strlen(iom), FALSE, iof, 0, pxo, newSVpv(iov, 0), 1) == 0){
Perl_warn(aTHX_ "%s: failed open standard %s handle.", EPL_XS_NAME "\0", doh);
return 0;
}
ssv = perl_get_sv(ioh, FALSE);
sv_setiv(ssv, (IV)pxo);
return 1;
}
static int twepl_do_close(pTHX_ char *doh){
mod_twepl/twepl_xcore.c view on Meta::CPAN
static int twepl_do_iget(request_rec *r){
apr_bucket_brigade *br;
apr_bucket *bi;
apr_size_t bs;
apr_status_t rv;
PerlIO *pi;
SV* ti;
const char *rm = apr_table_get(r->subprocess_env, "REQUEST_METHOD");
const char *cs = apr_table_get(r->headers_in, "Content-Length");
const char *iv;
if(strcasecmp(rm, "POST") != 0 || cs == NULL || strcmp(cs, "0") == 0){
return APR_SUCCESS;
}
ti = perl_get_sv(EPL_PM_NAME "::STITMP", FALSE);
pi = (PerlIO*)SvIV(ti);
br = apr_brigade_create(r->pool, r->connection->bucket_alloc);
if((rv = ap_get_brigade(r->input_filters, br, AP_MODE_READBYTES, APR_BLOCK_READ, HUGE_STRING_LEN)) != APR_SUCCESS){
ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r, "%s - apr_get_bridge() failed.", EPL_XS_NAME "\0");
return rv;
}
for(bi = APR_BRIGADE_FIRST(br); bi != APR_BRIGADE_SENTINEL(br); bi = APR_BUCKET_NEXT(bi)){
if(APR_BUCKET_IS_EOS(bi)){
break;
}
if(APR_BUCKET_IS_FLUSH(bi)){
continue;
}
if((rv = apr_bucket_read(bi, &iv, &bs, APR_BLOCK_READ)) != APR_SUCCESS){
ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r, "%s - apr_bucket_read() failed.", EPL_XS_NAME "\0");
return rv;
}
PerlIO_write(pi, iv, bs);
}
PerlIO_seek(pi, 0, SEEK_SET);
apr_brigade_cleanup(br);
return APR_SUCCESS;
}
#endif
static void twepl_destroy (PerlInterpreter *twepl, char *buf){
perl_destruct(twepl);
perl_free(twepl);
PERL_SYS_TERM();
if(buf != NULL) free(buf);
}
#ifndef __EMBEDDED_MODULE__
#ifdef __MOD_TWEPL__
static int twepl_script_handler(request_rec *obj, char *ifp, int argc, char **argv, char **envp, TWEPL_CONFIG *twepl_conf){
#else
static int twepl_script_handler(FILE *obj, char *ifp, int argc, char **argv, char **envp, TWEPL_CONFIG *twepl_conf){
#endif
PerlInterpreter *twepl;
char *eps;
char *epb;
enum TWEPL_STATE ret;
HV *hdr;
HE *hsh;
SV *ctt;
SV *obf;
STRLEN n_a;
#ifdef __MOD_TWEPL__
char *twepl_argp[] = { "mod_" EPL_XS_NAME "\0", "-e\0", "0\0", NULL };
#else
char *twepl_argp[] = { EPL_XS_NAME "\0", "-e\0", "0\0", NULL };
#endif
int i, l;
ret = twepl_file(ifp , &eps, twepl_conf->ParserFlag);
if(ret != TWEPL_OKEY_NOERR){
#ifdef __MOD_TWEPL__
ap_log_rerror(APLOG_MARK, APLOG_ERR, APR_EGENERAL, obj, "%s - %s", EPL_XS_NAME "\0", twepl_strerr(ret));
return HTTP_INTERNAL_SERVER_ERROR;
#else
fprintf(stderr, "%s: %s\n", EPL_XS_NAME "\0", twepl_strerr(ret));
return 1;
#endif
}
PERL_SYS_INIT3(&argc, &argv, &envp);
if((twepl = perl_alloc()) == NULL){
#ifdef __MOD_TWEPL__
ap_log_rerror(APLOG_MARK, APLOG_ERR, APR_EGENERAL, obj, "%s - perl_alloc() failed.", EPL_XS_NAME "\0");
PERL_SYS_TERM(); free(eps);
return HTTP_INTERNAL_SERVER_ERROR;
#else
fprintf(stderr, "%s: perl_alloc() failed.", EPL_XS_NAME "\0");
PERL_SYS_TERM(); free(eps);
return 1;
#endif
}
perl_construct(twepl);
PL_origalen = 1;
perl_parse(twepl, twepl_xs_init, 3, twepl_argp, envp);
hdr = perl_get_hv(EPL_PM_NAME "::HEADER", FALSE);
ctt = perl_get_sv(EPL_PM_NAME "::CONTYP", FALSE);
obf = perl_get_sv(EPL_PM_NAME "::STOBUF", FALSE);
( run in 0.897 second using v1.01-cache-2.11-cpan-71847e10f99 )