Net-Pcap
view release on metacpan or search on metacpan
OUTPUT:
RETVAL
err
int
pcap_lookupnet(device, net, mask, err)
const char *device
SV *net
SV *mask
SV *err
CODE:
if (SvROK(net) && SvROK(mask) && SvROK(err)) {
bpf_u_int32 netp, maskp;
char *errbuf = NULL;
SV *net_sv = SvRV(net);
SV *mask_sv = SvRV(mask);
SV *err_sv = SvRV(err);
Newx(errbuf, PCAP_ERRBUF_SIZE+1, char);
RETVAL = pcap_lookupnet(device, &netp, &maskp, errbuf);
netp = ntohl(netp);
maskp = ntohl(maskp);
if (RETVAL != -1) {
sv_setuv(net_sv, netp);
sv_setuv(mask_sv, maskp);
err_sv = &PL_sv_undef;
} else {
sv_setpv(err_sv, errbuf);
}
safefree(errbuf);
} else {
RETVAL = -1;
if (!SvROK(net )) croak("arg2 not a reference");
if (!SvROK(mask)) croak("arg3 not a reference");
if (!SvROK(err )) croak("arg4 not a reference");
}
OUTPUT:
net
mask
err
RETVAL
void
pcap_findalldevs_xs(devinfo, err)
SV * devinfo
SV * err
PREINIT:
char *errbuf = NULL;
Newx(errbuf, PCAP_ERRBUF_SIZE+1, char);
PPCODE:
if ( SvROK(err) && SvROK(devinfo) && (SvTYPE(SvRV(devinfo)) == SVt_PVHV) ) {
int r;
pcap_if_t *alldevs, *d;
HV *hv;
SV *err_sv = SvRV(err);
hv = (HV *)SvRV(devinfo);
r = pcap_findalldevs(&alldevs, errbuf);
switch(r) {
case 0: /* normal case */
for (d=alldevs; d; d=d->next) {
XPUSHs(sv_2mortal(newSVpv(d->name, 0)));
if (d->description)
hv_store(hv, d->name, strlen(d->name), newSVpv(d->description, 0), 0);
else
if ( (strcmp(d->name,"lo") == 0) || (strcmp(d->name,"lo0") == 0))
hv_store(hv, d->name, strlen(d->name),
newSVpv("Loopback device", 0), 0);
else
hv_store(hv, d->name, strlen(d->name),
newSVpv("No description available", 0), 0);
}
pcap_freealldevs(alldevs);
err_sv = &PL_sv_undef;
break;
case 3: { /* function is not available */
char *dev = pcap_lookupdev(errbuf);
if (dev == NULL) {
sv_setpv(err_sv, errbuf);
break;
}
XPUSHs(sv_2mortal(newSVpv(dev, 0)));
if ( (strcmp(dev,"lo") == 0) || (strcmp(dev,"lo0") == 0))
hv_store(hv, dev, strlen(dev), newSVpv("", 0), 0);
else
hv_store(hv, dev, strlen(dev), newSVpv("No description available", 0), 0);
break;
}
case -1: /* error */
sv_setpv(err_sv, errbuf);
break;
}
} else {
if ( !SvROK(devinfo) || (SvTYPE(SvRV(devinfo)) != SVt_PVHV) )
croak("arg1 not a hash ref");
if ( !SvROK(err) )
croak("arg2 not a scalar ref");
}
safefree(errbuf);
pcap_t *
if (sv != NULL)
real_auth.username = SvPV(*sv, PL_na);
sv = hv_fetch(hv, "password", strlen("password"), 0);
if (sv != NULL)
real_auth.password = SvPV(*sv, PL_na);
preal_auth = &real_auth;
}
RETVAL = pcap_open(source, snaplen, flags, read_timeout, preal_auth, errbuf);
if (RETVAL == NULL) {
sv_setpv(err_sv, errbuf);
} else {
err_sv = &PL_sv_undef;
}
safefree(errbuf);
} else
croak("arg5 not a hash ref");
OUTPUT:
RETVAL
err
int
pcap_setuserbuffer(p, size)
pcap_t *p
int size
int
pcap_setbuff(p, dim)
pcap_t *p
int dim
int
pcap_setmode (p, mode)
pcap_t *p
int mode
int
pcap_setmintocopy(p, size)
pcap_t *p
int size
void
pcap_getevent(p)
pcap_t *p
PREINIT:
unsigned int h;
PPCODE:
h = (unsigned int) pcap_getevent(p);
ST(0) = sv_newmortal();
sv_setref_iv(ST(0), "Win32::Event", h);
XSRETURN(1);
int
pcap_sendpacket(p, buf)
pcap_t *p
SV *buf
CODE:
RETVAL = pcap_sendpacket(p, (u_char *)SvPVX(buf), sv_len(buf));
OUTPUT:
RETVAL
pcap_send_queue *
pcap_sendqueue_alloc(memsize)
u_int memsize
MODULE = Net::Pcap PACKAGE = pcap_send_queuePtr
void
DESTROY(queue)
pcap_send_queue * queue
CODE:
pcap_sendqueue_destroy(queue);
MODULE = Net::Pcap PACKAGE = Net::Pcap PREFIX = pcap_
int
pcap_sendqueue_queue(queue, header, p)
pcap_send_queue * queue
SV *header
SV *p
CODE:
/* Check that header is a hashref */
if (SvROK(header) && (SvTYPE(SvRV(header)) == SVt_PVHV)) {
struct pcap_pkthdr real_h;
char *real_p;
HV *hv;
SV **sv;
memset(&real_h, '\0', sizeof(real_h));
/* Copy from hash to pcap_pkthdr */
hv = (HV *)SvRV(header);
sv = hv_fetch(hv, "tv_sec", strlen("tv_sec"), 0);
if (sv != NULL) {
real_h.ts.tv_sec = SvIV(*sv);
}
sv = hv_fetch(hv, "tv_usec", strlen("tv_usec"), 0);
( run in 1.331 second using v1.01-cache-2.11-cpan-71847e10f99 )