summaryrefslogtreecommitdiff
path: root/libopie2
authormickeyl <mickeyl>2003-05-08 08:16:14 (UTC)
committer mickeyl <mickeyl>2003-05-08 08:16:14 (UTC)
commiteb1dba5550e63ab7b915d55048175e2992ab5447 (patch) (side-by-side diff)
tree52b37945352c56effd58cacac071cba4f410bef2 /libopie2
parent0950f27fa7136eb59f7e259cb4477ca10c89640d (diff)
downloadopie-eb1dba5550e63ab7b915d55048175e2992ab5447.zip
opie-eb1dba5550e63ab7b915d55048175e2992ab5447.tar.gz
opie-eb1dba5550e63ab7b915d55048175e2992ab5447.tar.bz2
decouple dump files from live capture to shift control over 'what' is dumped to applications
Diffstat (limited to 'libopie2') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opienet/opcap.cpp42
-rw-r--r--libopie2/opienet/opcap.h21
2 files changed, 48 insertions, 15 deletions
diff --git a/libopie2/opienet/opcap.cpp b/libopie2/opienet/opcap.cpp
index bef9182..1de7124 100644
--- a/libopie2/opienet/opcap.cpp
+++ b/libopie2/opienet/opcap.cpp
@@ -866,2 +866,13 @@ bool OPacketCapturer::blocking() const
+void OPacketCapturer::closeDumpFile()
+{
+ if ( _pcd )
+ {
+ pcap_dump_close( _pcd );
+ _pcd = 0;
+ }
+ pcap_close( _pch );
+}
+
+
void OPacketCapturer::close()
@@ -875,9 +886,4 @@ void OPacketCapturer::close()
}
- if ( _pcd )
- {
- pcap_dump_close( _pcd );
- _pcd = 0;
- }
- pcap_close( _pch );
- _open = false;
+ closeDumpFile();
+ _open = false;
}
@@ -899,2 +905,13 @@ int OPacketCapturer::dataLink() const
+void OPacketCapturer::dump( OPacket* p )
+{
+ if ( !_pcd )
+ {
+ qWarning( "OPacketCapturer::dump() - cannot dump without open capture file!" );
+ return;
+ }
+ pcap_dump( (u_char*) _pcd, &p->_hdr, p->_data );
+}
+
+
int OPacketCapturer::fileno() const
@@ -917,4 +934,2 @@ OPacket* OPacketCapturer::next()
qDebug( "<== OPacketCapturer::next()" );
- if ( _pcd )
- pcap_dump( (u_char*) _pcd, &header, pdata );
@@ -940,3 +955,3 @@ OPacket* OPacketCapturer::next()
-bool OPacketCapturer::open( const QString& name, const QString& filename )
+bool OPacketCapturer::open( const QString& name )
{
@@ -977,3 +992,8 @@ bool OPacketCapturer::open( const QString& name, const QString& filename )
- // if requested, open a dump
+ return true;
+}
+
+
+bool OPacketCapturer::openDumpFile( const QString& filename )
+{
pcap_dumper_t* dump = pcap_dump_open( _pch, const_cast<char*>( (const char*) filename ) );
diff --git a/libopie2/opienet/opcap.h b/libopie2/opienet/opcap.h
index ad5b07c..9119972 100644
--- a/libopie2/opienet/opcap.h
+++ b/libopie2/opienet/opcap.h
@@ -117,2 +117,4 @@ class OPacket : public QObject
+ friend class OPacketCapturer;
+
public:
@@ -526,3 +528,3 @@ class OPacketCapturer : public QObject
/**
- * Setting the packet capturer to use blocking IO calls can be useful when
+ * Set the packet capturer to use blocking or non-blocking IO. This can be useful when
* not using the socket notifier, e.g. without an application object.
@@ -535,3 +537,3 @@ class OPacketCapturer : public QObject
/**
- * Closes the packet capturer. This is automatically done in the destructor.
+ * Close the packet capturer. This is automatically done in the destructor.
*/
@@ -539,2 +541,6 @@ class OPacketCapturer : public QObject
/**
+ * Close the output capture file.
+ */
+ void closeDumpFile();
+ /**
* @returns the data link type.
@@ -544,2 +550,6 @@ class OPacketCapturer : public QObject
/**
+ * Dump a packet to the output capture file.
+ */
+ void dump( OPacket* );
+ /**
* @returns the file descriptor of the packet capturer. This is only useful, if
@@ -555,5 +565,4 @@ class OPacketCapturer : public QObject
* Open the packet capturer to capture packets in live-mode from @a interface.
- * If a @a filename is given, all captured packets are output to a tcpdump-compatible capture file.
*/
- bool open( const QString& interface, const QString& filename = QString::null );
+ bool open( const QString& interface );
/**
@@ -563,2 +572,6 @@ class OPacketCapturer : public QObject
/**
+ * Open a prerecorded tcpdump compatible capture file for use with @ref dump()
+ */
+ bool openDumpFile( const QString& filename );
+ /**
* @returns true if the packet capturer is open