66 static GSourceFuncs g_source_pcap_gsourcefuncs = {
93 const struct pcap_pkthdr* pkthdr,
94 const char * capturedev,
97 GDestroyNotify notify,
101 gboolean can_recurse,
102 GMainContext* context,
116 src = g_source_new(&g_source_pcap_gsourcefuncs, objectsize);
117 g_return_val_if_fail(src != NULL, NULL);
141 ret->
gfd.events = G_IO_IN|G_IO_ERR|G_IO_HUP;
142 ret->
gfd.revents = 0;
144 g_source_add_poll(src, &ret->
gfd);
145 g_source_set_priority(src, priority);
146 g_source_set_can_recurse(src, can_recurse);
147 ret->
gsourceid = g_source_attach(src, context);
149 g_source_remove_poll(src, &ret->
gfd);
150 memset(ret, 0,
sizeof(*ret));
155 return (GSource*)ret;
176 return 0 != psrc->
gfd.revents;
181 GSourceFunc callback,
186 struct pcap_pkthdr* hdr;
194 while (1 == (rc = pcap_next_ex(psrc->
capture, &hdr, &pkt))) {
195 const u_char* pktend = pkt + hdr->caplen;
198 g_source_remove_poll(src, &psrc->
gfd);
217 pcap_freecode(&psrc->
pcprog);
230 ret = (guint64)tv->tv_sec * (guint64)1000000UL;
231 ret += (guint64)tv->tv_usec;
239 gconstpointer pktend,
240 const struct pcap_pkthdr* pkthdr,
241 const char * interfacep)
248 const guint8* bpkt = (
const guint8*) pkt;
249 gsize pktlen = ((
const guint8*)pktend-bpkt);
250 guint8* cppkt =
MALLOC0(pktlen);
254 g_return_val_if_fail(NULL != sysname, NULL);
255 g_return_val_if_fail(fsysname != NULL, NULL);
256 g_return_val_if_fail(timeframe != NULL, NULL);
257 g_return_val_if_fail(pktframe != NULL, NULL);
258 g_return_val_if_fail(intfname != NULL, NULL);
259 g_return_val_if_fail(cppkt != NULL, NULL);
277 memcpy(cppkt, pkt, pktlen);
278 pktframe->
setvalue(pktframe, cppkt, pktlen, g_free);