summaryrefslogtreecommitdiff
authormickeyl <mickeyl>2004-05-01 16:15:05 (UTC)
committer mickeyl <mickeyl>2004-05-01 16:15:05 (UTC)
commitfd2bbf9a09aa7a13bd8a43db351b9153e5a4b7ab (patch) (unidiff)
tree17e24a7acb78e995e53ec7127e2d20a834984706
parentd5abd7878f553f5ac0a41966b27f4c09389d3cfd (diff)
downloadopie-fd2bbf9a09aa7a13bd8a43db351b9153e5a4b7ab.zip
opie-fd2bbf9a09aa7a13bd8a43db351b9153e5a4b7ab.tar.gz
opie-fd2bbf9a09aa7a13bd8a43db351b9153e5a4b7ab.tar.bz2
- be really paranoid about wireless extension versions for compile time vs. run time
- register handlers for SIGSEGV and SIGBUG to emergency-close the capture file
Diffstat (more/less context) (ignore 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,6 +1,9 @@
1 2004-??-?? Michael Lauer <mickey@Vanille.de> 1 2004-??-?? Michael Lauer <mickey@Vanille.de>
2 2
3 * Registered a signal handler. We're now trying to gracefully exit and emergency close capture files.
4 This should allow reproducing failures.
5 * Added sanity check for compile time vs. run time Wireless Extension versions.
3 * Added sanity check isPresent(interface) before starting the engine. 6 * Added sanity check isPresent(interface) before starting the engine.
4 * Added a View submenu. Added actions to expand and collapse all items. 7 * Added a View submenu. Added actions to expand and collapse all items.
5 * Switched to a (hopefully) more reliable method reading from gpsd. 8 * Switched to a (hopefully) more reliable method reading from gpsd.
6 * Added parsing of named ProbeRequests. Display only-probed-yet SSIDs in a different network color. 9 * Added parsing of named ProbeRequests. Display only-probed-yet SSIDs in a different network color.
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
@@ -21,9 +21,9 @@
21 21
22- enable multiple packet sources 22- enable multiple packet sources
23 - infrared 23 - infrared
24 - bluetooth 24 - bluetooth
25 - usb? 25 - usb
26 26
27- define packet structure in a metalanguage and generate 27- define packet structure in a metalanguage and generate
28 the actual parsing code (hmmm) 28 the actual parsing code (hmmm)
29 29
@@ -35,9 +35,9 @@
35- gather interface capabilities 35- gather interface capabilities
36 36
37- enable sniffing in wired networks 37- enable sniffing in wired networks
38 38
39- fix autodetection (interface name) 39- fix autodetection (the interface name is not selected correctly)
40 40
41- use ethtool IOCTLs (if present) 41- use ethtool IOCTLs (if present)
42 42
43--------- 43---------
@@ -72,6 +72,4 @@
72 # Latitude Longitude ( SSID ) Type ( BSSID ) Time (GMT) [ SNR Sig Noise ] 72 # Latitude Longitude ( SSID ) Type ( BSSID ) Time (GMT) [ SNR Sig Noise ]
73 # $DateGMT: 2004-02-07 73 # $DateGMT: 2004-02-07
74 N 41.1008009 W 8.3893034 ( Porceven ) BBS ( 00:a0:f8:41:91:63 ) 22:32:39 (GMT) [ 21 177 156 ] 74 N 41.1008009 W 8.3893034 ( Porceven ) BBS ( 00:a0:f8:41:91:63 ) 22:32:39 (GMT) [ 21 177 156 ]
75 75
76- add SIGSEGV handler for emergency closing the capture file etc.
77
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
@@ -57,8 +57,11 @@ using namespace Opie::Ui;
57#include <unistd.h> 57#include <unistd.h>
58#include <string.h> 58#include <string.h>
59#include <sys/types.h> 59#include <sys/types.h>
60#include <stdlib.h> 60#include <stdlib.h>
61#include <signal.h>
62
63Wellenreiter* Wellenreiter::instance = 0;
61 64
62Wellenreiter::Wellenreiter( QWidget* parent ) 65Wellenreiter::Wellenreiter( QWidget* parent )
63 : WellenreiterBase( parent, 0, 0 ), 66 : WellenreiterBase( parent, 0, 0 ),
64 sniffing( false ), iface( 0 ), configwindow( 0 ) 67 sniffing( false ), iface( 0 ), configwindow( 0 )
@@ -86,24 +89,55 @@ Wellenreiter::Wellenreiter( QWidget* parent )
86 gps = new GPS( this ); 89 gps = new GPS( this );
87 90
88 QTimer::singleShot( 1000, this, SLOT( initialTimer() ) ); 91 QTimer::singleShot( 1000, this, SLOT( initialTimer() ) );
89 92
93 registerSignalHandler();
90} 94}
91 95
92 96
93Wellenreiter::~Wellenreiter() 97Wellenreiter::~Wellenreiter()
94{ 98{
95 delete pcap; 99 delete pcap;
100 //unregisterSignalHandler();
96} 101}
97 102
98 103
99void Wellenreiter::initialTimer() 104void Wellenreiter::initialTimer()
100{ 105{
101 odebug << "Wellenreiter::preloading manufacturer database..." << oendl; 106 odebug << "preloading manufacturer database..." << oendl;
102 OManufacturerDB::instance(); 107 OManufacturerDB::instance();
103} 108}
104 109
105 110
111void Wellenreiter::signalHandler( int sig )
112{
113 oerr << "Aye! Received SIGSEGV or SIGBUS! Trying to exit gracefully..." << oendl;
114 if ( Wellenreiter::instance->sniffing )
115 {
116 Wellenreiter::instance->pcap->close();
117 Wellenreiter::instance->stopClicked();
118 }
119 oerr << "Phew. Seemed to work." << oendl;
120 ::exit( -1 );
121}
122
123
124void Wellenreiter::registerSignalHandler()
125{
126 Wellenreiter::instance = this;
127 struct sigaction action;
128
129 action.sa_handler = Wellenreiter::signalHandler;
130 if (sigemptyset(&action.sa_mask))
131 oerr << "sigemptyset() failure:" << strerror( errno ) << oendl;
132 if (sigaction(SIGSEGV, &action, NULL))
133 oerr << "can't set up a signal handler for SIGSEGV:" << strerror( errno ) << oendl;
134 if (sigaction(SIGBUS, &action, NULL))
135 oerr << "can't set up a signal handler for SIGBUS:" << strerror( errno ) << oendl;
136 odebug << "signal handlers setup." << oendl;
137}
138
139
106void Wellenreiter::setConfigWindow( WellenreiterConfigWindow* cw ) 140void Wellenreiter::setConfigWindow( WellenreiterConfigWindow* cw )
107{ 141{
108 configwindow = cw; 142 configwindow = cw;
109} 143}
@@ -501,9 +535,9 @@ void Wellenreiter::startClicked()
501 535
502 if ( ( interface == "" ) || ( cardtype == 0 ) ) 536 if ( ( interface == "" ) || ( cardtype == 0 ) )
503 { 537 {
504 QMessageBox::information( this, "Wellenreiter II", 538 QMessageBox::information( this, "Wellenreiter II",
505 tr( "Your device is not\nproperly configured. Please reconfigure!" ) ); 539 tr( "No device configured.\nPlease reconfigure!" ) );
506 return; 540 return;
507 } 541 }
508 542
509 // configure device 543 // configure device
@@ -531,8 +565,18 @@ void Wellenreiter::startClicked()
531 QMessageBox::warning( this, "Wellenreiter II", 565 QMessageBox::warning( this, "Wellenreiter II",
532 tr( "Can't bring interface '%1' up:\n" ).arg( iface->name() ) + strerror( errno ) ); 566 tr( "Can't bring interface '%1' up:\n" ).arg( iface->name() ) + strerror( errno ) );
533 return; 567 return;
534 } 568 }
569
570 // check if wireless extension version matches
571 if ( ONetwork::wirelessExtensionCompileVersion() != iface->wirelessExtensionDriverVersion() )
572 {
573 QMessageBox::critical( this, "Wellenreiter II", tr( "<p>The Wireless Extension Versions<br>are not matching!<p>"
574 " Wellenreiter II : WE V%1<br>Interface driver: WE V%2" )
575 .arg( QString::number( ONetwork::wirelessExtensionCompileVersion() ) )
576 .arg( QString::number( iface->wirelessExtensionDriverVersion() ) ) );
577 return;
578 }
535 } 579 }
536 // set monitor mode 580 // set monitor mode
537 bool usePrism = configwindow->usePrismHeader(); 581 bool usePrism = configwindow->usePrismHeader();
538 582
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
@@ -19,8 +19,10 @@
19#ifdef QWS 19#ifdef QWS
20#include <opie2/odevice.h> 20#include <opie2/odevice.h>
21#endif 21#endif
22 22
23#include <signal.h>
24
23class QTimerEvent; 25class QTimerEvent;
24class QPixmap; 26class QPixmap;
25namespace Opie {namespace Net {class OPacket;}} 27namespace Opie {namespace Net {class OPacket;}}
26namespace Opie {namespace Net {class OWaveLanManagementPacket;}} 28namespace Opie {namespace Net {class OWaveLanManagementPacket;}}
@@ -53,8 +55,10 @@ class Wellenreiter : public WellenreiterBase {
53 QString captureFileName() const { return dumpname; }; 55 QString captureFileName() const { return dumpname; };
54 56
55 public: 57 public:
56 bool sniffing; 58 bool sniffing;
59 static Wellenreiter* instance;
60 static void signalHandler( int sig );
57 61
58 protected: 62 protected:
59 virtual void timerEvent( QTimerEvent* ); 63 virtual void timerEvent( QTimerEvent* );
60 64
@@ -85,8 +89,9 @@ class Wellenreiter : public WellenreiterBase {
85 void handleNotification( Opie::Net::OPacket* p ); 89 void handleNotification( Opie::Net::OPacket* p );
86 void doAction( const QString& action, const QString& protocol, Opie::Net::OPacket* p ); 90 void doAction( const QString& action, const QString& protocol, Opie::Net::OPacket* p );
87 QObject* childIfToParse( Opie::Net::OPacket* p, const QString& protocol ); 91 QObject* childIfToParse( Opie::Net::OPacket* p, const QString& protocol );
88 bool checkDumpPacket( Opie::Net::OPacket* p ); 92 bool checkDumpPacket( Opie::Net::OPacket* p );
93 void registerSignalHandler();
89 94
90 private: 95 private:
91 #ifdef QWS 96 #ifdef QWS
92 Opie::Core::OSystem _system; // Opie Operating System identifier 97 Opie::Core::OSystem _system; // Opie Operating System identifier