summaryrefslogtreecommitdiff
authormickeyl <mickeyl>2003-02-14 23:28:10 (UTC)
committer mickeyl <mickeyl>2003-02-14 23:28:10 (UTC)
commite8f0c623ff6a8822b84b9cc4ee3c1fb3b3016738 (patch) (side-by-side diff)
treedd6a6e1e7e33c94b41240c9547ce0e7f7a255414
parent643c8058bbd67a8fedfd98cb895419cadde04e78 (diff)
downloadopie-e8f0c623ff6a8822b84b9cc4ee3c1fb3b3016738.zip
opie-e8f0c623ff6a8822b84b9cc4ee3c1fb3b3016738.tar.gz
opie-e8f0c623ff6a8822b84b9cc4ee3c1fb3b3016738.tar.bz2
- remove manual switch into monitor mode ==> wellenreiterd handles this now
- remove manual start of channelswitcher ==> wellenreiterd handles this now - add device type configurations for cisco, wlan-ng, hostap and orinoco - minor bugfix to the start/stop logic
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/wellenreiter/gui/configbase.ui30
-rw-r--r--noncore/net/wellenreiter/gui/configwindow.cpp26
-rw-r--r--noncore/net/wellenreiter/gui/configwindow.h9
-rw-r--r--noncore/net/wellenreiter/gui/manufacturers.h3
-rw-r--r--noncore/net/wellenreiter/gui/wellenreiter.cpp97
5 files changed, 95 insertions, 70 deletions
diff --git a/noncore/net/wellenreiter/gui/configbase.ui b/noncore/net/wellenreiter/gui/configbase.ui
index 8dcf513..7992e6b 100644
--- a/noncore/net/wellenreiter/gui/configbase.ui
+++ b/noncore/net/wellenreiter/gui/configbase.ui
@@ -1,62 +1,62 @@
<!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>228</width>
+ <width>224</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>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>
@@ -108,188 +108,212 @@
<name>text</name>
<string>&lt;select&gt;</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>
+ <property>
+ <name>whatsThis</name>
+ <string>Choose the interface used for sniffing.</string>
+ </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>&lt;select&gt;</string>
</property>
</item>
<item>
<property>
<name>text</name>
- <string>orinoco</string>
+ <string>cisco</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>wlan-ng</string>
</property>
</item>
<item>
<property>
<name>text</name>
- <string>prism</string>
+ <string>hostap</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>orinoco</string>
</property>
</item>
<item>
<property>
<name>text</name>
<string>&lt;manual&gt;</string>
</property>
</item>
<property stdset="1">
<name>name</name>
<cstring>deviceType</cstring>
</property>
<property stdset="1">
<name>enabled</name>
<bool>true</bool>
</property>
+ <property>
+ <name>whatsThis</name>
+ <string>Choose the type of driver used for sniffing.</string>
+ </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>
+ <property>
+ <name>whatsThis</name>
+ <string>Choose the channel hop interval.</string>
+ </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>
<widget row="0" column="1" >
<class>QLabel</class>
<property stdset="1">
<name>name</name>
<cstring>TextLabel1_2</cstring>
</property>
<property stdset="1">
<name>enabled</name>
<bool>true</bool>
</property>
<property stdset="1">
<name>text</name>
<string>Interface Name</string>
</property>
</widget>
</grid>
</widget>
diff --git a/noncore/net/wellenreiter/gui/configwindow.cpp b/noncore/net/wellenreiter/gui/configwindow.cpp
index 04e3457..515d9b2 100644
--- a/noncore/net/wellenreiter/gui/configwindow.cpp
+++ b/noncore/net/wellenreiter/gui/configwindow.cpp
@@ -1,23 +1,47 @@
/**********************************************************************
** 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 "configwindow.h"
+#include <qmap.h>
+#include <qcombobox.h>
+#include <qspinbox.h>
WellenreiterConfigWindow::WellenreiterConfigWindow( QWidget * parent, const char * name, WFlags f )
:WellenreiterConfigBase( parent, name, f )
{
-
+ _devicetype[ "cisco" ] = 1;
+ _devicetype[ "wlan-ng" ] = 2;
+ _devicetype[ "hostap" ] = 3;
+ _devicetype[ "orinoco" ] = 4;
+ _devicetype[ "<manual>" ] = 5;
};
+int WellenreiterConfigWindow::daemonDeviceType()
+{
+ QString name = deviceType->currentText();
+ if ( _devicetype.contains( name ) )
+ {
+ return _devicetype[name];
+ }
+ else
+ {
+ return 0;
+ }
+};
+
+int WellenreiterConfigWindow::daemonHopInterval()
+{
+ return hopInterval->cleanText().toInt();
+}
diff --git a/noncore/net/wellenreiter/gui/configwindow.h b/noncore/net/wellenreiter/gui/configwindow.h
index c2db283..c627901 100644
--- a/noncore/net/wellenreiter/gui/configwindow.h
+++ b/noncore/net/wellenreiter/gui/configwindow.h
@@ -1,31 +1,36 @@
/**********************************************************************
** 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 WELLENREITERCONFIGWINDOW_H
#define WELLENREITERCONFIGWINDOW_H
#include "configbase.h"
+#include <qmap.h>
class WellenreiterConfigWindow : public WellenreiterConfigBase
{
public:
WellenreiterConfigWindow( QWidget * parent = 0, const char * name = "WellenreiterConfigWindow", WFlags f = 0 );
-
-
+ int daemonDeviceType();
+ int daemonHopInterval();
+
+ protected:
+ QMap<QString, int> _devicetype;
+
};
#endif
diff --git a/noncore/net/wellenreiter/gui/manufacturers.h b/noncore/net/wellenreiter/gui/manufacturers.h
index 67afe21..75728b1 100644
--- a/noncore/net/wellenreiter/gui/manufacturers.h
+++ b/noncore/net/wellenreiter/gui/manufacturers.h
@@ -1,37 +1,36 @@
/**********************************************************************
** 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 MANUFACTURERS_H
#define MANUFACTURERS_H
#include <qmap.h>
-#include <string.h>
class ManufacturerDB
{
public:
ManufacturerDB( const QString& filename );
virtual ~ManufacturerDB();
const QString& lookup( const QString& macaddr ) const;
private:
QMap<QString, QString> manufacturers;
-
+
};
#endif
diff --git a/noncore/net/wellenreiter/gui/wellenreiter.cpp b/noncore/net/wellenreiter/gui/wellenreiter.cpp
index 4ee9a35..4c1c972 100644
--- a/noncore/net/wellenreiter/gui/wellenreiter.cpp
+++ b/noncore/net/wellenreiter/gui/wellenreiter.cpp
@@ -23,291 +23,264 @@
// Qtopia
#ifdef QWS
#include <qpe/qpeapplication.h>
#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 "scanlist.h"
#include "logwindow.h"
#include "hexwindow.h"
#include "configwindow.h"
#include "manufacturers.h"
#include <daemon/source/config.hh>
#include <libwellenreiter/source/wl_types.hh>
#include <libwellenreiter/source/wl_sock.hh>
#include <libwellenreiter/source/wl_proto.hh>
Wellenreiter::Wellenreiter( QWidget* parent, const char* name, WFlags fl )
: WellenreiterBase( parent, name, fl ), daemonRunning( false ), manufacturerdb( 0 )
{
//
// construct manufacturer database
//
-
+
QString manufile;
#ifdef QWS
manufile.sprintf( "%s/share/wellenreiter/manufacturers.dat", (const char*) QPEApplication::qpeDir() );
#else
manufile.sprintf( "/home/mickey/work/opie/share/wellenreiter/manufacturers.dat" );
#endif
manufacturerdb = new ManufacturerDB( manufile );
logwindow->log( "(i) Wellenreiter has been started." );
//
// 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, register socket notifier
//
// struct sockaddr_in sockaddr;
daemon_fd = wl_setupsock( GUIADDR, GUIPORT, sockaddr );
if ( daemon_fd == -1 )
{
logwindow->log( "(E) Couldn't get file descriptor for commsocket." );
}
else
{
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 );
-
+
if ( manufacturerdb )
netview->setManufacturerDB( manufacturerdb );
}
Wellenreiter::~Wellenreiter()
{
// no need to delete child widgets, Qt does it all for us
delete manufacturerdb;
}
void Wellenreiter::handleMessage()
{
// FIXME: receive message and handle it
qDebug( "received message from daemon." );
/*char buffer[10000];
memset( &buffer, 0, sizeof( buffer ) );*/
char buffer[WL_SOCKBUF];
// 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 );
qDebug( "received %d from recv [%d bytes]", result, len );
*/
int result = wl_recv( &daemon_fd, sockaddr, (char*) &buffer, WL_SOCKBUF );
-
+
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( "Recv result: %d", ( result ) );
qDebug( "Sniffer sent: '%s'", (const char*) buffer );
hexwindow->log( (const char*) &buffer );
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";
netview->addNewItem( type, n.bssid, QString( (const char*) &n.mac ), n.wep, n.channel, 0 );
}
else
{
qDebug( "unknown sniffer command." );
}
}
void Wellenreiter::dataReceived()
{
logwindow->log( "(d) Received data from daemon" );
- handleMessage();
+ handleMessage();
}
void Wellenreiter::buttonClicked()
{
/*
// 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 );
*/
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" );
-
+
// get configuration from config window
-
+
const QString& interface = configwindow->interfaceName->currentText();
const QString& cardtype = configwindow->deviceType->currentText();
- const QString& interval = configwindow->hopInterval->cleanText();
-
+ //const QString& interval = configwindow->hopInterval->cleanText();
+
// reset the card trying to get into a usable state again
-
+
QString cmdline;
- cmdline.sprintf( "iwpriv %s monitor 1", (const char*) interface );
- system( cmdline );
- cmdline.sprintf( "iwpriv %s monitor 1 6", (const char*) interface );
- system( cmdline );
- cmdline.sprintf( "ifconfig %s -promisc", (const char*) interface );
+ cmdline.sprintf( "cardctl eject; cardctl insert" );
system( cmdline );
cmdline.sprintf( "killall -14 dhcpcd" );
system( cmdline );
cmdline.sprintf( "killall -10 udhcpc" );
-
+
// message the user
QMessageBox::information( this, "Wellenreiter/Opie", "Your wireless card\nshould now be usable 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>" ) )
+ const int cardtype = configwindow->daemonDeviceType();
+ const int interval = configwindow->daemonHopInterval();
+
+ if ( ( interface == "<select>" ) || ( cardtype == 0 ) )
{
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! :( */
-
+
+ // start wellenreiterd
+
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 += " &";
+ cmdline.sprintf( "wellenreiterd %s %d &", (const char*) interface, cardtype );
- qDebug( "execute: %s", (const char*) cmdline );
+ qDebug( "about to execute '%s' ...", (const char*) cmdline );
system( cmdline );
- qDebug( "done" );
+ qDebug( "done!" );
+
+ logwindow->log( "(i) Daemon has been started." );
+ daemonRunning = true;
+ button->setText( "Stop Scanning" );
}
}