summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--noncore/net/wellenreiter/ChangeLog3
-rw-r--r--noncore/net/wellenreiter/TODO6
-rw-r--r--noncore/net/wellenreiter/gui/wellenreiter.cpp48
-rw-r--r--noncore/net/wellenreiter/gui/wellenreiter.h5
4 files changed, 56 insertions, 6 deletions
diff --git a/noncore/net/wellenreiter/ChangeLog b/noncore/net/wellenreiter/ChangeLog
index fdc8aa7..b59f9f9 100644
--- a/noncore/net/wellenreiter/ChangeLog
+++ b/noncore/net/wellenreiter/ChangeLog
@@ -1,8 +1,11 @@
2004-??-?? Michael Lauer <mickey@Vanille.de>
+ * Registered a signal handler. We're now trying to gracefully exit and emergency close capture files.
+ This should allow reproducing failures.
+ * Added sanity check for compile time vs. run time Wireless Extension versions.
* Added sanity check isPresent(interface) before starting the engine.
* Added a View submenu. Added actions to expand and collapse all items.
* Switched to a (hopefully) more reliable method reading from gpsd.
* Added parsing of named ProbeRequests. Display only-probed-yet SSIDs in a different network color.
* Rewrote the simple actions on new {Network, Client, Station}. Besides playing a sound or
blinking a LED, a user customizable script can now be executed, if something has been
diff --git a/noncore/net/wellenreiter/TODO b/noncore/net/wellenreiter/TODO
index 0640d23..f0a193d 100644
--- a/noncore/net/wellenreiter/TODO
+++ b/noncore/net/wellenreiter/TODO
@@ -19,13 +19,13 @@
ENGINE
--------
- enable multiple packet sources
- infrared
- bluetooth
- - usb?
+ - usb
- define packet structure in a metalanguage and generate
the actual parsing code (hmmm)
- pester the ethereal folks to settle for an application independant
packet dissection framework... (unlikely)
@@ -33,13 +33,13 @@
- adaptive hopping scheme !
- gather interface capabilities
- enable sniffing in wired networks
-- fix autodetection (interface name)
+- fix autodetection (the interface name is not selected correctly)
- use ethtool IOCTLs (if present)
---------
UI
---------
@@ -70,8 +70,6 @@
# $Creator: Wellenreiter II Version 1.0.2
# $Format: wi-scan
# Latitude Longitude ( SSID ) Type ( BSSID ) Time (GMT) [ SNR Sig Noise ]
# $DateGMT: 2004-02-07
N 41.1008009 W 8.3893034 ( Porceven ) BBS ( 00:a0:f8:41:91:63 ) 22:32:39 (GMT) [ 21 177 156 ]
-- add SIGSEGV handler for emergency closing the capture file etc.
-
diff --git a/noncore/net/wellenreiter/gui/wellenreiter.cpp b/noncore/net/wellenreiter/gui/wellenreiter.cpp
index 40cd105..12b3978 100644
--- a/noncore/net/wellenreiter/gui/wellenreiter.cpp
+++ b/noncore/net/wellenreiter/gui/wellenreiter.cpp
@@ -55,12 +55,15 @@ using namespace Opie::Ui;
#include <assert.h>
#include <errno.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <stdlib.h>
+#include <signal.h>
+
+Wellenreiter* Wellenreiter::instance = 0;
Wellenreiter::Wellenreiter( QWidget* parent )
: WellenreiterBase( parent, 0, 0 ),
sniffing( false ), iface( 0 ), configwindow( 0 )
{
@@ -84,28 +87,59 @@ Wellenreiter::Wellenreiter( QWidget* parent )
pcap->setAutoDelete( false );
gps = new GPS( this );
QTimer::singleShot( 1000, this, SLOT( initialTimer() ) );
+ registerSignalHandler();
}
Wellenreiter::~Wellenreiter()
{
delete pcap;
+ //unregisterSignalHandler();
}
void Wellenreiter::initialTimer()
{
- odebug << "Wellenreiter::preloading manufacturer database..." << oendl;
+ odebug << "preloading manufacturer database..." << oendl;
OManufacturerDB::instance();
}
+void Wellenreiter::signalHandler( int sig )
+{
+ oerr << "Aye! Received SIGSEGV or SIGBUS! Trying to exit gracefully..." << oendl;
+ if ( Wellenreiter::instance->sniffing )
+ {
+ Wellenreiter::instance->pcap->close();
+ Wellenreiter::instance->stopClicked();
+ }
+ oerr << "Phew. Seemed to work." << oendl;
+ ::exit( -1 );
+}
+
+
+void Wellenreiter::registerSignalHandler()
+{
+ Wellenreiter::instance = this;
+ struct sigaction action;
+
+ action.sa_handler = Wellenreiter::signalHandler;
+ if (sigemptyset(&action.sa_mask))
+ oerr << "sigemptyset() failure:" << strerror( errno ) << oendl;
+ if (sigaction(SIGSEGV, &action, NULL))
+ oerr << "can't set up a signal handler for SIGSEGV:" << strerror( errno ) << oendl;
+ if (sigaction(SIGBUS, &action, NULL))
+ oerr << "can't set up a signal handler for SIGBUS:" << strerror( errno ) << oendl;
+ odebug << "signal handlers setup." << oendl;
+}
+
+
void Wellenreiter::setConfigWindow( WellenreiterConfigWindow* cw )
{
configwindow = cw;
}
@@ -499,13 +533,13 @@ void Wellenreiter::startClicked()
const int cardtype = configwindow->driverType();
const int interval = configwindow->hoppingInterval();
if ( ( interface == "" ) || ( cardtype == 0 ) )
{
QMessageBox::information( this, "Wellenreiter II",
- tr( "Your device is not\nproperly configured. Please reconfigure!" ) );
+ tr( "No device configured.\nPlease reconfigure!" ) );
return;
}
// configure device
ONetwork* net = ONetwork::instance();
@@ -529,12 +563,22 @@ void Wellenreiter::startClicked()
if ( !iface->isUp() )
{
QMessageBox::warning( this, "Wellenreiter II",
tr( "Can't bring interface '%1' up:\n" ).arg( iface->name() ) + strerror( errno ) );
return;
}
+
+ // check if wireless extension version matches
+ if ( ONetwork::wirelessExtensionCompileVersion() != iface->wirelessExtensionDriverVersion() )
+ {
+ QMessageBox::critical( this, "Wellenreiter II", tr( "<p>The Wireless Extension Versions<br>are not matching!<p>"
+ " Wellenreiter II : WE V%1<br>Interface driver: WE V%2" )
+ .arg( QString::number( ONetwork::wirelessExtensionCompileVersion() ) )
+ .arg( QString::number( iface->wirelessExtensionDriverVersion() ) ) );
+ return;
+ }
}
// set monitor mode
bool usePrism = configwindow->usePrismHeader();
switch ( cardtype )
{
diff --git a/noncore/net/wellenreiter/gui/wellenreiter.h b/noncore/net/wellenreiter/gui/wellenreiter.h
index f609ef4..32e5690 100644
--- a/noncore/net/wellenreiter/gui/wellenreiter.h
+++ b/noncore/net/wellenreiter/gui/wellenreiter.h
@@ -17,12 +17,14 @@
#include "wellenreiterbase.h"
#ifdef QWS
#include <opie2/odevice.h>
#endif
+#include <signal.h>
+
class QTimerEvent;
class QPixmap;
namespace Opie {namespace Net {class OPacket;}}
namespace Opie {namespace Net {class OWaveLanManagementPacket;}}
namespace Opie {namespace Net {class OWaveLanControlPacket;}}
namespace Opie {namespace Net {class OWaveLanDataPacket;}}
@@ -51,12 +53,14 @@ class Wellenreiter : public WellenreiterBase {
PacketView* hexWindow() const { return hexwindow; };
bool isDaemonRunning() const { return sniffing; };
QString captureFileName() const { return dumpname; };
public:
bool sniffing;
+ static Wellenreiter* instance;
+ static void signalHandler( int sig );
protected:
virtual void timerEvent( QTimerEvent* );
public slots:
void initialTimer();
@@ -83,12 +87,13 @@ class Wellenreiter : public WellenreiterBase {
void handleARPData( Opie::Net::OPacket* p, Opie::Net::OARPPacket* arp, Opie::Net::OMacAddress& from, Opie::Net::OMacAddress& to );
void handleIPData( Opie::Net::OPacket* p, Opie::Net::OIPPacket* ip, Opie::Net::OMacAddress& from, Opie::Net::OMacAddress& to );
void handleNotification( Opie::Net::OPacket* p );
void doAction( const QString& action, const QString& protocol, Opie::Net::OPacket* p );
QObject* childIfToParse( Opie::Net::OPacket* p, const QString& protocol );
bool checkDumpPacket( Opie::Net::OPacket* p );
+ void registerSignalHandler();
private:
#ifdef QWS
Opie::Core::OSystem _system; // Opie Operating System identifier
#endif