#include "EXTERN.h" #include "perl.h" #include "XSUB.h" #include "GtkDefs.h" #include "GnomeDefs.h" static void callback(guint32 ip_addr, void * data) { AV * args = (AV*)data; SV * handler = *av_fetch(args, 0, 0); char address[64]; int i; dSP; PUSHMARK(sp); for (i=1;i<=av_len(args);i++) XPUSHs(sv_2mortal(newSVsv(*av_fetch(args, i, 0)))); sprintf(address, "%d.%d.%d.%d", (ip_addr >> 24) & 0xff, (ip_addr >> 16) & 0xff, (ip_addr >> 8) & 0xff, (ip_addr >> 0) & 0xff); XPUSHs(sv_2mortal(newSVpv(address,0))); PUTBACK; perl_call_sv(handler, G_DISCARD); } MODULE = Gnome::DNS PACKAGE = Gnome::DNS PREFIX = gnome_dns_ void gnome_dns_init(Class, servers=0) int servers CODE: gnome_dns_init(servers); int gnome_dns_lookup(Class, hostname, callback, ...) char * hostname SV * callback CODE: { AV * args = newAV(); PackCallbackST(args, 2); RETVAL = gnome_dns_lookup(hostname, callback, args); } OUTPUT: RETVAL void gnome_dns_abort(Class, tag) int tag CODE: gnome_dns_abort(tag);