summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--noncore/net/wellenreiter/gui/gui.pro18
-rw-r--r--noncore/net/wellenreiter/gui/logwindow.cpp4
-rw-r--r--noncore/net/wellenreiter/gui/logwindow.h5
-rw-r--r--noncore/net/wellenreiter/gui/mainwindow.cpp8
-rw-r--r--noncore/net/wellenreiter/gui/scanlist.cpp98
-rw-r--r--noncore/net/wellenreiter/gui/scanlist.h2
-rw-r--r--noncore/net/wellenreiter/gui/wellenreiter.cpp58
-rw-r--r--noncore/net/wellenreiter/gui/wellenreiter.h7
8 files changed, 158 insertions, 42 deletions
diff --git a/noncore/net/wellenreiter/gui/gui.pro b/noncore/net/wellenreiter/gui/gui.pro
index 927f4b7..62e1d9a 100644
--- a/noncore/net/wellenreiter/gui/gui.pro
+++ b/noncore/net/wellenreiter/gui/gui.pro
@@ -45,3 +45,21 @@ contains( platform, x11 ) {
DESTDIR = $(OPIEDIR)/output/bin
}
+TRANSLATIONS = ../../../../i18n/de/wellenreiter.ts \
+ ../../../../i18n/nl/wellenreiter.ts \
+ ../../../../i18n/da/wellenreiter.ts \
+ ../../../../i18n/xx/wellenreiter.ts \
+ ../../../../i18n/en/wellenreiter.ts \
+ ../../../../i18n/es/wellenreiter.ts \
+ ../../../../i18n/fr/wellenreiter.ts \
+ ../../../../i18n/hu/wellenreiter.ts \
+ ../../../../i18n/ja/wellenreiter.ts \
+ ../../../../i18n/ko/wellenreiter.ts \
+ ../../../../i18n/no/wellenreiter.ts \
+ ../../../../i18n/pl/wellenreiter.ts \
+ ../../../../i18n/pt/wellenreiter.ts \
+ ../../../../i18n/pt_BR/wellenreiter.ts \
+ ../../../../i18n/sl/wellenreiter.ts \
+ ../../../../i18n/zh_CN/wellenreiter.ts \
+ ../../../../i18n/zh_TW/wellenreiter.ts
+
diff --git a/noncore/net/wellenreiter/gui/logwindow.cpp b/noncore/net/wellenreiter/gui/logwindow.cpp
index 12f74fd..6078fa2 100644
--- a/noncore/net/wellenreiter/gui/logwindow.cpp
+++ b/noncore/net/wellenreiter/gui/logwindow.cpp
@@ -17,11 +17,15 @@
#include <qmultilineedit.h>
#include <qdatetime.h>
+MLogWindow* MLogWindow::_instance;
+
MLogWindow::MLogWindow( QWidget * parent, const char * name, WFlags f )
:QVBox( parent, name, f )
{
ledit = new QMultiLineEdit( this );
ledit->setReadOnly( true );
+
+ MLogWindow::_instance = this;
}
diff --git a/noncore/net/wellenreiter/gui/logwindow.h b/noncore/net/wellenreiter/gui/logwindow.h
index 6e0fe50..da8c274 100644
--- a/noncore/net/wellenreiter/gui/logwindow.h
+++ b/noncore/net/wellenreiter/gui/logwindow.h
@@ -31,9 +31,14 @@ class MLogWindow: public QVBox
const QString getLog() const;
void clear();
+ static MLogWindow* logwindow() { return MLogWindow::_instance; };
+
protected:
QMultiLineEdit* ledit;
+ private:
+ static MLogWindow* _instance;
+
};
#endif
diff --git a/noncore/net/wellenreiter/gui/mainwindow.cpp b/noncore/net/wellenreiter/gui/mainwindow.cpp
index c4a8fbc..773d825 100644
--- a/noncore/net/wellenreiter/gui/mainwindow.cpp
+++ b/noncore/net/wellenreiter/gui/mainwindow.cpp
@@ -132,11 +132,11 @@ WellenreiterMainWindow::WellenreiterMainWindow( QWidget * parent, const char * n
demo->insertItem( tr( "&Add something" ), this, SLOT( demoAddStations() ) );
id = mb->insertItem( tr( "&File" ), file );
- id = mb->insertItem( tr( "&View" ), view );
- mb->setItemEnabled( id, false );
+ //id = mb->insertItem( tr( "&View" ), view );
+ //mb->setItemEnabled( id, false );
id = mb->insertItem( tr( "&Sniffer" ), sniffer );
- id = mb->insertItem( tr( "&Demo" ), demo );
- mb->setItemEnabled( id, true );
+ //id = mb->insertItem( tr( "&Demo" ), demo );
+ //mb->setItemEnabled( id, true );
#ifdef QWS
mb->insertItem( startButton );
diff --git a/noncore/net/wellenreiter/gui/scanlist.cpp b/noncore/net/wellenreiter/gui/scanlist.cpp
index 3a6aa15..d5665b4 100644
--- a/noncore/net/wellenreiter/gui/scanlist.cpp
+++ b/noncore/net/wellenreiter/gui/scanlist.cpp
@@ -15,6 +15,7 @@
#include "scanlist.h"
#include "configwindow.h"
+#include "logwindow.h"
#include <assert.h>
#include "manufacturers.h"
@@ -40,9 +41,10 @@ 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;
+const int col_ip = 6;
+const int col_manuf = 7;
+const int col_firstseen = 8;
+const int col_lastseen = 9;
MScanListView::MScanListView( QWidget* parent, const char* name )
:OListView( parent, name ), _manufacturerdb( 0 )
@@ -52,23 +54,25 @@ MScanListView::MScanListView( QWidget* parent, const char* name )
setFrameShadow( QListView::Sunken );
addColumn( tr( "Net/Station" ) );
- setColumnAlignment( 0, AlignLeft || AlignVCenter );
+ setColumnAlignment( col_essid, AlignLeft || AlignVCenter );
addColumn( tr( "#" ) );
- setColumnAlignment( 1, AlignCenter );
+ setColumnAlignment( col_sig, AlignCenter );
addColumn( tr( "MAC" ) );
- setColumnAlignment( 2, AlignCenter );
+ setColumnAlignment( col_ap, AlignCenter );
addColumn( tr( "Chn" ) );
- setColumnAlignment( 3, AlignCenter );
+ setColumnAlignment( col_channel, AlignCenter );
addColumn( tr( "W" ) );
- setColumnAlignment( 4, AlignCenter );
+ setColumnAlignment( col_wep, AlignCenter );
addColumn( tr( "T" ) );
- setColumnAlignment( 5, AlignCenter );
+ setColumnAlignment( col_traffic, AlignCenter );
+ addColumn( tr( "IP" ) );
+ setColumnAlignment( col_ip, AlignCenter );
addColumn( tr( "Manufacturer" ) );
- setColumnAlignment( 6, AlignCenter );
+ setColumnAlignment( col_manuf, AlignCenter );
addColumn( tr( "First Seen" ) );
- setColumnAlignment( 7, AlignCenter );
+ setColumnAlignment( col_firstseen, AlignCenter );
addColumn( tr( "Last Seen" ) );
- setColumnAlignment( 8, AlignCenter );
+ setColumnAlignment( col_lastseen, AlignCenter );
setRootIsDecorated( true );
setAllColumnsShowFocus( true );
};
@@ -103,11 +107,10 @@ void MScanListView::addNewItem( QString type, QString essid, QString macaddr, bo
{
// 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 );
+ #ifdef DEBUG
+ qDebug( "MScanList::addNewItem( %s / %s / %s [%d]", (const char*) type,
+ (const char*) essid, (const char*) macaddr, channel );
+ #endif
// search, if we already have seen this net
@@ -117,7 +120,9 @@ void MScanListView::addNewItem( QString type, QString essid, QString macaddr, bo
while ( item && ( item->text( col_essid ) != essid ) )
{
+ #ifdef DEBUG
qDebug( "itemtext: %s", (const char*) item->text( col_essid ) );
+ #endif
item = static_cast<MScanListItem*> ( item->nextSibling() );
}
if ( item )
@@ -131,7 +136,9 @@ void MScanListView::addNewItem( QString type, QString essid, QString macaddr, bo
while ( item && ( item->text( col_ap ) != macaddr ) )
{
+ #ifdef DEBUG
qDebug( "subitemtext: %s", (const char*) item->text( col_ap ) );
+ #endif
item = static_cast<MScanListItem*> ( item->nextSibling() );
}
@@ -147,8 +154,8 @@ void MScanListView::addNewItem( QString type, QString essid, QString macaddr, bo
}
else
{
- s.sprintf( "(i) new network: '%s'", (const char*) essid );
- //TODO send s to logwindow
+ s.sprintf( "(i) New network: ESSID '%s'", (const char*) essid );
+ MLogWindow::logwindow()->log( s );
network = new MScanListItem( this, "network", essid, QString::null, 0, 0, 0 );
}
@@ -156,7 +163,9 @@ void MScanListView::addNewItem( QString type, QString essid, QString macaddr, bo
// insert new station as child from network
// no essid to reduce clutter, maybe later we have a nick or stationname to display!?
+ #ifdef DEBUG
qDebug( "inserting new station %s", (const char*) macaddr );
+ #endif
MScanListItem* station = new MScanListItem( network, type, "", macaddr, wep, channel, signal );
if ( _manufacturerdb )
@@ -164,13 +173,13 @@ void MScanListView::addNewItem( QString type, QString essid, QString macaddr, bo
if ( type == "managed" )
{
- s.sprintf( "(i) new AP in '%s' [%d]", (const char*) essid, channel );
+ s.sprintf( "(i) New Access Point in '%s' [%d]", (const char*) essid, channel );
}
else
{
- s.sprintf( "(i) new adhoc station in '%s' [%d]", (const char*) essid, channel );
+ s.sprintf( "(i) New AdHoc station in '%s' [%d]", (const char*) essid, channel );
}
- //TODO send s to logwindow
+ MLogWindow::logwindow()->log( s );
}
@@ -181,7 +190,9 @@ void MScanListView::addIfNotExisting( MScanListItem* network, QString addr, cons
while ( subitem && ( subitem->text( col_ap ) != addr ) )
{
+ #ifdef DEBUG
qDebug( "subitemtext: %s", (const char*) subitem->text( col_ap ) );
+ #endif
subitem = static_cast<MScanListItem*> ( subitem->nextSibling() );
}
@@ -203,13 +214,13 @@ void MScanListView::addIfNotExisting( MScanListItem* network, QString addr, cons
QString s;
if ( type == "station" )
{
- s.sprintf( "(i) new station in '%s' [??]", (const char*) network->text( col_essid ) );
+ s.sprintf( "(i) New Station in '%s' [xx]", (const char*) network->text( col_essid ) );
}
else
{
- s.sprintf( "(i) new wireless station in '%s' [??]", (const char*) network->text( col_essid ) );
+ s.sprintf( "(i) New Wireless Station in '%s' [xx]", (const char*) network->text( col_essid ) );
}
- //TODO send s to logwindow
+ MLogWindow::logwindow()->log( s );
}
@@ -233,6 +244,7 @@ void MScanListView::WDStraffic( QString from, QString to, QString viaFrom, QStri
else
{
qDebug( "D'Oh! Stations without AP... ignoring for now... will handle this in 1.1 version :-D" );
+ MLogWindow::logwindow()->log( "WARNING: Unhandled WSD traffic!" );
}
}
@@ -254,9 +266,12 @@ void MScanListView::toDStraffic( QString from, QString to, QString via )
else
{
qDebug( "D'Oh! Station without AP... ignoring for now... will handle this in 1.1 :-D" );
+ MLogWindow::logwindow()->log( "WARNING: Unhandled toDS traffic!" );
+
}
}
+
void MScanListView::fromDStraffic( QString from, QString to, QString via )
{
QString s;
@@ -274,14 +289,37 @@ void MScanListView::fromDStraffic( QString from, QString to, QString via )
else
{
qDebug( "D'Oh! Station without AP... ignoring for now... will handle this in 1.1 :-D" );
+ MLogWindow::logwindow()->log( "WARNING: Unhandled fromDS traffic!" );
}
}
+
void MScanListView::IBSStraffic( QString from, QString to, QString via )
{
qWarning( "D'oh! Not yet implemented..." );
+ MLogWindow::logwindow()->log( "WARNING: Unhandled IBSS traffic!" );
}
+
+void MScanListView::identify( const QString& macaddr, const QString& ip )
+{
+ qDebug( "identify %s = %s", (const char*) macaddr, (const char*) ip );
+
+ QListViewItemIterator it( this );
+ for ( ; it.current(); ++it )
+ {
+ if ( it.current()->text( col_ap ) == macaddr )
+ {
+ it.current()->setText( col_ip, ip );
+ return;
+ }
+ }
+ qDebug( "D'oh! Received identification, but item not yet in list... ==> Handle this!" );
+ MLogWindow::logwindow()->log( QString().sprintf( "WARNING: Unhandled identification %s = %s!",
+ (const char*) macaddr, (const char*) ip ) );
+}
+
+
//============================================================
// MScanListItem
//============================================================
@@ -292,7 +330,9 @@ MScanListItem::MScanListItem( QListView* parent, QString type, QString essid, QS
_type( type ), _essid( essid ), _macaddr( macaddr ), _wep( wep ),
_channel( channel ), _signal( signal ), _beacons( 1 )
{
+ #ifdef DEBUG
qDebug( "creating scanlist item" );
+ #endif
if ( WellenreiterConfigWindow::instance() && type == "network" )
playSound( WellenreiterConfigWindow::instance()->soundOnNetwork() );
decorateItem( type, essid, macaddr, wep, channel, signal );
@@ -302,7 +342,9 @@ MScanListItem::MScanListItem( QListViewItem* parent, QString type, QString essid
bool wep, int channel, int signal )
:OListViewItem( parent, essid, QString::null, macaddr, QString::null, QString::null )
{
+ #ifdef DEBUG
qDebug( "creating scanlist item" );
+ #endif
decorateItem( type, essid, macaddr, wep, channel, signal );
}
@@ -313,7 +355,9 @@ OListViewItem* MScanListItem::childFactory()
void MScanListItem::serializeTo( QDataStream& s ) const
{
+ #ifdef DEBUG
qDebug( "serializing MScanListItem" );
+ #endif
OListViewItem::serializeTo( s );
s << _type;
@@ -322,7 +366,9 @@ void MScanListItem::serializeTo( QDataStream& s ) const
void MScanListItem::serializeFrom( QDataStream& s )
{
+ #ifdef DEBUG
qDebug( "serializing MScanListItem" );
+ #endif
OListViewItem::serializeFrom( s );
char wep;
@@ -340,11 +386,13 @@ void MScanListItem::serializeFrom( QDataStream& s )
void MScanListItem::decorateItem( QString type, QString essid, QString macaddr, bool wep, int channel, int signal )
{
+ #ifdef DEBUG
qDebug( "decorating scanlist item %s / %s / %s [%d]",
(const char*) type,
(const char*) essid,
(const char*) macaddr,
channel );
+ #endif
// set icon for managed or adhoc mode
QString name;
diff --git a/noncore/net/wellenreiter/gui/scanlist.h b/noncore/net/wellenreiter/gui/scanlist.h
index 56bf837..4cb9216 100644
--- a/noncore/net/wellenreiter/gui/scanlist.h
+++ b/noncore/net/wellenreiter/gui/scanlist.h
@@ -46,6 +46,8 @@ class MScanListView: public OListView
void WDStraffic( QString from, QString to, QString viaFrom, QString viaTo );
void IBSStraffic( QString from, QString to, QString via ); // NYI
+ void identify( const QString& macaddr, const QString& ipaddr );
+
protected:
void addIfNotExisting( MScanListItem* parent, QString addr, const QString& type = "station" );
diff --git a/noncore/net/wellenreiter/gui/wellenreiter.cpp b/noncore/net/wellenreiter/gui/wellenreiter.cpp
index 62bda91..9e1010b 100644
--- a/noncore/net/wellenreiter/gui/wellenreiter.cpp
+++ b/noncore/net/wellenreiter/gui/wellenreiter.cpp
@@ -137,13 +137,7 @@ void Wellenreiter::channelHopped(int c)
}
-void Wellenreiter::receivePacket(OPacket* p)
-{
- hexWindow()->log( p->dump( 8 ) );
-
- // check if we received a beacon frame
- OWaveLanManagementPacket* beacon = static_cast<OWaveLanManagementPacket*>( p->child( "802.11 Management" ) );
- if ( beacon && beacon->managementType() == "Beacon" )
+void Wellenreiter::handleBeacon( OPacket* p, OWaveLanManagementPacket* beacon )
{
QString type;
if ( beacon->canIBSS() )
@@ -156,7 +150,7 @@ void Wellenreiter::receivePacket(OPacket* p)
}
else
{
- qDebug( "Wellenreiter::invalid frame detected: '%s'", (const char*) p->dump( 16 ) );
+ qWarning( "Wellenreiter::invalid frame [possibly noise] detected!" );
return;
}
@@ -177,12 +171,10 @@ void Wellenreiter::receivePacket(OPacket* p)
else
graphwindow->traffic( ds->channel(), 95 );
}
- return;
}
- // check for a data frame
- OWaveLanDataPacket* data = static_cast<OWaveLanDataPacket*>( p->child( "802.11 Data" ) );
- if ( data )
+
+void Wellenreiter::handleData( OPacket* p, OWaveLanDataPacket* data )
{
OWaveLanPacket* wlan = (OWaveLanPacket*) p->child( "802.11" );
if ( wlan->fromDS() && !wlan->toDS() )
@@ -229,8 +221,50 @@ void Wellenreiter::receivePacket(OPacket* p)
wlan->macAddress1().toString(),
wlan->macAddress3().toString() );
}
+
+ OARPPacket* arp = (OARPPacket*) p->child( "ARP" );
+ if ( arp )
+ {
+ qDebug( "Received ARP traffic (type '%s'): ", (const char*) arp->type() );
+ if ( arp->type() == "REQUEST" )
+ {
+ netView()->identify( arp->senderMacAddress().toString(), arp->senderIPV4Address().toString() );
+ }
+ else if ( arp->type() == "REPLY" )
+ {
+ netView()->identify( arp->senderMacAddress().toString(), arp->senderIPV4Address().toString() );
+ netView()->identify( arp->targetMacAddress().toString(), arp->targetIPV4Address().toString() );
+ }
+ }
+
+ OIPPacket* ip = (OIPPacket*) p->child( "IP" );
+ if ( ip )
+ {
+ qDebug( "Received IP packet." );
+ }
+}
+
+
+void Wellenreiter::receivePacket( OPacket* p )
+{
+ hexWindow()->log( p->dump( 8 ) );
+
+ // check if we received a beacon frame
+ OWaveLanManagementPacket* beacon = static_cast<OWaveLanManagementPacket*>( p->child( "802.11 Management" ) );
+ if ( beacon && beacon->managementType() == "Beacon" )
+ {
+ handleBeacon( p, beacon );
return;
}
+
+ //TODO: WEP check here
+
+ // check for a data frame
+ OWaveLanDataPacket* data = static_cast<OWaveLanDataPacket*>( p->child( "802.11 Data" ) );
+ if ( data )
+ {
+ handleData( p, data );
+ }
}
diff --git a/noncore/net/wellenreiter/gui/wellenreiter.h b/noncore/net/wellenreiter/gui/wellenreiter.h
index c37a9f2..ea8a692 100644
--- a/noncore/net/wellenreiter/gui/wellenreiter.h
+++ b/noncore/net/wellenreiter/gui/wellenreiter.h
@@ -26,9 +26,10 @@ using namespace Opie;
class QTimerEvent;
class QPixmap;
class OPacket;
+class OWaveLanManagementPacket;
+class OWaveLanDataPacket;
class OPacketCapturer;
class OWirelessNetworkInterface;
-
class ManufacturerDB;
class WellenreiterConfigWindow;
class MLogWindow;
@@ -63,6 +64,10 @@ class Wellenreiter : public WellenreiterBase {
void stoppedSniffing();
private:
+ void handleBeacon( OPacket* p, OWaveLanManagementPacket* beacon );
+ void handleData( OPacket* p, OWaveLanDataPacket* data );
+
+ private:
#ifdef QWS
OSystem _system; // Opie Operating System identifier
#endif