author | mickeyl <mickeyl> | 2002-12-28 18:57:11 (UTC) |
---|---|---|
committer | mickeyl <mickeyl> | 2002-12-28 18:57:11 (UTC) |
commit | f70916f3ab05917a3d0dda64beb8db5ac16448ab (patch) (side-by-side diff) | |
tree | bd138c1a901de7ea49b012b32e48d3f4b8b073f8 | |
parent | 1362726346f1ab497ad5822db1a9b284f5bdaa1a (diff) | |
download | opie-f70916f3ab05917a3d0dda64beb8db5ac16448ab.zip opie-f70916f3ab05917a3d0dda64beb8db5ac16448ab.tar.gz opie-f70916f3ab05917a3d0dda64beb8db5ac16448ab.tar.bz2 |
- refactored a number of classes
- removed dumb polling ==> QSocketNotifier rocks
- switched to parsing the daemon stuff in the gui,
since libwellenreiter still has problems.
-rw-r--r-- | noncore/net/wellenreiter/gui/cardconfig.cpp | 29 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/cardconfig.h | 58 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/configbase.ui | 10 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/gui-x11.pro | 6 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/gui.pro | 6 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/scanlist.cpp | 100 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/scanlist.h | 11 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/scanlistitem.cpp | 1 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/wellenreiter.cpp | 207 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/wellenreiter.h | 14 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/wellenreiterbase.cpp | 8 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/wellenreiterbase.h | 13 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/wlan.cpp | 57 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/wlan.h | 38 |
14 files changed, 398 insertions, 160 deletions
diff --git a/noncore/net/wellenreiter/gui/cardconfig.cpp b/noncore/net/wellenreiter/gui/cardconfig.cpp new file mode 100644 index 0000000..1ca1d27 --- a/dev/null +++ b/noncore/net/wellenreiter/gui/cardconfig.cpp @@ -0,0 +1,29 @@ +/********************************************************************** +** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved. +** +** This file is part of Opie Environment. +** +** This file may be distributed and/or modified under the terms of the +** 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 "cardconfig.h" + +#include <qstring.h> + +CardConfig::CardConfig( const QString& interface, Type type, int hopinterval ) + :_interface( interface ), _type( type ), _hopinterval( hopinterval ) +{ + +} + +CardConfig::~CardConfig() +{ +} + diff --git a/noncore/net/wellenreiter/gui/cardconfig.h b/noncore/net/wellenreiter/gui/cardconfig.h new file mode 100644 index 0000000..f54ebac --- a/dev/null +++ b/noncore/net/wellenreiter/gui/cardconfig.h @@ -0,0 +1,58 @@ +/********************************************************************** +** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved. +** +** This file is part of Opie Environment. +** +** This file may be distributed and/or modified under the terms of the +** 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. +** +**********************************************************************/ + +#ifndef CARDCONFIG_H +#define CARDCONFIG_H + +#include <qstring.h> + +#ifdef QWS +#include <opie/odevice.h> +using namespace Opie; +#endif + +class CardConfig +{ + public: + + typedef enum { Prism, Orinoco, HostAP, Manual } Type; + + public: + + CardConfig( const QString& interface, Type type = Manual, int hopinterval = 100 ); + virtual ~CardConfig(); + + const QString& interface() { return _interface; }; + int hopinterval() { return _hopinterval; }; + Type type() { return _type; }; + + #ifdef QWS + OSystem system() { return _system; }; + #endif + + private: + + QString _interface; + Type _type; + int _hopinterval; + + #ifdef QWS + OSystem _system; + #endif + +}; + +#endif + diff --git a/noncore/net/wellenreiter/gui/configbase.ui b/noncore/net/wellenreiter/gui/configbase.ui index e2f734a..8dcf513 100644 --- a/noncore/net/wellenreiter/gui/configbase.ui +++ b/noncore/net/wellenreiter/gui/configbase.ui @@ -1,284 +1,278 @@ <!DOCTYPE UI><UI> <class>WellenreiterConfigBase</class> <widget> <class>QWidget</class> <property stdset="1"> <name>name</name> <cstring>WellenreiterConfigBase</cstring> </property> <property stdset="1"> <name>geometry</name> <rect> <x>0</x> <y>0</y> - <width>232</width> + <width>228</width> <height>267</height> </rect> </property> <property stdset="1"> <name>caption</name> <string>Form1</string> </property> <property> <name>layoutMargin</name> </property> <property> <name>layoutSpacing</name> </property> <vbox> <property stdset="1"> <name>margin</name> <number>4</number> </property> <property stdset="1"> <name>spacing</name> - <number>0</number> + <number>1</number> </property> <widget> <class>QLayoutWidget</class> <property stdset="1"> <name>name</name> <cstring>Layout5</cstring> </property> <property> <name>layoutSpacing</name> </property> <hbox> <property stdset="1"> <name>margin</name> <number>0</number> </property> <property stdset="1"> <name>spacing</name> <number>2</number> </property> <widget> <class>QLabel</class> <property stdset="1"> <name>name</name> <cstring>TextLabel3_2</cstring> </property> <property stdset="1"> <name>sizePolicy</name> <sizepolicy> <hsizetype>4</hsizetype> <vsizetype>1</vsizetype> </sizepolicy> </property> <property stdset="1"> <name>text</name> <string>Sniffer</string> </property> </widget> <widget> <class>Line</class> <property stdset="1"> <name>name</name> <cstring>Line9</cstring> </property> <property stdset="1"> <name>orientation</name> <enum>Horizontal</enum> </property> </widget> </hbox> </widget> <widget> <class>QLayoutWidget</class> <property stdset="1"> <name>name</name> <cstring>Layout7</cstring> </property> <property> <name>layoutSpacing</name> </property> <grid> <property stdset="1"> <name>margin</name> <number>0</number> </property> <property stdset="1"> <name>spacing</name> <number>2</number> </property> <widget row="0" column="0" > <class>QComboBox</class> <item> <property> <name>text</name> <string><select></string> </property> </item> <item> <property> <name>text</name> <string>eth0</string> </property> </item> <item> <property> <name>text</name> <string>eth1</string> </property> </item> <item> <property> <name>text</name> <string>wlan0</string> </property> </item> <item> <property> <name>text</name> <string>wlan1</string> </property> </item> <item> <property> <name>text</name> <string>wifi0</string> </property> </item> <item> <property> <name>text</name> <string>wifi1</string> </property> </item> <property stdset="1"> <name>name</name> <cstring>interfaceName</cstring> </property> <property stdset="1"> <name>enabled</name> <bool>true</bool> </property> </widget> <widget row="4" column="0" rowspan="1" colspan="2" > <class>QCheckBox</class> <property stdset="1"> <name>name</name> <cstring>activeScanning</cstring> </property> <property stdset="1"> <name>enabled</name> <bool>false</bool> </property> <property stdset="1"> <name>text</name> <string>Active Scanning (caution!)</string> </property> </widget> <widget row="1" column="0" > <class>QComboBox</class> <item> <property> <name>text</name> <string><select></string> </property> </item> <item> <property> <name>text</name> - <string>cisco</string> - </property> - </item> - <item> - <property> - <name>text</name> <string>orinoco</string> </property> </item> <item> <property> <name>text</name> <string>prism</string> </property> </item> <item> <property> <name>text</name> <string><manual></string> </property> </item> <property stdset="1"> <name>name</name> <cstring>deviceType</cstring> </property> <property stdset="1"> <name>enabled</name> <bool>true</bool> </property> </widget> <widget row="3" column="0" rowspan="1" colspan="2" > <class>QCheckBox</class> <property stdset="1"> <name>name</name> <cstring>additionalInfo</cstring> </property> <property stdset="1"> <name>enabled</name> <bool>false</bool> </property> <property stdset="1"> <name>text</name> <string>Gather Additional Info</string> </property> </widget> <widget row="2" column="0" > <class>QSpinBox</class> <property stdset="1"> <name>name</name> <cstring>hopInterval</cstring> </property> <property stdset="1"> <name>enabled</name> <bool>true</bool> </property> <property stdset="1"> <name>suffix</name> <string> ms</string> </property> <property stdset="1"> <name>maxValue</name> <number>2000</number> </property> <property stdset="1"> <name>minValue</name> <number>100</number> </property> <property stdset="1"> <name>lineStep</name> <number>100</number> </property> </widget> <widget row="2" column="1" > <class>QLabel</class> <property stdset="1"> <name>name</name> <cstring>TextLabel3_3</cstring> </property> <property stdset="1"> <name>enabled</name> <bool>true</bool> </property> <property stdset="1"> <name>text</name> <string>Hop Interval</string> </property> </widget> <widget row="1" column="1" > <class>QLabel</class> <property stdset="1"> <name>name</name> <cstring>TextLabel2_3</cstring> </property> <property stdset="1"> <name>enabled</name> <bool>true</bool> </property> <property stdset="1"> <name>text</name> <string>Device Type</string> </property> </widget> diff --git a/noncore/net/wellenreiter/gui/gui-x11.pro b/noncore/net/wellenreiter/gui/gui-x11.pro index 6b4a7bf..523bf15 100644 --- a/noncore/net/wellenreiter/gui/gui-x11.pro +++ b/noncore/net/wellenreiter/gui/gui-x11.pro @@ -1,11 +1,11 @@ DESTDIR = . TEMPLATE = app CONFIG = qt warn_on debug #CONFIG = qt warn_on release -HEADERS = wellenreiterbase.h wellenreiter.h scanlistitem.h scanlist.h logwindow.h hexwindow.h configwindow.h resource.h -SOURCES = main.cpp wellenreiterbase.cpp wellenreiter.cpp scanlistitem.cpp scanlist.cpp logwindow.cpp hexwindow.cpp configwindow.cpp resource.cpp +HEADERS = wellenreiterbase.h wellenreiter.h scanlistitem.h scanlist.h logwindow.h hexwindow.h configwindow.h resource.h wlan.h cardconfig.h +SOURCES = main.cpp wellenreiterbase.cpp wellenreiter.cpp scanlistitem.cpp scanlist.cpp logwindow.cpp hexwindow.cpp configwindow.cpp resource.cpp wlan.cpp cardconfig.cpp INCLUDEPATH += ../ DEPENDPATH += ../ -LIBS += -lwellenreiter +LIBS += -L. -lwellenreiter INTERFACES = configbase.ui TARGET = wellenreiter diff --git a/noncore/net/wellenreiter/gui/gui.pro b/noncore/net/wellenreiter/gui/gui.pro index b6e884d..ce1c387 100644 --- a/noncore/net/wellenreiter/gui/gui.pro +++ b/noncore/net/wellenreiter/gui/gui.pro @@ -1,11 +1,11 @@ DESTDIR = $(OPIEDIR)/bin TEMPLATE = app CONFIG = qt warn_on debug #CONFIG = qt warn_on release -HEADERS = wellenreiterbase.h wellenreiter.h scanlistitem.h scanlist.h logwindow.h hexwindow.h configwindow.h -SOURCES = main.cpp wellenreiterbase.cpp wellenreiter.cpp scanlistitem.cpp scanlist.cpp logwindow.cpp hexwindow.cpp configwindow.cpp +HEADERS = wellenreiterbase.h wellenreiter.h scanlistitem.h scanlist.h logwindow.h hexwindow.h configwindow.h wlan.h cardconfig.h +SOURCES = main.cpp wellenreiterbase.cpp wellenreiter.cpp scanlistitem.cpp scanlist.cpp logwindow.cpp hexwindow.cpp configwindow.cpp wlan.cpp cardconfig.cpp INCLUDEPATH += $(OPIEDIR)/include ../ DEPENDPATH += $(OPIEDIR)/include ../ -LIBS += -lqpe -lopie -lwellenreiter +LIBS += -lqpe -lopie -L. -lwellenreiter INTERFACES = configbase.ui TARGET = wellenreiter diff --git a/noncore/net/wellenreiter/gui/scanlist.cpp b/noncore/net/wellenreiter/gui/scanlist.cpp index f907afc..6d032aa 100644 --- a/noncore/net/wellenreiter/gui/scanlist.cpp +++ b/noncore/net/wellenreiter/gui/scanlist.cpp @@ -1,17 +1,117 @@ /********************************************************************** ** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved. ** ** This file is part of Opie Environment. ** ** This file may be distributed and/or modified under the terms of the ** 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 "scanlist.h" +#include "scanlistitem.h" + +#include <assert.h> + +MScanListView::MScanListView( QWidget* parent, const char* name ) + :QListView( parent, name ) +{ +}; + +MScanListView::~MScanListView() +{ +}; + +void MScanListView::addNewItem( QString type, QString essid, QString macaddr, bool wep, int channel, int signal ) +{ + // FIXME: scanlistitem needs a proper encapsulation and not such a damn dealing with text(...) + + qDebug( "MScanList::addNewItem( %s / %s / %s [%d]", + (const char*) type, + (const char*) essid, + (const char*) macaddr, + channel ); + + // search, if we already have seen this net + + QString s; + MScanListItem* network; + MScanListItem* item = static_cast<MScanListItem*> ( firstChild() ); + + while ( item && ( item->text( 0 ) != essid ) ) + { + qDebug( "itemtext: %s", (const char*) item->text( 0 ) ); + item = static_cast<MScanListItem*> ( item->itemBelow() ); + } + if ( item ) + { + // animate the item + + /* + + const QPixmap* pixmap = item->pixmap( 0 ); + const QPixmap* nextpixmap = ani2; + if ( pixmap == ani1 ) + nextpixmap = ani2; + else if ( pixmap == ani2 ) + nextpixmap = ani3; + else if ( pixmap == ani3 ) + nextpixmap = ani4; + else if ( pixmap == ani4 ) + nextpixmap = ani1; + item->setPixmap( 0, *nextpixmap ); */ + + //qDebug( "current pixmap %d, next %d", pixmap, nextpixmap ); + + // we have already seen this net, check all childs if MAC exists + + network = item; + + item = static_cast<MScanListItem*> ( item->firstChild() ); + assert( item ); // this shouldn't fail + + while ( item && ( item->text( 2 ) != macaddr ) ) + { + qDebug( "subitemtext: %s", (const char*) item->text( 2 ) ); + item = static_cast<MScanListItem*> ( item->itemBelow() ); + } + + if ( item ) + { + // we have already seen this item, it's a dupe + qDebug( "%s is a dupe - ignoring...", (const char*) macaddr ); + return; + } + } + else + { + s.sprintf( "(i) new network: '%s'", (const char*) essid ); + + network = new MScanListItem( this, "networks", essid, QString::null, 0, 0, 0 ); + } + + + // insert new station as child from network + + // no essid to reduce clutter, maybe later we have a nick or stationname to display!? + + qDebug( "inserting new station %s", (const char*) macaddr ); + + new MScanListItem( network, type, "", macaddr, wep, channel, signal ); + + if ( type == "managed" ) + { + s.sprintf( "(i) new AP in '%s' [%d]", (const char*) essid, channel ); + } + else + { + s.sprintf( "(i) new adhoc station in '%s' [%d]", (const char*) essid, channel ); + } + +} diff --git a/noncore/net/wellenreiter/gui/scanlist.h b/noncore/net/wellenreiter/gui/scanlist.h index 5cf3053..6fe6930 100644 --- a/noncore/net/wellenreiter/gui/scanlist.h +++ b/noncore/net/wellenreiter/gui/scanlist.h @@ -1,28 +1,37 @@ /********************************************************************** ** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved. ** ** This file is part of Opie Environment. ** ** This file may be distributed and/or modified under the terms of the ** 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. ** **********************************************************************/ #ifndef SCANLIST_H #define SCANLIST_H #include <qlistview.h> class QString; -class MScanList: public QListView +class MScanListView: public QListView { + Q_OBJECT + + public: + MScanListView( QWidget* parent = 0, const char* name = 0 ); + virtual ~MScanListView(); + + public slots: + void addNewItem( QString type, QString essid, QString macaddr, bool wep, int channel, int signal ); + }; #endif diff --git a/noncore/net/wellenreiter/gui/scanlistitem.cpp b/noncore/net/wellenreiter/gui/scanlistitem.cpp index 1e2a52e..f4b43a6 100644 --- a/noncore/net/wellenreiter/gui/scanlistitem.cpp +++ b/noncore/net/wellenreiter/gui/scanlistitem.cpp @@ -1,78 +1,79 @@ /********************************************************************** ** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved. ** ** This file is part of Opie Environment. ** ** This file may be distributed and/or modified under the terms of the ** 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 "scanlistitem.h" #include <assert.h> #include <qpixmap.h> #ifdef QWS #include <qpe/resource.h> #else #include "resource.h" #endif 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; MScanListItem::MScanListItem( QListView* parent, QString type, QString essid, QString macaddr, bool wep, int channel, int signal ) :QListViewItem( parent, essid, QString::null, macaddr, QString::null, QString::null ) { qDebug( "creating scanlist item" ); decorateItem( type, essid, macaddr, wep, channel, signal ); } MScanListItem::MScanListItem( QListViewItem* parent, QString type, QString essid, QString macaddr, bool wep, int channel, int signal ) :QListViewItem( parent, essid, QString::null, macaddr, QString::null, QString::null ) { qDebug( "creating scanlist item" ); decorateItem( type, essid, macaddr, wep, channel, signal ); } void MScanListItem::decorateItem( QString type, QString essid, QString macaddr, bool wep, int channel, int signal ) { qDebug( "decorating scanlist item %s / %s / %s [%d]", (const char*) type, (const char*) essid, (const char*) macaddr, channel ); // set icon for managed or adhoc mode QString name; name.sprintf( "wellenreiter/%s", (const char*) type ); setPixmap( col_type, Resource::loadPixmap( name ) ); // set icon for wep (wireless encryption protocol) if ( wep ) setPixmap( col_wep, Resource::loadPixmap( "wellenreiter/cracked" ) ); // rename the pixmap! // set channel and signal text if ( signal != -1 ) setText( col_sig, QString::number( signal ) ); if ( channel != -1 ) setText( col_channel, QString::number( channel ) ); listView()->triggerUpdate(); this->type = type; } + diff --git a/noncore/net/wellenreiter/gui/wellenreiter.cpp b/noncore/net/wellenreiter/gui/wellenreiter.cpp index 0fd929f..2d9bbee 100644 --- a/noncore/net/wellenreiter/gui/wellenreiter.cpp +++ b/noncore/net/wellenreiter/gui/wellenreiter.cpp @@ -1,335 +1,268 @@ /********************************************************************** ** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved. ** ** This file is part of Opie Environment. ** ** This file may be distributed and/or modified under the terms of the ** 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. ** ***********************************************************************/ // Qt #include <qpushbutton.h> #include <qmessagebox.h> #include <qcombobox.h> #include <qspinbox.h> +#include <qsocketnotifier.h> // Qtopia #ifdef QWS #include <qpe/global.h> #endif +// Opie + +#ifdef QWS +#include <opie/odevice.h> +using namespace Opie; +#endif + // Standard #include <assert.h> #include <errno.h> #include <unistd.h> #include <string.h> #include <sys/types.h> +#include <sys/socket.h> #include <stdlib.h> +#include <fcntl.h> // Local #include "wellenreiter.h" -#include "scanlistitem.h" +#include "scanlist.h" #include "logwindow.h" #include "hexwindow.h" #include "configwindow.h" #include <libwellenreiter/source/wl_sock.hh> #include <libwellenreiter/source/wl_proto.hh> #include <daemon/source/config.hh> Wellenreiter::Wellenreiter( QWidget* parent, const char* name, WFlags fl ) : WellenreiterBase( parent, name, fl ), daemonRunning( false ) { logwindow->log( "(i) Wellenreiter has been started." ); - connect( button, SIGNAL( clicked() ), this, SLOT( buttonClicked() ) ); - netview->setColumnWidthMode( 1, QListView::Manual ); + // + // detect operating system + // + + #ifdef QWS + QString sys; + sys.sprintf( "(i) Running on '%s'.", (const char*) ODevice::inst()->systemString() ); + _system = ODevice::inst()->system(); + logwindow->log( sys ); + #endif // - // setup socket for daemon communication and start poller + // setup socket for daemon communication, register socket notifier // daemon_fd = wl_setupsock( GUIADDR, GUIPORT ); if ( daemon_fd == -1 ) { logwindow->log( "(E) Couldn't get file descriptor for commsocket." ); - qDebug( "D'oh! Could not get file descriptor for daemon-->gui communication socket." ); } else - startTimer( 700 ); + { + int flags; + flags = fcntl( daemon_fd, F_GETFL, 0 ); + fcntl( daemon_fd, F_SETFL, flags | O_NONBLOCK ); + QSocketNotifier *sn = new QSocketNotifier( daemon_fd, QSocketNotifier::Read, parent ); + connect( sn, SIGNAL( activated( int ) ), this, SLOT( dataReceived() ) ); + } + + // setup GUI + + connect( button, SIGNAL( clicked() ), this, SLOT( buttonClicked() ) ); + button->setEnabled( false ); + netview->setColumnWidthMode( 1, QListView::Manual ); } Wellenreiter::~Wellenreiter() { // no need to delete child widgets, Qt does it all for us } void Wellenreiter::handleMessage() { // FIXME: receive message and handle it qDebug( "received message from daemon." ); - char buffer[128]; + char buffer[10000]; + memset( &buffer, 0, sizeof( buffer ) ); + + // int result = #wl_recv( &daemon_fd, (char*) &buffer, sizeof(buffer) ); + + struct sockaddr from; + socklen_t len; + + int result = recvfrom( daemon_fd, &buffer, 8192, MSG_WAITALL, &from, &len ); - int result = wl_recv( &daemon_fd, (char*) &buffer, sizeof(buffer) ); - qDebug( "received %d from recvcomm", result ); + qDebug( "received %d from recv [%d bytes]", result, len ); + + if ( result == -1 ) + { + qDebug( "Warning: %s", strerror( errno ) ); + return; + } + + int command = buffer[1] - 48; /* typedef struct { int net_type; 1 = Accesspoint ; 2 = Ad-Hoc int ssid_len; Length of SSID int channel; Channel int wep; 1 = WEP enabled ; 0 = disabled char mac[64]; MAC address of Accesspoint char bssid[128]; BSSID of Accesspoint } wl_network_t; */ - // qDebug( "Sniffer sent: '%s'", (const char*) buffer ); + qDebug( "Recv result: %d", ( result ) ); + qDebug( "Sniffer sent: '%s'", (const char*) buffer ); hexwindow->log( (const char*) &buffer ); - if ( result == NETFOUND ) /* new network found */ + if ( command == NETFOUND ) /* new network found */ { qDebug( "Sniffer said: new network found." ); wl_network_t n; get_network_found( &n, (char*) &buffer ); qDebug( "Sniffer said: net_type is %d.", n.net_type ); qDebug( "Sniffer said: MAC is %s", (const char*) &n.mac ); //n.bssid[n.ssid_len] = "\0"; QString type; if ( n.net_type == 1 ) type = "managed"; else type = "adhoc"; - addNewItem( type, n.bssid, QString( (const char*) &n.mac ), n.wep, n.channel, 0 ); + netview->addNewItem( type, n.bssid, QString( (const char*) &n.mac ), n.wep, n.channel, 0 ); } else { qDebug( "unknown sniffer command." ); } } - -bool Wellenreiter::hasMessage() +void Wellenreiter::dataReceived() { - - // FIXME: do this in libwellenreiter, not here!!! - - fd_set rfds; - FD_ZERO( &rfds ); - FD_SET( daemon_fd, &rfds ); - struct timeval tv; - tv.tv_sec = 0; - tv.tv_usec = 10; - int result = select( daemon_fd+1, &rfds, NULL, NULL, &tv ); - - if ( result == 0 ) - { - return false; - } - else if ( result == -1 ) - { - qDebug( "selected returned: %s", strerror( errno ) ); - return false; - } - else - return true; //FD_ISSET( daemon_fd, &rfds ); gibbet 'eh nur einen Deskriptor -} - -void Wellenreiter::timerEvent( QTimerEvent* e ) -{ - //qDebug( "checking for message..." ); - if ( hasMessage() ) - { - //qDebug( "got message from daemon" ); + logwindow->log( "(d) Received data from daemon" ); handleMessage(); } - else - { - //qDebug( "no message..." ); - } -} - -void Wellenreiter::addNewItem( QString type, QString essid, QString macaddr, bool wep, int channel, int signal ) -{ - // FIXME: this code belongs in customized QListView, not into this class - // FIXME: scanlistitem needs a proper encapsulation and not such a damn dealing with text(...) - - qDebug( "Wellenreiter::addNewItem( %s / %s / %s [%d]", - (const char*) type, - (const char*) essid, - (const char*) macaddr, - channel ); - - // search, if we already have seen this net - - QString s; - MScanListItem* network; - MScanListItem* item = static_cast<MScanListItem*> ( netview->firstChild() ); - - while ( item && ( item->text( 0 ) != essid ) ) - { - qDebug( "itemtext: %s", (const char*) item->text( 0 ) ); - item = static_cast<MScanListItem*> ( item->itemBelow() ); - } - if ( item ) - { - // we have already seen this net, check all childs if MAC exists - network = item; - - item = static_cast<MScanListItem*> ( item->firstChild() ); - assert( item ); // this shouldn't fail - - while ( item && ( item->text( 2 ) != macaddr ) ) - { - qDebug( "subitemtext: %s", (const char*) item->text( 2 ) ); - item = static_cast<MScanListItem*> ( item->itemBelow() ); - } - - if ( item ) - { - // we have already seen this item, it's a dupe - qDebug( "%s is a dupe - ignoring...", (const char*) macaddr ); - return; - } - } - else - { - s.sprintf( "(i) new network: '%s'", (const char*) essid ); - logwindow->log( s ); - - network = new MScanListItem( netview, "networks", essid, QString::null, 0, 0, 0 ); - } - - - // insert new station as child from network - - // no essid to reduce clutter, maybe later we have a nick or stationname to display!? - - qDebug( "inserting new station %s", (const char*) macaddr ); - - new MScanListItem( network, type, "", macaddr, wep, channel, signal ); - - if ( type == "managed" ) - { - s.sprintf( "(i) new AP in '%s' [%d]", (const char*) essid, channel ); - } - else +void Wellenreiter::buttonClicked() { - s.sprintf( "(i) new adhoc station in '%s' [%d]", (const char*) essid, channel ); - } - - logwindow->log( s ); + /* + // add some test stations, so that we can see if the GUI part works + addNewItem( "managed", "Vanille", "04:00:20:EF:A6:43", true, 6, 80 ); + addNewItem( "managed", "Vanille", "04:00:20:EF:A6:23", true, 11, 10 ); + addNewItem( "adhoc", "ELAN", "40:03:43:E7:16:22", false, 3, 10 ); + addNewItem( "adhoc", "ELAN", "40:03:53:E7:56:62", false, 3, 15 ); + addNewItem( "adhoc", "ELAN", "40:03:63:E7:56:E2", false, 3, 20 ); + */ -} -void Wellenreiter::buttonClicked() -{ if ( daemonRunning ) { + daemonRunning = false; + logwindow->log( "(i) Daemon has been stopped." ); button->setText( "Start Scanning" ); // Stop daemon - ugly for now... later better system( "killall orinoco_hopper" ); system( "killall wellenreiterd" ); // FIXME: reset the card trying to get into a usable state again // for now, just message the user QMessageBox::information( this, "Wellenreiter/Opie", "You should reset your\ndevice before using it again." ); } else { logwindow->log( "(i) Daemon has been started." ); daemonRunning = true; button->setText( "Stop Scanning" ); // get configuration from config window const QString& interface = configwindow->interfaceName->currentText(); const QString& cardtype = configwindow->deviceType->currentText(); const QString& interval = configwindow->hopInterval->cleanText(); if ( ( interface == "<select>" ) || ( cardtype == "<select>" ) ) { QMessageBox::information( this, "Wellenreiter/Opie", "You must configure your\ndevice before scanning." ); return; } // set interface into monitor mode /* Global::Execute definitely does not work very well with non-gui stuff! :( */ QString cmdline; cmdline.sprintf( "iwpriv %s monitor 2", (const char*) interface ); system( cmdline ); cmdline.sprintf( "iwpriv %s monitor 2 1", (const char*) interface ); system( cmdline ); // start channel hopper cmdline = "orinoco_hopper "; cmdline += interface; cmdline += " -i "; cmdline += interval; cmdline += " &"; qDebug( "execute: %s", (const char*) cmdline ); system( cmdline ); qDebug( "done" ); // start daemon cmdline = "wellenreiterd "; cmdline += interface; cmdline += " 3"; cmdline += " &"; qDebug( "execute: %s", (const char*) cmdline ); system( cmdline ); qDebug( "done" ); - /* - - // add some test stations, so that we can see if the GUI part works - - addNewItem( "managed", "Vanille", "04:00:20:EF:A6:43", true, 6, 80 ); - addNewItem( "managed", "Vanille", "04:00:20:EF:A6:23", true, 11, 10 ); - addNewItem( "adhoc", "ELAN", "40:03:43:E7:16:22", false, 3, 10 ); - addNewItem( "adhoc", "ELAN", "40:03:53:E7:56:62", false, 3, 15 ); - addNewItem( "adhoc", "ELAN", "40:03:63:E7:56:E2", false, 3, 20 ); - - QString command ("98"); - - //sendcomm( DAEMONADDR, DAEMONPORT, (const char*) command ); - - */ } } diff --git a/noncore/net/wellenreiter/gui/wellenreiter.h b/noncore/net/wellenreiter/gui/wellenreiter.h index 052a242..2296892 100644 --- a/noncore/net/wellenreiter/gui/wellenreiter.h +++ b/noncore/net/wellenreiter/gui/wellenreiter.h @@ -1,50 +1,56 @@ /********************************************************************** ** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved. ** ** This file is part of Opie Environment. ** ** This file may be distributed and/or modified under the terms of the ** 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. ** **********************************************************************/ #ifndef WELLENREITER_H #define WELLENREITER_H #include "wellenreiterbase.h" +#ifdef QWS +#include <opie/odevice.h> +using namespace Opie; +#endif + class QTimerEvent; +class QPixmap; class Wellenreiter : public WellenreiterBase { Q_OBJECT public: Wellenreiter( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 ); ~Wellenreiter(); protected: - virtual void timerEvent( QTimerEvent* ); bool daemonRunning; public slots: void buttonClicked(); - void addNewItem( QString type, QString essid, QString ap, bool wep, int channel, int signal ); + void dataReceived(); private: int daemon_fd; // socket filedescriptor for udp communication socket - - bool hasMessage(); + #ifdef QWS + OSystem _system; // Opie Operating System identifier + #endif void handleMessage(); //void readConfig(); //void writeConfig(); }; #endif diff --git a/noncore/net/wellenreiter/gui/wellenreiterbase.cpp b/noncore/net/wellenreiter/gui/wellenreiterbase.cpp index 5017b08..d6b9891 100644 --- a/noncore/net/wellenreiter/gui/wellenreiterbase.cpp +++ b/noncore/net/wellenreiter/gui/wellenreiterbase.cpp @@ -1,165 +1,171 @@ /********************************************************************** ** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved. ** ** This file is part of Opie Environment. ** ** This file may be distributed and/or modified under the terms of the ** 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 "wellenreiterbase.h" #include <qheader.h> #include <qlabel.h> #include <qlistview.h> #include <qmultilineedit.h> #include <qpushbutton.h> #include <qlayout.h> #include <qvariant.h> #include <qtooltip.h> #include <qwhatsthis.h> #include <qimage.h> #include <qpixmap.h> #include "logwindow.h" #include "hexwindow.h" #include "configwindow.h" +#include "scanlist.h" #ifdef QWS #include <qpe/resource.h> #include <opie/otabwidget.h> #else #include "resource.h" #include <qtabwidget.h> #endif /* * Constructs a WellenreiterBase which is a child of 'parent', with the * name 'name' and widget flags set to 'f' */ WellenreiterBase::WellenreiterBase( QWidget* parent, const char* name, WFlags fl ) : QWidget( parent, name, fl ) { + ani1 = new QPixmap( Resource::loadPixmap( "wellenreiter/networks_rot0" ) ); + ani2 = new QPixmap( Resource::loadPixmap( "wellenreiter/networks_rot90" ) ); + ani3 = new QPixmap( Resource::loadPixmap( "wellenreiter/networks_rot180" ) ); + ani4 = new QPixmap( Resource::loadPixmap( "wellenreiter/networks_rot270" ) ); + if ( !name ) setName( "WellenreiterBase" ); resize( 191, 294 ); setCaption( tr( "Wellenreiter" ) ); WellenreiterBaseLayout = new QVBoxLayout( this ); WellenreiterBaseLayout->setSpacing( 2 ); WellenreiterBaseLayout->setMargin( 0 ); #ifdef QWS TabWidget = new OTabWidget( this, "TabWidget", OTabWidget::Global ); #else TabWidget = new QTabWidget( this, "TabWidget" ); #endif ap = new QWidget( TabWidget, "ap" ); apLayout = new QVBoxLayout( ap ); apLayout->setSpacing( 2 ); apLayout->setMargin( 2 ); //--------- NETVIEW TAB -------------- - netview = new QListView( ap, "netview" ); + netview = new MScanListView( ap ); netview->addColumn( tr( "SSID" ) ); netview->setColumnAlignment( 0, AlignLeft || AlignVCenter ); netview->addColumn( tr( "Sig" ) ); netview->setColumnAlignment( 1, AlignCenter ); netview->addColumn( tr( "AP" ) ); netview->setColumnAlignment( 2, AlignCenter ); netview->addColumn( tr( "Chn" ) ); netview->setColumnAlignment( 3, AlignCenter ); netview->addColumn( tr( "W" ) ); netview->setColumnAlignment( 4, AlignCenter ); netview->addColumn( tr( "T" ) ); netview->setColumnAlignment( 5, AlignCenter ); netview->setFrameShape( QListView::StyledPanel ); netview->setFrameShadow( QListView::Sunken ); netview->setRootIsDecorated( TRUE ); apLayout->addWidget( netview ); //--------- LOG TAB -------------- logwindow = new MLogWindow( TabWidget, "Log" ); //--------- HEX TAB -------------- hexwindow = new MHexWindow( TabWidget, "Hex" ); //--------- CONFIG TAB -------------- configwindow = new WellenreiterConfigWindow( TabWidget, "Config" ); //--------- ABOUT TAB -------------- about = new QWidget( TabWidget, "about" ); aboutLayout = new QGridLayout( about ); aboutLayout->setSpacing( 6 ); aboutLayout->setMargin( 11 ); PixmapLabel1_3_2 = new QLabel( about, "PixmapLabel1_3_2" ); PixmapLabel1_3_2->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, PixmapLabel1_3_2->sizePolicy().hasHeightForWidth() ) ); PixmapLabel1_3_2->setFrameShape( QLabel::Panel ); PixmapLabel1_3_2->setFrameShadow( QLabel::Sunken ); PixmapLabel1_3_2->setLineWidth( 2 ); PixmapLabel1_3_2->setMargin( 0 ); PixmapLabel1_3_2->setMidLineWidth( 0 ); PixmapLabel1_3_2->setPixmap( Resource::loadPixmap( "wellenreiter/logo" ) ); PixmapLabel1_3_2->setScaledContents( TRUE ); PixmapLabel1_3_2->setAlignment( int( QLabel::AlignCenter ) ); aboutLayout->addWidget( PixmapLabel1_3_2, 0, 0 ); TextLabel1_4_2 = new QLabel( about, "TextLabel1_4_2" ); QFont TextLabel1_4_2_font( TextLabel1_4_2->font() ); TextLabel1_4_2_font.setFamily( "adobe-helvetica" ); TextLabel1_4_2_font.setPointSize( 10 ); TextLabel1_4_2->setFont( TextLabel1_4_2_font ); TextLabel1_4_2->setText( tr( "<p align=center>\n" "<hr>\n" "Max Moser<br>\n" "Martin J. Muench<br>\n" "Michael Lauer<br><hr>\n" "<b>www.remote-exploit.org</b>\n" "</p>" ) ); TextLabel1_4_2->setAlignment( int( QLabel::AlignCenter ) ); aboutLayout->addWidget( TextLabel1_4_2, 1, 0 ); button = new QPushButton( this, "button" ); button->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)1, (QSizePolicy::SizeType)0, button->sizePolicy().hasHeightForWidth() ) ); button->setText( tr( "Start Scanning" ) ); #ifdef QWS TabWidget->addTab( ap, "wellenreiter/networks", tr( "Networks" ) ); TabWidget->addTab( logwindow, "wellenreiter/log", tr( "Log" ) ); TabWidget->addTab( hexwindow, "wellenreiter/hex", tr( "Hex" ) ); TabWidget->addTab( configwindow, "wellenreiter/config", tr( "Config" ) ); TabWidget->addTab( about, "wellenreiter/about", tr( "About" ) ); #else TabWidget->addTab( ap, /* "wellenreiter/networks", */ tr( "Networks" ) ); TabWidget->addTab( logwindow, /* "wellenreiter/log", */ tr( "Log" ) ); TabWidget->addTab( hexwindow, /* "wellenreiter/hex", */ tr( "Hex" ) ); TabWidget->addTab( configwindow, /* "wellenreiter/config", */ tr( "Config" ) ); TabWidget->addTab( about, /* "wellenreiter/about", */ tr( "About" ) ); #endif WellenreiterBaseLayout->addWidget( TabWidget ); WellenreiterBaseLayout->addWidget( button ); #ifdef QWS TabWidget->setCurrentTab( tr( "Networks" ) ); #endif } /* * Destroys the object and frees any allocated resources diff --git a/noncore/net/wellenreiter/gui/wellenreiterbase.h b/noncore/net/wellenreiter/gui/wellenreiterbase.h index fce25d1..edb2930 100644 --- a/noncore/net/wellenreiter/gui/wellenreiterbase.h +++ b/noncore/net/wellenreiter/gui/wellenreiterbase.h @@ -1,68 +1,75 @@ /********************************************************************** ** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved. ** ** This file is part of Opie Environment. ** ** This file may be distributed and/or modified under the terms of the ** 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. ** **********************************************************************/ #ifndef WELLENREITERBASE_H #define WELLENREITERBASE_H #include <qvariant.h> #include <qwidget.h> class QVBoxLayout; class QHBoxLayout; class QGridLayout; class QLabel; -class QListView; -class QListViewItem; +class MScanListView; +class MScanListItem; class QPushButton; class MLogWindow; class MHexWindow; class WellenreiterConfigWindow; #ifdef QWS class OTabWidget; #else class QTabWidget; #endif class WellenreiterBase : public QWidget { Q_OBJECT public: WellenreiterBase( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 ); ~WellenreiterBase(); #ifdef QWS OTabWidget* TabWidget; #else QTabWidget* TabWidget; #endif QWidget* ap; - QListView* netview; + MScanListView* netview; MLogWindow* logwindow; MHexWindow* hexwindow; WellenreiterConfigWindow* configwindow; QWidget* about; QLabel* PixmapLabel1_3_2; QLabel* TextLabel1_4_2; QPushButton* button; protected: QVBoxLayout* WellenreiterBaseLayout; QVBoxLayout* apLayout; QGridLayout* aboutLayout; bool event( QEvent* ); + + QPixmap* ani1; + QPixmap* ani2; + QPixmap* ani3; + QPixmap* ani4; + + }; #endif // WELLENREITERBASE_H diff --git a/noncore/net/wellenreiter/gui/wlan.cpp b/noncore/net/wellenreiter/gui/wlan.cpp new file mode 100644 index 0000000..b046cc8 --- a/dev/null +++ b/noncore/net/wellenreiter/gui/wlan.cpp @@ -0,0 +1,57 @@ +/********************************************************************** +** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved. +** +** This file is part of Opie Environment. +** +** This file may be distributed and/or modified under the terms of the +** 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 "wlan.h" +#include "cardconfig.h" + +// Qt +#include <qstring.h> + +// Qtopia +#ifdef QWS +#include <opie/odevice.h> +using namespace Opie; +#endif + +WLAN::WLAN( const QString& interface ) +{ + _configuration = new CardConfig( interface ); +} + +WLAN::WLAN( const CardConfig* configuration ) +{ + _configuration = configuration; + +} + +WLAN::~WLAN() +{ + delete _configuration; + +} + +void WLAN::setMonitorMode( bool enabled ) +{ + + /* + + if ( _configuration->system() == System_OpenZaurus && _configuration->type() == CardConfig::Prism ) + { + } + + */ + +} + diff --git a/noncore/net/wellenreiter/gui/wlan.h b/noncore/net/wellenreiter/gui/wlan.h new file mode 100644 index 0000000..139e218 --- a/dev/null +++ b/noncore/net/wellenreiter/gui/wlan.h @@ -0,0 +1,38 @@ +/********************************************************************** +** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved. +** +** This file is part of Opie Environment. +** +** This file may be distributed and/or modified under the terms of the +** 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. +** +**********************************************************************/ + +#ifndef WLAN_H +#define WLAN_H + +class QString; +class CardConfig; + +class WLAN +{ + public: + + WLAN( const QString& interface ); + WLAN( const CardConfig* ); + virtual ~WLAN(); + void setMonitorMode( bool enabled ); + + private: + + const CardConfig* _configuration; + +}; + +#endif + |