Mail-SpamCannibal

 view release on metacpan or  search on metacpan

DNSBLserver/CTest.xs  view on Meta::CPAN


void
my_iload(u_char * iptr, u_long resp, char * txt)
{
  iload(iptr,(u_int32_t *)&resp,txt);
}

MODULE = Mail::SpamCannibal::DNSBLserver::CTest	PACKAGE = Mail::SpamCannibal::DNSBLserver::CTest

PROTOTYPES: DISABLE

 # first item in list is the program name

int
t_main(...)
    PREINIT:
	STRLEN	len;
	unsigned char * ptr[20];
	int i;
	extern int opterr;
    CODE:
	if (items > 20) {
	    i = 0;
	} else {
	    for (i=0; i < items; i++)
	    {
		ptr[i] = (unsigned char *)(SvPV(ST(i), len));
	    }
	opterr = 0;
	realMain(items, (char **)ptr);
	}
	RETVAL = i;
    OUTPUT:
	RETVAL

void
t_setsig()
    CODE:
	logopen = 0;	/* skip branch in Code	*/
	oflag = 1;	/* print to stdout	*/
	set_signals();

int
t_pidrun()
    CODE:
	RETVAL = (int)pidrun;
    OUTPUT:
	RETVAL

void
t_savpid(path)
	char * path
    CODE:
	savpid(path);

void
t_chk4pid(path)
	char * path
    PREINIT:
	SV * out;
    PPCODE:
	path = chk4pid(path);
	if (path == NULL) {
	  ST(0) = &PL_sv_undef;
	}
	else {
	  out = sv_newmortal();
	  out = newSVpv(path,0);
	  ST(0) = out;
	  XSRETURN(1);
	}

void
t_pidpath()
    PREINIT:
	SV * out;
    PPCODE:
	out = sv_newmortal();
	out = newSVpv(pidpath(),0);
	ST(0) = out;
	XSRETURN(1);

int
t_init(home,...)
	unsigned char * home
    PREINIT:
	STRLEN len;
    CODE:
	my_helpinit(&dbtp,DBtarpit,NULL);
	my_helpinit(&dbtp,DBcontrib,NULL);

	if (items > 1)
	    my_helpinit(&dbtp,DBtarpit,(char *)(SvPV(ST(1), len)));
	if (items > 2)
	    my_helpinit(&dbtp,DBcontrib,(char *)(SvPV(ST(2), len)));

	RETVAL = dbtp_init(&dbtp,home, -1);
    OUTPUT:
	RETVAL

int
t_dump(which)
	int which
    CODE:
	RETVAL = mydb_dump(which);
    OUTPUT:
	RETVAL

void
t_close()
    CODE:
	dbtp_close(&dbtp);

void
t_get(which, addr);
	int which
	SV * addr
    PREINIT:
	SV * out;
	STRLEN len;
	void * data;
    PPCODE:
	data = (void *)(SvPV(addr,len));
	if (which)
	  data = myct_getsec(data,len);
	else
	  data = myct_getpri(data,len);

	if (data == NULL) {
	  ST(0) = &PL_sv_undef;
	}
	else {
	  out = sv_newmortal();
	  if(which) {
	    out = newSVpv((char *)data,0);
	  } 
	  else {
	    out = newSViv(*(I32 *)data);
	  }
	  ST(0) = out;
	}
	XSRETURN(1);

void
t_getrecno(which, cursor)
	int which
	U32 cursor
    PREINIT:
	SV * netaddr, * tmp;		/* older perl does not know about newSVuv */
	int ai;
    PPCODE:
	if (which)
	    ai = DBcontrib;
	else
	    ai = DBtarpit;

	if (dbtp_getrecno(&dbtp,ai,cursor)) {
	    if(GIMME == G_ARRAY)
		XSRETURN_EMPTY;
	    else
		XSRETURN_UNDEF;
	}
	netaddr = sv_newmortal();
	sv_setpvn(netaddr, (char *)dbtp.keydbt.data, (size_t)dbtp.keydbt.size);
	XPUSHs(netaddr);
	if(GIMME == G_ARRAY) {
	    if (which)
		XPUSHs(sv_2mortal(newSVpv((char *)dbtp.mgdbt.data, (size_t)dbtp.mgdbt.size)));
	    else {
		cursor = my_u32(dbtp.mgdbt.data);	/* temp variable	*/
		tmp = newSViv(cursor);
		sv_setuv(tmp,cursor);
		XPUSHs(sv_2mortal(tmp));
	    }
	    XSRETURN(2);
	}
	XSRETURN(1);

void
t_short()
    PPCODE:
	gethostname(strbuf,MAXDNAME);
	ST(0) = sv_2mortal(newSVpv(strbuf,0));
	XSRETURN(1);

int
t_not_numeric(cp)
	char * cp
    CODE:
	RETVAL = not_numericIP(cp);
    OUTPUT:
	RETVAL

int
t_munge(fd,bp,msglen,is_tcp)
 	int	fd
	unsigned char * bp
	size_t	msglen
	int	is_tcp
    CODE:
	memcpy(ns_msgbuf,bp,msglen);
	RETVAL = munge_msg(fd,msglen,is_tcp);
    OUTPUT:
	RETVAL

int
t_cmdline(cmd,stuff)
	char * cmd
	char * stuff
    PREINIT:
	char c = *cmd;
    CODE:
	RETVAL = my_cmdline(c,stuff);
    OUTPUT:
	RETVAL

