summaryrefslogtreecommitdiff
Unidiff
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,8 +1,11 @@
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.
7 * Rewrote the simple actions on new {Network, Client, Station}. Besides playing a sound or 10 * Rewrote the simple actions on new {Network, Client, Station}. Besides playing a sound or
8 blinking a LED, a user customizable script can now be executed, if something has been 11 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 @@
19 ENGINE 19 ENGINE
20-------- 20--------
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
30- pester the ethereal folks to settle for an application independant 30- pester the ethereal folks to settle for an application independant
31 packet dissection framework... (unlikely) 31 packet dissection framework... (unlikely)
@@ -33,13 +33,13 @@
33- adaptive hopping scheme ! 33- adaptive hopping scheme !
34 34
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---------
44 UI 44 UI
45--------- 45---------
@@ -70,8 +70,6 @@
70 # $Creator: Wellenreiter II Version 1.0.2 70 # $Creator: Wellenreiter II Version 1.0.2
71 # $Format: wi-scan 71 # $Format: wi-scan
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
@@ -55,12 +55,15 @@ using namespace Opie::Ui;
55#include <assert.h> 55#include <assert.h>
56#include <errno.h> 56#include <errno.h>
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 )
65{ 68{
66 69
@@ -84,28 +87,59 @@ Wellenreiter::Wellenreiter( QWidget* parent )
84 pcap->setAutoDelete( false ); 87 pcap->setAutoDelete( false );
85 88
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}
110 144
111 145
@@ -499,13 +533,13 @@ void Wellenreiter::startClicked()
499 const int cardtype = configwindow->driverType(); 533 const int cardtype = configwindow->driverType();
500 const int interval = configwindow->hoppingInterval(); 534 const int interval = configwindow->hoppingInterval();
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
510 ONetwork* net = ONetwork::instance(); 544 ONetwork* net = ONetwork::instance();
511 545
@@ -529,12 +563,22 @@ void Wellenreiter::startClicked()
529 if ( !iface->isUp() ) 563 if ( !iface->isUp() )
530 { 564 {
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
539 switch ( cardtype ) 583 switch ( cardtype )
540 { 584 {
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 @@
17#include "wellenreiterbase.h" 17#include "wellenreiterbase.h"
18 18
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;}}
27namespace Opie {namespace Net {class OWaveLanControlPacket;}} 29namespace Opie {namespace Net {class OWaveLanControlPacket;}}
28namespace Opie {namespace Net {class OWaveLanDataPacket;}} 30namespace Opie {namespace Net {class OWaveLanDataPacket;}}
@@ -51,12 +53,14 @@ class Wellenreiter : public WellenreiterBase {
51 PacketView* hexWindow() const { return hexwindow; }; 53 PacketView* hexWindow() const { return hexwindow; };
52 bool isDaemonRunning() const { return sniffing; }; 54 bool isDaemonRunning() const { return sniffing; };
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
61 public slots: 65 public slots:
62 void initialTimer(); 66 void initialTimer();
@@ -83,12 +87,13 @@ class Wellenreiter : public WellenreiterBase {
83 void handleARPData( Opie::Net::OPacket* p, Opie::Net::OARPPacket* arp, Opie::Net::OMacAddress& from, Opie::Net::OMacAddress& to ); 87 void handleARPData( Opie::Net::OPacket* p, Opie::Net::OARPPacket* arp, Opie::Net::OMacAddress& from, Opie::Net::OMacAddress& to );
84 void handleIPData( Opie::Net::OPacket* p, Opie::Net::OIPPacket* ip, Opie::Net::OMacAddress& from, Opie::Net::OMacAddress& to ); 88 void handleIPData( Opie::Net::OPacket* p, Opie::Net::OIPPacket* ip, Opie::Net::OMacAddress& from, Opie::Net::OMacAddress& to );
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
93 #endif 98 #endif
94 99