Apache-Backhand
view release on metacpan or search on metacpan
Backhand.xs view on Meta::CPAN
#include "mod_backhand.h"
MODULE = Apache::Backhand PACKAGE = Apache::Backhand PREFIX = backhand_
PROTOTYPES: ENABLE
int
backhand_MAXSERVERS()
CODE:
RETVAL = MAXSERVERS;
OUTPUT:
RETVAL
int
backhand_MAXSESSIONSPERSERVER()
CODE:
RETVAL = MAXSESSIONSPERSERVER;
OUTPUT:
RETVAL
int
backhand_SERVER_TIMEOUT()
CODE:
RETVAL = SERVER_TIMEOUT;
OUTPUT:
RETVAL
SV *
backhand_load_serverstats()
PREINIT:
int i;
AV *statsa = newAV();
CODE:
for (i = 0; i < MAXSERVERS; i++) {
HV *statsh = newHV();
Backhand.xs view on Meta::CPAN
hv_store(statsh, "amem", 4,
newSV_magic_c_int(&(serverstats[i].amem)), 0);
hv_store(statsh, "numbacked", 9,
newSV_magic_c_int(&(serverstats[i].numbacked)), 0);
hv_store(statsh, "tatime", 6,
newSV_magic_c_int(&(serverstats[i].tatime)), 0);
av_push(statsa, newRV((SV *)statsh));
}
RETVAL = newRV_noinc((SV *)statsa);
OUTPUT:
RETVAL
SV *
backhand_load_personal_arriba()
CODE:
RETVAL = newRV(newSV_magic_c_int(&mod_backhand_personal_arriba));
OUTPUT:
RETVAL
/* "Borrow" mod_perl's request_rec -> blessed Apache reference function */
XPUSHs(perl_bless_request_rec(r));
/* Push everything else onto the stack as an array reference */
for (i = 0; i < *n; i++) {
av_push(tservers, newSViv(servers[i].id));
}
XPUSHs(sv_2mortal(newRV((SV *)tservers)));
PUTBACK;
/* actually call the function */
perl_call_pv(arg, G_SCALAR|G_EVAL);
SPAGAIN;
/* Check for errors (most likely being that the function didn't exist) */
if (SvTRUE(ERRSV)) {
ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, NULL,
"byPerl: %s", SvPV(ERRSV, PL_na));
return *n;
}
/* Store the output */
outref = POPs;
if ((outref == &PL_sv_undef) || (! SvROK(outref))) {
ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, NULL,
"byPerl: confusing return from candidacy function");
PUTBACK;
FREETMPS;
LEAVE;
return *n;
} else {
/* Turn the output into something usable */
AV *a = (AV *)SvRV(outref);
if (av_len(a) == -1) {
*n = 0;
return 0;
}
for (i = 0; i <= av_len(a); i++) {
servers[i].id = SvIV(*(av_fetch(a, i, FALSE)));
}
count = av_len(a) + 1;
}
PUTBACK;
FREETMPS;
LEAVE;
*n = count;
return count;
}
( run in 0.349 second using v1.01-cache-2.11-cpan-4e96b696675 )