summaryrefslogtreecommitdiff
authormickeyl <mickeyl>2003-04-09 21:37:05 (UTC)
committer mickeyl <mickeyl>2003-04-09 21:37:05 (UTC)
commitb055856776807f0a459a86b1e1f62902d2d3a9c3 (patch) (unidiff)
tree46bee28833c363607d20f4db93eef0166a45852d
parentc8401f7ebb9e9314ed48517da38b949c24800c50 (diff)
downloadopie-b055856776807f0a459a86b1e1f62902d2d3a9c3.zip
opie-b055856776807f0a459a86b1e1f62902d2d3a9c3.tar.gz
opie-b055856776807f0a459a86b1e1f62902d2d3a9c3.tar.bz2
implements a statistic interface for OPacketCapturer
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opienet/opcap.cpp40
-rw-r--r--libopie2/opienet/opcap.h7
2 files changed, 43 insertions, 4 deletions
diff --git a/libopie2/opienet/opcap.cpp b/libopie2/opienet/opcap.cpp
index 5c464cf..6a3dc26 100644
--- a/libopie2/opienet/opcap.cpp
+++ b/libopie2/opienet/opcap.cpp
@@ -40,4 +40,5 @@
40#include <qapplication.h> // don't use oapplication here (will decrease reusability in other projects) 40#include <qapplication.h> // don't use oapplication here (will decrease reusability in other projects)
41#include <qsocketnotifier.h> 41#include <qsocketnotifier.h>
42#include <qobjectlist.h>
42 43
43/*====================================================================================== 44/*======================================================================================
@@ -88,4 +89,17 @@ int OPacket::caplen() const
88 89
89 90
91void OPacket::updateStats( QMap<QString,int>& stats, QObjectList* l )
92{
93 if (!l) return;
94 QObject* o = l->first();
95 while ( o )
96 {
97 stats[o->name()]++;
98 updateStats( stats, const_cast<QObjectList*>( o->children() ) );
99 o = l->next();
100 }
101}
102
103
90QString OPacket::dump( int bpl ) const 104QString OPacket::dump( int bpl ) const
91{ 105{
@@ -128,5 +142,4 @@ QString OPacket::dump( int bpl ) const
128 142
129 143
130
131int OPacket::len() const 144int OPacket::len() const
132{ 145{
@@ -134,4 +147,5 @@ int OPacket::len() const
134} 147}
135 148
149
136/*====================================================================================== 150/*======================================================================================
137 * OEthernetPacket 151 * OEthernetPacket
@@ -773,4 +787,11 @@ void OPacketCapturer::close()
773 _open = false; 787 _open = false;
774 } 788 }
789
790 qDebug( "OPacketCapturer::close() --- dumping capturing statistics..." );
791 qDebug( "--------------------------------------------------" );
792 for( QMap<QString,int>::Iterator it = _stats.begin(); it != _stats.end(); ++it )
793 qDebug( "%s : %d", (const char*) it.key(), it.data() );
794 qDebug( "--------------------------------------------------" );
795
775} 796}
776 797
@@ -794,5 +815,4 @@ int OPacketCapturer::fileno() const
794} 815}
795 816
796
797OPacket* OPacketCapturer::next() 817OPacket* OPacketCapturer::next()
798{ 818{
@@ -804,9 +824,14 @@ OPacket* OPacketCapturer::next()
804 if ( header.len ) 824 if ( header.len )
805 { 825 {
806 return new OPacket( dataLink(), header, pdata, 0 ); 826 OPacket* p = new OPacket( dataLink(), header, pdata, 0 );
807 // packets shouldn't be inserted in the QObject child-parent hierarchy, 827 // packets shouldn't be inserted in the QObject child-parent hierarchy,
808 // because due to memory constraints they will be deleted as soon 828 // because due to memory constraints they will be deleted as soon
809 // as possible - that is right after they have been processed 829 // as possible - that is right after they have been processed
810 // by emit() [ see below ] 830 // by emit() [ see below ]
831
832 //TODO: make gathering statistics optional, because it takes time
833 p->updateStats( _stats, const_cast<QObjectList*>( p->children() ) );
834
835 return p;
811 } 836 }
812 else 837 else
@@ -840,4 +865,5 @@ bool OPacketCapturer::open( const QString& name )
840 _pch = handle; 865 _pch = handle;
841 _open = true; 866 _open = true;
867 _stats.clear();
842 868
843 // in case we have an application object, create a socket notifier 869 // in case we have an application object, create a socket notifier
@@ -867,5 +893,5 @@ bool OPacketCapturer::isOpen() const
867void OPacketCapturer::readyToReceive() 893void OPacketCapturer::readyToReceive()
868{ 894{
869 qDebug( "OPacketCapturer::readyToReceive(): about to emit 'receivePacket(...)'" ); 895 qDebug( "OPacketCapturer::readyToReceive(): about to emit 'receivePacket(p)'" );
870 OPacket* p = next(); 896 OPacket* p = next();
871 emit receivedPacket( p ); 897 emit receivedPacket( p );
@@ -874,2 +900,8 @@ void OPacketCapturer::readyToReceive()
874} 900}
875 901
902
903const QMap<QString,int>& OPacketCapturer::statistics() const
904{
905 return _stats;
906}
907
diff --git a/libopie2/opienet/opcap.h b/libopie2/opienet/opcap.h
index ddef278..c9b0624 100644
--- a/libopie2/opienet/opcap.h
+++ b/libopie2/opienet/opcap.h
@@ -47,7 +47,9 @@ extern "C" // work around a bpf/pcap conflict in recent headers
47 47
48/* QT */ 48/* QT */
49#include <qevent.h>
49#include <qhostaddress.h> 50#include <qhostaddress.h>
50#include <qobject.h> 51#include <qobject.h>
51#include <qstring.h> 52#include <qstring.h>
53#include <qmap.h>
52 54
53/* OPIE */ 55/* OPIE */
@@ -81,4 +83,6 @@ class OPacket : public QObject
81 QString dump( int = 32 ) const; 83 QString dump( int = 32 ) const;
82 84
85 void updateStats( QMap<QString,int>&, QObjectList* );
86
83 private: 87 private:
84 const packetheaderstruct _hdr; // pcap packet header 88 const packetheaderstruct _hdr; // pcap packet header
@@ -435,4 +439,6 @@ class OPacketCapturer : public QObject
435 bool isOpen() const; 439 bool isOpen() const;
436 440
441 const QMap<QString,int>& statistics() const;
442
437 signals: 443 signals:
438 void receivedPacket( OPacket* ); 444 void receivedPacket( OPacket* );
@@ -447,4 +453,5 @@ class OPacketCapturer : public QObject
447 QSocketNotifier* _sn; // socket notifier for main loop 453 QSocketNotifier* _sn; // socket notifier for main loop
448 mutable char _errbuf[PCAP_ERRBUF_SIZE]; 454 mutable char _errbuf[PCAP_ERRBUF_SIZE];
455 QMap<QString, int> _stats; // statistics;
449}; 456};
450 457