summaryrefslogtreecommitdiff
path: root/libopie2/opienet
authormickeyl <mickeyl>2003-10-23 17:51:00 (UTC)
committer mickeyl <mickeyl>2003-10-23 17:51:00 (UTC)
commita9eddd4cd428dd844d8693e98e4df8e365e75da8 (patch) (side-by-side diff)
tree21b5957143ad30b0efb505694505985ca65d3850 /libopie2/opienet
parenta61c014e1fb43e36aa7454ce4b3cb9a7a706c6fa (diff)
downloadopie-a9eddd4cd428dd844d8693e98e4df8e365e75da8.zip
opie-a9eddd4cd428dd844d8693e98e4df8e365e75da8.tar.gz
opie-a9eddd4cd428dd844d8693e98e4df8e365e75da8.tar.bz2
misc changes
Diffstat (limited to 'libopie2/opienet') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opienet/onetutils.cpp30
-rw-r--r--libopie2/opienet/onetutils.h7
-rw-r--r--libopie2/opienet/onetwork.cpp91
-rw-r--r--libopie2/opienet/onetwork.h5
-rw-r--r--libopie2/opienet/ostation.cpp15
-rw-r--r--libopie2/opienet/ostation.h17
6 files changed, 103 insertions, 62 deletions
diff --git a/libopie2/opienet/onetutils.cpp b/libopie2/opienet/onetutils.cpp
index ad0e89d..ce147c5 100644
--- a/libopie2/opienet/onetutils.cpp
+++ b/libopie2/opienet/onetutils.cpp
@@ -33,9 +33,9 @@
#include <opie2/onetwork.h>
#include <opie2/omanufacturerdb.h>
#include <net/if.h>
-
+#include <cassert>
#include <cstdio>
using namespace std;
#define IW_PRIV_TYPE_MASK 0x7000
@@ -212,4 +212,32 @@ void dumpBytes( const unsigned char* data, int num )
}
printf( "\n\n" );
}
+
+int stringToMode( const QString& mode )
+{
+ if ( mode == "auto" ) return IW_MODE_AUTO;
+ else if ( mode == "adhoc" ) return IW_MODE_ADHOC;
+ else if ( mode == "managed" ) return IW_MODE_INFRA;
+ else if ( mode == "master" ) return IW_MODE_MASTER;
+ else if ( mode == "repeater" ) return IW_MODE_REPEAT;
+ else if ( mode == "secondary" ) return IW_MODE_SECOND;
+ else if ( mode == "monitor" ) return IW_MODE_MONITOR;
+ else assert( 0 );
+}
+
+
+QString modeToString( int mode )
+{
+ switch ( mode )
+ {
+ case IW_MODE_AUTO: return "auto";
+ case IW_MODE_ADHOC: return "adhoc";
+ case IW_MODE_INFRA: return "managed";
+ case IW_MODE_MASTER: return "master";
+ case IW_MODE_REPEAT: return "repeater";
+ case IW_MODE_SECOND: return "second";
+ case IW_MODE_MONITOR: return "monitor";
+ default: assert( 0 );
+ }
+}
diff --git a/libopie2/opienet/onetutils.h b/libopie2/opienet/onetutils.h
index 18731ba..541c5ab 100644
--- a/libopie2/opienet/onetutils.h
+++ b/libopie2/opienet/onetutils.h
@@ -83,11 +83,12 @@ bool operator==( const OMacAddress &m1, const OMacAddress &m2 );
*======================================================================================*/
class OHostAddress : public QHostAddress
{
- public:
+ /*public:
OHostAddress();
~OHostAddress();
+ */
};
/*======================================================================================
@@ -119,11 +120,11 @@ class OPrivateIOCTL : public QObject
/*======================================================================================
* Miscellaneous
*======================================================================================*/
-/* dump bytes */
-
void dumpBytes( const unsigned char* data, int num );
+QString modeToString( int );
+int stringToMode( const QString& );
/* Network to host order macros */
#ifdef LBL_ALIGN
diff --git a/libopie2/opienet/onetwork.cpp b/libopie2/opienet/onetwork.cpp
index a85a510..50c6679 100644
--- a/libopie2/opienet/onetwork.cpp
+++ b/libopie2/opienet/onetwork.cpp
@@ -255,8 +255,9 @@ QString ONetworkInterface::ipV4Address() const
return QString( inet_ntoa( sa->sin_addr ) );
}
else
return "<unknown>";
+
}
void ONetworkInterface::setMacAddress( const OMacAddress& addr )
@@ -473,32 +474,18 @@ void OWirelessNetworkInterface::init()
bool OWirelessNetworkInterface::isAssociated() const
{
//FIXME: handle different modes
- return associatedAP() != "44:44:44:44:44:44";
+ return !(associatedAP() == OMacAddress::unknown);
}
-QString OWirelessNetworkInterface::associatedAP() const
+OMacAddress OWirelessNetworkInterface::associatedAP() const
{
- //FIXME: use OMacAddress
- QString mac;
-
if ( ioctl( SIOCGIWAP ) )
- {
- mac.sprintf( "%.2X:%.2X:%.2X:%.2X:%.2X:%.2X",
- _ifr.ifr_hwaddr.sa_data[0]&0xff,
- _ifr.ifr_hwaddr.sa_data[1]&0xff,
- _ifr.ifr_hwaddr.sa_data[2]&0xff,
- _ifr.ifr_hwaddr.sa_data[3]&0xff,
- _ifr.ifr_hwaddr.sa_data[4]&0xff,
- _ifr.ifr_hwaddr.sa_data[5]&0xff );
- }
+ return (const unsigned char*) &_ifr.ifr_hwaddr.sa_data[0];
else
- {
- mac = "<Unknown>";
- }
- return mac;
+ return OMacAddress::unknown;
}
void OWirelessNetworkInterface::buildInformation()
@@ -687,20 +674,9 @@ OChannelHopper* OWirelessNetworkInterface::channelHopper() const
void OWirelessNetworkInterface::setMode( const QString& mode )
{
- if ( mode == "auto" ) _iwr.u.mode = IW_MODE_AUTO;
- else if ( mode == "adhoc" ) _iwr.u.mode = IW_MODE_ADHOC;
- else if ( mode == "managed" ) _iwr.u.mode = IW_MODE_INFRA;
- else if ( mode == "master" ) _iwr.u.mode = IW_MODE_MASTER;
- else if ( mode == "repeater" ) _iwr.u.mode = IW_MODE_REPEAT;
- else if ( mode == "secondary" ) _iwr.u.mode = IW_MODE_SECOND;
- else if ( mode == "monitor" ) _iwr.u.mode = IW_MODE_MONITOR;
- else
- {
- qDebug( "ONetwork: Warning! Invalid IEEE 802.11 mode '%s' specified.", (const char*) mode );
- return;
- }
+ _iwr.u.mode = stringToMode( mode );
wioctl( SIOCSIWMODE );
}
@@ -709,19 +685,9 @@ QString OWirelessNetworkInterface::mode() const
if ( !wioctl( SIOCGIWMODE ) )
{
return "<unknown>";
}
- switch ( _iwr.u.mode )
- {
- case IW_MODE_AUTO: return "auto";
- case IW_MODE_ADHOC: return "adhoc";
- case IW_MODE_INFRA: return "managed";
- case IW_MODE_MASTER: return "master";
- case IW_MODE_REPEAT: return "repeater";
- case IW_MODE_SECOND: return "secondary";
- case IW_MODE_MONITOR: return "monitor";
- default: assert( 0 ); // shouldn't happen
- }
+ return modeToString( _iwr.u.mode );
}
void OWirelessNetworkInterface::setMonitorMode( bool b )
@@ -829,17 +795,19 @@ void OWirelessNetworkInterface::setSSID( const QString& ssid )
wioctl( SIOCSIWESSID );
}
-int OWirelessNetworkInterface::scanNetwork()
+OStationList* OWirelessNetworkInterface::scanNetwork()
{
_iwr.u.param.flags = IW_SCAN_DEFAULT;
_iwr.u.param.value = 0;
if ( !wioctl( SIOCSIWSCAN ) )
{
- return -1;
+ return 0;
}
+ OStationList* stations = new OStationList();
+
int timeout = 1000000;
qDebug( "ONetworkInterface::scanNetwork() - scan started." );
@@ -885,16 +853,14 @@ int OWirelessNetworkInterface::scanNetwork()
qDebug( " - result length = %d", _iwr.u.data.length );
if ( !_iwr.u.data.length )
{
qDebug( " - no results (empty neighbourhood)" );
- return 0;
+ return stations;
}
qDebug( " - results are in!" );
dumpBytes( (const unsigned char*) &buffer[0], _iwr.u.data.length );
- int stations = 0;
-
// parse results
int offset = 0;
struct iw_event* we = (struct iw_event*) &buffer[0];
@@ -905,12 +871,33 @@ int OWirelessNetworkInterface::scanNetwork()
//if ( !cmd ) cmd = "<unknown>";
qDebug( "reading next event... cmd=%d, len=%d", we->cmd, we->len );
switch (we->cmd)
{
- case SIOCGIWAP: qDebug( "SIOCGIWAP" ); stations++; break;
- case SIOCGIWMODE: qDebug( "SIOCGIWMODE" ); break;
- case SIOCGIWFREQ: qDebug( "SIOCGIWFREQ" ); break;
- case SIOCGIWESSID: qDebug( "SIOCGIWESSID" ); break;
+ case SIOCGIWAP:
+ {
+ qDebug( "SIOCGIWAP" );
+ stations->append( new OStation() );
+ stations->last()->macAddress = (const unsigned char*) &we->u.ap_addr.sa_data[0];
+ break;
+ }
+ case SIOCGIWMODE:
+ {
+ qDebug( "SIOCGIWMODE" );
+ stations->last()->type = modeToString( we->u.mode );
+ break;
+ }
+ case SIOCGIWFREQ:
+ {
+ qDebug( "SIOCGIWFREQ" );
+ stations->last()->channel = _channels[ static_cast<int>(double( we->u.freq.m ) * pow( 10.0, we->u.freq.e ) / 1000000) ];
+ break;
+ }
+ case SIOCGIWESSID:
+ {
+ qDebug( "SIOCGIWESSID" );
+ stations->last()->ssid = we->u.essid.pointer;
+ break;
+ }
case SIOCGIWSENS: qDebug( "SIOCGIWSENS" ); break;
case SIOCGIWENCODE: qDebug( "SIOCGIWENCODE" ); break;
case IWEVTXDROP: qDebug( "IWEVTXDROP" ); break; /* Packet dropped to excessive retry */
case IWEVQUAL: qDebug( "IWEVQUAL" ); break; /* Quality part of statistics (scan) */
@@ -923,13 +910,15 @@ int OWirelessNetworkInterface::scanNetwork()
offset += we->len;
we = (struct iw_event*) &buffer[offset];
}
+ return stations;
+
}
else
{
qDebug( " - no results (timeout) :(" );
- return 0;
+ return stations;
}
}
diff --git a/libopie2/opienet/onetwork.h b/libopie2/opienet/onetwork.h
index e1545dd..0eb4542 100644
--- a/libopie2/opienet/onetwork.h
+++ b/libopie2/opienet/onetwork.h
@@ -38,8 +38,9 @@
/* OPIE */
#include <opie2/onetutils.h>
+#include <opie2/ostation.h>
/* QT */
#include <qvaluelist.h>
@@ -405,9 +406,9 @@ class OWirelessNetworkInterface : public ONetworkInterface
/**
* @returns the MAC address of the Access Point if the device is in infrastructure mode.
* @returns a (more or less random) cell ID address if the device is in adhoc mode.
*/
- virtual QString associatedAP() const;
+ virtual OMacAddress associatedAP() const;
/**
* Set the @a ssid (Service Set ID) string. This is used to decide
* which network to associate with (use "any" to let the driver decide).
*/
@@ -419,9 +420,9 @@ class OWirelessNetworkInterface : public ONetworkInterface
/**
* Perform scanning the wireless network neighbourhood.
* @note: UNSTABLE API - UNDER CONSTRUCTION - DON'T USE!
*/
- virtual int scanNetwork();
+ virtual OStationList* scanNetwork();
protected:
void buildInformation();
void buildPrivateList();
diff --git a/libopie2/opienet/ostation.cpp b/libopie2/opienet/ostation.cpp
index 3817b31..ba1e4f6 100644
--- a/libopie2/opienet/ostation.cpp
+++ b/libopie2/opienet/ostation.cpp
@@ -37,8 +37,15 @@
OStation::OStation()
{
qDebug( "OStation::OStation()" );
+
+ type = "<unknown>";
+ macAddress = OMacAddress::unknown;
+ ssid = "<unknown>";
+ channel = 0;
+ apAddress = OMacAddress::unknown;
+
}
OStation::~OStation()
@@ -46,4 +53,12 @@ OStation::~OStation()
qDebug( "OStation::~OStation()" );
}
+void OStation::dump()
+{
+ qDebug( "------- OStation::dump() ------------" );
+ qDebug( "type: %s", (const char*) type );
+ qDebug( "mac: %s", (const char*) macAddress.toString() );
+ qDebug( "ap: %s", (const char*) apAddress.toString() );
+ qDebug( "ip: %s", (const char*) ipAddress.toString() );
+}
diff --git a/libopie2/opienet/ostation.h b/libopie2/opienet/ostation.h
index f61570b..a6956c9 100644
--- a/libopie2/opienet/ostation.h
+++ b/libopie2/opienet/ostation.h
@@ -33,19 +33,18 @@
#define OSTATION_H
#include <opie2/onetutils.h>
-#include <qdict.h>
-#include <qmap.h>
+#include <qlist.h>
#include <qstring.h>
#include <qhostaddress.h>
#include <qobject.h>
#include <sys/types.h>
class OStation;
-typedef QDict<OStation> OStationDict;
+typedef QList<OStation> OStationList;
/*======================================================================================
* OStation
*======================================================================================*/
@@ -55,13 +54,21 @@ class OStation
public:
OStation();
~OStation();
- private:
+ void dump();
+
+ /* Ethernet */
+ QString type;
OMacAddress macAddress;
QHostAddress ipAddress;
+
+ /* WaveLan */
QString ssid;
- QString type;
+ OMacAddress apAddress;
+ int channel;
+ bool encrypted;
};
+
#endif // OSTATION_H