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
		

byPerl.c  view on Meta::CPAN


    /* "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 )