author | mickeyl <mickeyl> | 2003-04-16 13:19:32 (UTC) |
---|---|---|
committer | mickeyl <mickeyl> | 2003-04-16 13:19:32 (UTC) |
commit | 05b76911ab2082436c577c1461f0d1210ce0aa33 (patch) (side-by-side diff) | |
tree | d8219eb138ca46f355651152d471664037be372b | |
parent | 5b9d1ddde859ff783f95babf1887fa40e6bfe0be (diff) | |
download | opie-05b76911ab2082436c577c1461f0d1210ce0aa33.zip opie-05b76911ab2082436c577c1461f0d1210ce0aa33.tar.gz opie-05b76911ab2082436c577c1461f0d1210ce0aa33.tar.bz2 |
add sanity check for last packet when capturing from capture file
-rw-r--r-- | libopie2/opienet/opcap.cpp | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/libopie2/opienet/opcap.cpp b/libopie2/opienet/opcap.cpp index 04b1bb1..e362883 100644 --- a/libopie2/opienet/opcap.cpp +++ b/libopie2/opienet/opcap.cpp @@ -799,78 +799,79 @@ void OPacketCapturer::close() qDebug( "--------------------------------------------------" ); } int OPacketCapturer::dataLink() const { return pcap_datalink( _pch ); } int OPacketCapturer::fileno() const { if ( _open ) { return pcap_fileno( _pch ); } else { return -1; } } OPacket* OPacketCapturer::next() { packetheaderstruct header; qDebug( "==> OPacketCapturer::next()" ); const unsigned char* pdata = pcap_next( _pch, &header ); qDebug( "<== OPacketCapturer::next()" ); if ( _pcd ) pcap_dump( (u_char*) _pcd, &header, pdata ); - if ( header.len ) + if ( pdata && header.len ) { OPacket* p = new OPacket( dataLink(), header, pdata, 0 ); // packets shouldn't be inserted in the QObject child-parent hierarchy, // because due to memory constraints they will be deleted as soon // as possible - that is right after they have been processed // by emit() [ see below ] //TODO: make gathering statistics optional, because it takes time p->updateStats( _stats, const_cast<QObjectList*>( p->children() ) ); return p; } else { + qWarning( "OPacketCapturer::next() - no packet received!" ); return 0; } } bool OPacketCapturer::open( const QString& name, const QString& filename ) { if ( _open ) { if ( name == _name ) // ignore opening an already openend device { return true; } else // close the last opened device { close(); } } _name = name; // open libpcap pcap_t* handle = pcap_open_live( const_cast<char*>( (const char*) name ), 1024, 0, 0, &_errbuf[0] ); if ( !handle ) { qWarning( "OPacketCapturer::open(): can't open libpcap with '%s': %s", (const char*) name, _errbuf ); return false; } qDebug( "OPacketCapturer::open(): libpcap [%s] opened successfully.", (const char*) name ); _pch = handle; |