author | mickeyl <mickeyl> | 2003-10-09 00:03:06 (UTC) |
---|---|---|
committer | mickeyl <mickeyl> | 2003-10-09 00:03:06 (UTC) |
commit | f8d08db59ac05f5bf2f56e6ebf69c28dfbe8b13e (patch) (side-by-side diff) | |
tree | 36059d71abfcdb73748c1941fb9458dc75e0d4a8 /libopie2/opienet/opcap.cpp | |
parent | 5517443d9ebe96ff9c30d91b2254418964d5c410 (diff) | |
download | opie-f8d08db59ac05f5bf2f56e6ebf69c28dfbe8b13e.zip opie-f8d08db59ac05f5bf2f56e6ebf69c28dfbe8b13e.tar.gz opie-f8d08db59ac05f5bf2f56e6ebf69c28dfbe8b13e.tar.bz2 |
- catch up with changed sniffing behaviour in newer wlan-ng *puke* drivers
- new API: OPacketCapturer::next( int time )
-rw-r--r-- | libopie2/opienet/opcap.cpp | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/libopie2/opienet/opcap.cpp b/libopie2/opienet/opcap.cpp index 9ed2b83..38ca1a1 100644 --- a/libopie2/opienet/opcap.cpp +++ b/libopie2/opienet/opcap.cpp @@ -33,13 +33,17 @@ /* OPIE */ - #include <opie2/opcap.h> /* QT */ - #include <qapplication.h> // don't use oapplication here (will decrease reusability in other projects) #include <qsocketnotifier.h> #include <qobjectlist.h> +/* SYSTEM */ +#include <sys/time.h> +#include <sys/types.h> +#include <unistd.h> + +/* LOCAL */ #include "udp_ports.h" @@ -197,5 +201,5 @@ OEthernetPacket::OEthernetPacket( const unsigned char* end, const struct ether_h { case ETHERTYPE_IP: new OIPPacket( end, (const struct iphdr*) (data+1), this ); break; - case ETHERTYPE_ARP: { qDebug( "OPacket::OPacket(): Received Ethernet Packet : Type = ARP" ); break; } + case ETHERTYPE_ARP: new OARPPacket( end, (const struct myarphdr*) (data+1), this ); break; case ETHERTYPE_REVARP: { qDebug( "OPacket::OPacket(): Received Ethernet Packet : Type = RARP" ); break; } default: qDebug( "OPacket::OPacket(): Received Ethernet Packet : Type = UNKNOWN" ); @@ -1131,4 +1135,21 @@ int OPacketCapturer::fileno() const } + +OPacket* OPacketCapturer::next( int time ) +{ + fd_set fds; + struct timeval tv; + FD_ZERO( &fds ); + FD_SET( pcap_fileno( _pch ), &fds ); + tv.tv_sec = time / 1000; + tv.tv_usec = time % 1000; + int retval = select( 1, &fds, NULL, NULL, &tv); + if ( retval > 0 ) // clear to read! + return next(); + else + return 0; +} + + OPacket* OPacketCapturer::next() { |