[Gd-chatter] r10845 - trunk/libraries/pcap

hannes at gwydiondylan.org hannes at gwydiondylan.org
Thu Aug 10 16:43:28 CEST 2006


Author: hannes
Date: Thu Aug 10 16:43:26 2006
New Revision: 10845

Modified:
   trunk/libraries/pcap/pcap.dylan
Log:
Bug: 7299
*make promiscious? a class slot, not global defined (wireless cards on windows don't support promiscious mode)

Modified: trunk/libraries/pcap/pcap.dylan
==============================================================================
--- trunk/libraries/pcap/pcap.dylan	(original)
+++ trunk/libraries/pcap/pcap.dylan	Thu Aug 10 16:43:26 2006
@@ -11,6 +11,7 @@
     (interface, packet :: <pcap-packet-header*>, bytes)
   let real-interface = import-c-dylan-object(interface);
   let res = make(<byte-vector>, size: packet.caplen);
+  //XXX: performance!
   for (i from 0 below packet.caplen)
     res[i] := bytes[i];
   end;
@@ -34,11 +35,13 @@
 
 //XXX needed because bug #7192 c-ffi stuff needs to be compiled in tight mode
 define generic interface-name (object :: <ethernet-interface>) => (res :: <string>);
+define generic promiscious? (object :: <ethernet-interface>) => (res :: <boolean>);
 define generic pcap-t (object :: <ethernet-interface>) => (res :: <object>);
 define generic pcap-t-setter (value :: <object>, object :: <ethernet-interface>) => (res :: <object>);
 
 define open class <ethernet-interface> (<filter>)
   constant slot interface-name :: <string> = "ath0", init-keyword: name:;
+  constant slot promiscious? :: <boolean> = #t, init-keyword: promiscious?:;
   slot pcap-t;
 end;
 
@@ -67,7 +70,6 @@
 end;
 
 define constant $ethernet-buffer-size = 1600;
-define constant $promisc = 1;
 define constant $timeout = 100;
 
 define method initialize
@@ -80,7 +82,7 @@
             format-out("trying interface %s\n", name);
             let res = pcap-open-live(name,
                                      $ethernet-buffer-size,
-                                     $promisc,
+                                     if (interface.promiscious?) 1 else 0 end,
                                      $timeout,
                                      buffer-offset(errbuf, 0));
             if (res ~= null-pointer(<C-void*>))



More information about the chatter mailing list