int
t_set_resp(serial_ip,stdip,stdbip)
	char * serial_ip
	char * stdip
	char * stdbip
    CODE:
	if ((inet_aton(serial_ip,&serial_rec) == 0) || 
	    (inet_aton(stdip,&stdResp) == 0) ||
	    (inet_aton(stdbip,&stdRespBeg) == 0))
	    XSRETURN_UNDEF;
	RETVAL = 1;
    OUTPUT:
	RETVAL

int
t_cmp_serial(s1,s2)
	unsigned long s1
	unsigned long s2
    CODE:
	RETVAL = my_cmp_serial(s1,s2);
    OUTPUT:
	RETVAL

int
t_name_skip(buf)
	char * buf
    PREINIT:
	char * out;
    CODE:
	out = name_skip(buf);
	RETVAL = (int)(out - buf);
    OUTPUT:
	RETVAL

int
t_set_parent(val)
	int val
    CODE:
	RETVAL = parent;
	parent = val;
    OUTPUT:
	RETVAL
	
int
t_set_qflag(val)
	int val
    CODE:
	RETVAL = qflag;
	qflag = val;
    OUTPUT:
	RETVAL

int
t_set_stop(val)
	int val
    CODE:
	RETVAL = stop;
	stop = val;
    OUTPUT:
	RETVAL

void
t_set_dbhome(path)
	char * path
    CODE:
	strcpy(tmpdbhome,path);
	dbhome = tmpdbhome;

void
t_ret_resp()
    PPCODE:
	XPUSHs(sv_2mortal(newSVpv(my_inet_ntoa(&aa),0)));
	if(GIMME != G_ARRAY) {
	    XSRETURN(1);
	}
	XPUSHs(sv_2mortal(newSVpv(my_inet_ntoa(&ab),0)));
	XPUSHs(sv_2mortal(newSVpv(my_inet_ntoa(&ac),0)));
	XPUSHs(sv_2mortal(newSVpv(my_inet_ntoa(&ad),0)));
	XSRETURN(4);

void
t_ret_a_nibls()
    PPCODE:
	XPUSHs(sv_2mortal(newSVpv(my_nib_ntoa(ah,am,al,az),0)));
	if(GIMME != G_ARRAY) {
	    XSRETURN(1);
	}
	XPUSHs(sv_2mortal(newSVpv(my_nib_ntoa(bh,bm,bl,bz),0)));
	XPUSHs(sv_2mortal(newSVpv(my_nib_ntoa(ch,cm,cl,cz),0)));
	XPUSHs(sv_2mortal(newSVpv(my_nib_ntoa(dh,dm,dl,dz),0)));
	XSRETURN(4);

void
t_mybuffer(which)
	int which
    PREINIT:
	char * bp;
    PPCODE:
	switch(which) {
	    case 0 :
		bp = mybuffer;
		break;
	    case 1 :
		bp = txa;
		break;
	    case 2 :
		bp = txb;
		break;
	    case 3 :
		bp = txc;
		break;
	    case 4 :
		bp = txd;
		break;
	    default :
		bp = "unknown selector\n";
	}
	XPUSHs(sv_2mortal(newSVpv(bp,0)));
	XSRETURN(1);

void
t_initlb()
    CODE:
	initlb();

int
t_set_org(i)
	unsigned char i
    CODE:
	RETVAL = (int)org;
	org = i;
    OUTPUT:
	RETVAL

void
t_tabout(name,type)
	char * name
	char * type
    CODE:
	tabout(mybuffer,name,type);

void
t_add_A_rec(name,ipp)
	char * name
	char * ipp
    CODE:
	my_add_A_rec(name,ipp);

void
t_ishift()
    CODE:
	ishift();

void
t_precrd(fd,name,resp,txt)
	FILE * fd
	char * name
	char * resp
	char * txt
    CODE:
	my_precrd(fd,name,resp,txt);

void
t_oflush(fd)
	FILE * fd
    PREINIT:
	char * bp;
    CODE:
	bp = mybuffer;
	oflush(fd,bp);

void
t_iload(iptr,A_resp,txt)
	unsigned char * iptr
	unsigned long * A_resp
	char * txt
    CODE:
	my_iload(iptr,*A_resp,txt);

void
t_iprint(fd)
	FILE * fd
    PREINIT:
	char * bp;
    CODE:
	bp = mybuffer;
	iprint(fd,bp);

void
t_zone_name()
    PREINIT:
	SV * out;
    PPCODE:
	if (zone_name == NULL) {
	  ST(0) = &PL_sv_undef;
	}
	else {
	  out = sv_newmortal();
	  out = newSVpv(zone_name,0);
	  ST(0) = out;
	  XSRETURN(1);
	}

int
t_zonefile(fd)
	FILE * fd
    CODE:
	RETVAL = zonefile(fd);

    OUTPUT:
	RETVAL

void
t_ratelimit(run,nsec,nusec,tsec,tusec,dmax,csum,psum)
	int run
	U32 nsec
	U32 nusec
	SV* tsec
	SV* tusec
	U32 dmax
	U32 csum
	U32 psum
    PPCODE:
	now.tv_sec = nsec;
	now.tv_usec = nusec;
	if (SvOK(tsec) && SvOK(tusec)) {
	    then.tv_sec = SvIV(tsec);
	    then.tv_usec = SvIV(tusec);
	}
	diskmax = dmax;
	charsum = csum;
	partsum = psum;
	partmax = dmax/4;
	XPUSHs(sv_2mortal(newSViv(ratelimit(run))));
	XPUSHs(sv_2mortal(newSViv(partsum)));
	XPUSHs(sv_2mortal(newSViv(partmax)));
	XPUSHs(sv_2mortal(newSViv(charsum)));
	XSRETURN(4);



( run in 1.131 second using v1.01-cache-2.11-cpan-5511b514fd6 )