author | mickeyl <mickeyl> | 2003-04-05 23:08:46 (UTC) |
---|---|---|
committer | mickeyl <mickeyl> | 2003-04-05 23:08:46 (UTC) |
commit | b7682f160fafe69bfd47dcfb1c88f2ac2b1afaf5 (patch) (side-by-side diff) | |
tree | 68c5a0c5da88fff94582d2e6a072d8e9bbeaaf30 | |
parent | 6a949f685bd3fb50f810ad603eaafdb57720077c (diff) | |
download | opie-b7682f160fafe69bfd47dcfb1c88f2ac2b1afaf5.zip opie-b7682f160fafe69bfd47dcfb1c88f2ac2b1afaf5.tar.gz opie-b7682f160fafe69bfd47dcfb1c88f2ac2b1afaf5.tar.bz2 |
- correct beacon bug (off-by-one)
- display hex dump per packet in hex window
- allow saving hex window contents
-rw-r--r-- | noncore/net/wellenreiter/gui/hexwindow.cpp | 10 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/hexwindow.h | 1 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/mainwindow.cpp | 23 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/mainwindow.h | 1 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/scanlist.cpp | 4 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/wellenreiter.cpp | 5 |
6 files changed, 38 insertions, 6 deletions
diff --git a/noncore/net/wellenreiter/gui/hexwindow.cpp b/noncore/net/wellenreiter/gui/hexwindow.cpp index a3022f4..8b17285 100644 --- a/noncore/net/wellenreiter/gui/hexwindow.cpp +++ b/noncore/net/wellenreiter/gui/hexwindow.cpp @@ -7,33 +7,39 @@ ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** **********************************************************************/ #include "hexwindow.h" #include <qmultilineedit.h> MHexWindow::MHexWindow( QWidget * parent, const char * name, WFlags f ) :QVBox( parent, name, f ) { ledit = new QMultiLineEdit( this ); - + ledit->setFont( QFont( "fixed", 10 ) ); + // FIXME: Set properties( font, read-only, etc...) - + }; void MHexWindow::log( QString text ) { ledit->append( text ); }; +const QString MHexWindow::getLog() const +{ + return ledit->text(); +} + void MHexWindow::clear() { ledit->clear(); } diff --git a/noncore/net/wellenreiter/gui/hexwindow.h b/noncore/net/wellenreiter/gui/hexwindow.h index 2618b8c..f2f870c 100644 --- a/noncore/net/wellenreiter/gui/hexwindow.h +++ b/noncore/net/wellenreiter/gui/hexwindow.h @@ -15,25 +15,26 @@ #ifndef HEXWINDOW_H #define HEXWINDOW_H #include <qvbox.h> class QString; class QMultiLineEdit; class MHexWindow: public QVBox { public: MHexWindow( QWidget * parent = 0, const char * name = "MHexWindow", WFlags f = 0 ); void log( QString text ); + const QString getLog() const; void clear(); protected: QMultiLineEdit* ledit; }; #endif diff --git a/noncore/net/wellenreiter/gui/mainwindow.cpp b/noncore/net/wellenreiter/gui/mainwindow.cpp index 8e0164f..69d2b3a 100644 --- a/noncore/net/wellenreiter/gui/mainwindow.cpp +++ b/noncore/net/wellenreiter/gui/mainwindow.cpp @@ -94,33 +94,34 @@ WellenreiterMainWindow::WellenreiterMainWindow( QWidget * parent, const char * n QToolButton* d = new QToolButton( 0 ); #ifdef QWS d->setAutoRaise( true ); #endif d->setIconSet( *settingsIconSet ); connect( d, SIGNAL( clicked() ), this, SLOT( showConfigure() ) ); // setup menu bar int id; QMenuBar* mb = menuBar(); QPopupMenu* fileSave = new QPopupMenu( mb ); fileSave->insertItem( "&Session...", this, SLOT( fileSaveSession() ) ); - fileSave->insertItem( "&Log...", this, SLOT( fileSaveLog() ) ); + fileSave->insertItem( "&Text Log...", this, SLOT( fileSaveLog() ) ); + fileSave->insertItem( "&Hex Log...", this, SLOT( fileSaveHex() ) ); QPopupMenu* fileLoad = new QPopupMenu( mb ); fileLoad->insertItem( "&Session...", this, SLOT( fileLoadSession() ) ); //fileLoad->insertItem( "&Log", this, SLOT( fileLoadLog() ) ); QPopupMenu* file = new QPopupMenu( mb ); file->insertItem( "&New", this, SLOT( fileNew() ) ); id = file->insertItem( "&Load", fileLoad ); file->insertItem( "&Save", fileSave ); file->insertSeparator(); file->insertItem( "&Exit", qApp, SLOT( quit() ) ); QPopupMenu* view = new QPopupMenu( mb ); view->insertItem( "&Configure..." ); QPopupMenu* sniffer = new QPopupMenu( mb ); @@ -267,32 +268,52 @@ void WellenreiterMainWindow::fileSaveSession() QFile f( fname ); if ( f.open(IO_WriteOnly) ) { QDataStream t( &f ); t << *mw->netView(); f.close(); qDebug( "Saved session to file '%s'", (const char*) fname ); } else { qDebug( "Problem saving session to file '%s'", (const char*) fname ); } } } +void WellenreiterMainWindow::fileSaveHex() +{ + QString fname = getFileName( true ); + if ( !fname.isEmpty() ) + { + QFile f( fname ); + if ( f.open(IO_WriteOnly) ) + { + QTextStream t( &f ); + t << mw->hexWindow()->getLog(); + f.close(); + qDebug( "Saved hex log to file '%s'", (const char*) fname ); + } + else + { + qDebug( "Problem saving hex log to file '%s'", (const char*) fname ); + } + } +} + void WellenreiterMainWindow::fileLoadSession() { QString fname = getFileName( false ); if ( !fname.isEmpty() ) { QFile f( fname ); if ( f.open(IO_ReadOnly) ) { QDataStream t( &f ); t >> *mw->netView(); f.close(); qDebug( "Loaded session from file '%s'", (const char*) fname ); } else { qDebug( "Problem loading session from file '%s'", (const char*) fname ); diff --git a/noncore/net/wellenreiter/gui/mainwindow.h b/noncore/net/wellenreiter/gui/mainwindow.h index e06a60c..1b08c5b 100644 --- a/noncore/net/wellenreiter/gui/mainwindow.h +++ b/noncore/net/wellenreiter/gui/mainwindow.h @@ -40,22 +40,23 @@ class WellenreiterMainWindow: public QMainWindow const QIconSet* infoIconSet; const QIconSet* settingsIconSet; const QIconSet* cancelIconSet; QToolButton* startStopButton; protected: virtual void closeEvent( QCloseEvent* ); private: QString getFileName( bool save ); public slots: void showConfigure(); void demoAddStations(); void fileSaveLog(); + void fileSaveHex(); void fileSaveSession(); void fileLoadSession(); void fileNew(); }; #endif diff --git a/noncore/net/wellenreiter/gui/scanlist.cpp b/noncore/net/wellenreiter/gui/scanlist.cpp index a006a3c..34c69f5 100644 --- a/noncore/net/wellenreiter/gui/scanlist.cpp +++ b/noncore/net/wellenreiter/gui/scanlist.cpp @@ -181,33 +181,33 @@ void MScanListView::addNewItem( QString type, QString essid, QString macaddr, bo const int col_type = 0; const int col_essid = 0; const int col_sig = 1; const int col_ap = 2; const int col_channel = 3; const int col_wep = 4; const int col_traffic = 5; const int col_manuf = 6; const int col_firstseen = 7; const int col_lastseen = 8; MScanListItem::MScanListItem( QListView* parent, QString type, QString essid, QString macaddr, bool wep, int channel, int signal ) :OListViewItem( parent, essid, QString::null, macaddr, QString::null, QString::null ), _type( type ), _essid( essid ), _macaddr( macaddr ), _wep( wep ), - _channel( channel ), _signal( signal ), _beacons( 0 ) + _channel( channel ), _signal( signal ), _beacons( 1 ) { qDebug( "creating scanlist item" ); if ( WellenreiterConfigWindow::instance() && type == "networks" ) playSound( WellenreiterConfigWindow::instance()->soundOnNetwork() ); decorateItem( type, essid, macaddr, wep, channel, signal ); } MScanListItem::MScanListItem( QListViewItem* parent, QString type, QString essid, QString macaddr, bool wep, int channel, int signal ) :OListViewItem( parent, essid, QString::null, macaddr, QString::null, QString::null ) { qDebug( "creating scanlist item" ); decorateItem( type, essid, macaddr, wep, channel, signal ); } OListViewItem* MScanListItem::childFactory() @@ -261,33 +261,33 @@ void MScanListItem::decorateItem( QString type, QString essid, QString macaddr, if ( signal != -1 ) setText( col_sig, QString::number( signal ) ); if ( channel != -1 ) setText( col_channel, QString::number( channel ) ); setText( col_firstseen, QTime::currentTime().toString() ); //setText( col_lastseen, QTime::currentTime().toString() ); listView()->triggerUpdate(); this->type = type; _type = type; _essid = essid; _macaddr = macaddr; _channel = channel; - _beacons = 0; + _beacons = 1; _signal = 0; } void MScanListItem::setManufacturer( const QString& manufacturer ) { setText( col_manuf, manufacturer ); } void MScanListItem::playSound( const QString& sound ) const { #ifdef QWS if ( sound == "Ignore" ) return; else if ( sound == "Touch" ) ODevice::inst()->touchSound(); else if ( sound == "Key" ) ODevice::inst()->keySound(); diff --git a/noncore/net/wellenreiter/gui/wellenreiter.cpp b/noncore/net/wellenreiter/gui/wellenreiter.cpp index d80a6e6..aa33158 100644 --- a/noncore/net/wellenreiter/gui/wellenreiter.cpp +++ b/noncore/net/wellenreiter/gui/wellenreiter.cpp @@ -97,32 +97,34 @@ Wellenreiter::Wellenreiter( QWidget* parent ) Wellenreiter::~Wellenreiter() { // no need to delete child widgets, Qt does it all for us delete manufacturerdb; delete pcap; } void Wellenreiter::setConfigWindow( WellenreiterConfigWindow* cw ) { configwindow = cw; } void Wellenreiter::receivePacket(OPacket* p) { + hexWindow()->log( p->dump( 8 ) ); + // check if we received a beacon frame // static_cast is justified here OWaveLanManagementPacket* beacon = static_cast<OWaveLanManagementPacket*>( p->child( "802.11 Management" ) ); if ( !beacon ) return; QString type; //FIXME: Can stations in ESS mode can be distinguished from APs? //FIXME: Apparently yes, but not by listening to beacons, because //FIXME: they simply don't send beacons in infrastructure mode. //FIXME: so we also have to listen to data packets if ( beacon->canIBSS() ) type = "adhoc"; else type = "managed"; @@ -148,32 +150,33 @@ void Wellenreiter::startStopClicked() oApp->setTitle(); #else qApp->mainWidget()->setCaption( "Wellenreiter II" ); #endif // get interface name from config window const QString& interface = configwindow->interfaceName->currentText(); ONetwork* net = ONetwork::instance(); iface = static_cast<OWirelessNetworkInterface*>(net->interface( interface )); // switch off monitor mode iface->setMonitorMode( false ); // switch off promisc flag iface->setPromiscuousMode( false ); system( "cardctl reset; sleep 1" ); //FIXME: Use OProcess + logwindow->log( "(i) Stopped Scanning." ); // message the user QMessageBox::information( this, "Wellenreiter II", "Your wireless card\nshould now be usable again." ); } else { // get configuration from config window const QString& interface = configwindow->interfaceName->currentText(); const int cardtype = configwindow->daemonDeviceType(); const int interval = configwindow->daemonHopInterval(); if ( ( interface == "" ) || ( cardtype == 0 ) ) { QMessageBox::information( this, "Wellenreiter II", "Your device is not\nproperly configured. Please reconfigure!" ); @@ -209,26 +212,26 @@ void Wellenreiter::startStopClicked() if ( !pcap->isOpen() ) { QMessageBox::warning( this, "Wellenreiter II", "Can't open packet capturer:\n" + QString(strerror( errno ) )); return; } // set capturer to non-blocking mode pcap->setBlocking( false ); // start channel hopper iface->setChannelHopping( 1000 ); //use interval from config window // connect connect( pcap, SIGNAL( receivedPacket(OPacket*) ), this, SLOT( receivePacket(OPacket*) ) ); - logwindow->log( "(i) Daemon has been started." ); + logwindow->log( "(i) Started Scanning." ); #ifdef QWS oApp->setTitle( "Scanning ..." ); #else qApp->mainWidget()->setCaption( "Wellenreiter II / Scanning ..." ); #endif sniffing = true; } } |