Changeset 5534
- Timestamp:
- 06/22/08 12:14:11 (4 months ago)
- Files:
-
- framework3/trunk/external/pcaprub/extconf.rb (modified) (1 diff)
- framework3/trunk/external/pcaprub/pcaprub.c (modified) (3 diffs)
- framework3/trunk/external/pcaprub/test_pcaprub.rb (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
framework3/trunk/external/pcaprub/extconf.rb
r5418 r5534 9 9 $LDFLAGS = "/link /LIBPATH:#{pcap_libdir}" 10 10 have_library("wpcap", "pcap_open_live") 11 have_library("wpcap", "pcap_setnonblock") 11 12 else 12 13 have_library("pcap", "pcap_open_live") 14 have_library("pcap", "pcap_setnonblock") 13 15 end 14 16 framework3/trunk/external/pcaprub/pcaprub.c
r5418 r5534 11 11 static VALUE rb_cPcap; 12 12 13 #define PCAPRUB_VERSION "0. 7-dev"13 #define PCAPRUB_VERSION "0.8-dev" 14 14 15 15 #define OFFLINE 1 … … 21 21 char type; 22 22 } rbpcap_t; 23 24 25 typedef struct rbpcapjob { 26 struct pcap_pkthdr hdr; 27 char *pkt; 28 int wtf; 29 } rbpcapjob_t; 23 30 24 31 static VALUE … … 260 267 } 261 268 269 270 static void rbpcap_handler(rbpcapjob_t *job, struct pcap_pkthdr *hdr, u_char *pkt){ 271 job->pkt = pkt; 272 job->hdr = *hdr; 273 } 274 262 275 static VALUE 263 276 rbpcap_next(VALUE self) 264 277 { 265 char *pkt;266 rbpcap_t *rbp;267 struct pcap_pkthdr pkthdr;268 269 Data_Get_Struct(self, rbpcap_t, rbp); 270 278 rbpcap_t *rbp; 279 rbpcapjob_t job; 280 char eb[PCAP_ERRBUF_SIZE]; 281 int ret; 282 283 Data_Get_Struct(self, rbpcap_t, rbp); 271 284 if(! rbpcap_ready(rbp)) return self; 272 273 memset(&pkthdr, 0, sizeof(pkthdr)); 285 pcap_setnonblock(rbp->pd, 1, eb); 274 286 275 287 TRAP_BEG; 276 pkt = (char *)pcap_next(rbp->pd, &pkthdr); 288 289 while(! (ret = pcap_dispatch(rbp->pd, 1, (pcap_handler) rbpcap_handler, (u_char *)&job))) { 290 rb_thread_schedule(); 291 } 292 277 293 TRAP_END; 278 294 279 if(pkthdr.caplen > 0) 280 return rb_str_new(pkt, pkthdr.caplen); 295 296 if(job.hdr.caplen > 0) 297 return rb_str_new(job.pkt, job.hdr.caplen); 281 298 282 299 return Qnil; framework3/trunk/external/pcaprub/test_pcaprub.rb
r5139 r5534 80 80 assert_equal(Hash, r.class) 81 81 end 82 82 83 def test_pcap_next 84 =begin 85 d = Pcap.lookupdev 86 o = Pcap.open_live(d, 1344, true, 1) 87 @c = 0 88 t = Thread.new { while(true); @c += 1; end; } 89 x = o.next 90 t.kill 91 =end 92 true 93 end 94 83 95 end
