-rw-r--r-- | libopie2/examples/opienet/onetworkdemo/onetworkdemo.cpp | 16 | ||||
-rw-r--r-- | libopie2/opienet/onetutils.cpp | 30 | ||||
-rw-r--r-- | libopie2/opienet/onetutils.h | 7 | ||||
-rw-r--r-- | libopie2/opienet/onetwork.cpp | 91 | ||||
-rw-r--r-- | libopie2/opienet/onetwork.h | 5 | ||||
-rw-r--r-- | libopie2/opienet/ostation.cpp | 15 | ||||
-rw-r--r-- | libopie2/opienet/ostation.h | 17 |
7 files changed, 115 insertions, 66 deletions
diff --git a/libopie2/examples/opienet/onetworkdemo/onetworkdemo.cpp b/libopie2/examples/opienet/onetworkdemo/onetworkdemo.cpp index fc2026f..21026e1 100644 --- a/libopie2/examples/opienet/onetworkdemo/onetworkdemo.cpp +++ b/libopie2/examples/opienet/onetworkdemo/onetworkdemo.cpp @@ -1,2 +1,3 @@ #include <opie2/onetwork.h> +#include <opie2/ostation.h> #include <opie2/omanufacturerdb.h> @@ -29,3 +30,3 @@ int main( int argc, char** argv ) //{ - qDebug( "DEMO: Associated AP has MAC Address '%s'", (const char*) iface->associatedAP() ); + qDebug( "DEMO: Associated AP has MAC Address '%s'", (const char*) iface->associatedAP().toString() ); //} @@ -60,7 +61,14 @@ int main( int argc, char** argv ) - int stations = iface->scanNetwork(); - if ( stations != -1 ) + OStationList* stations = iface->scanNetwork(); + if ( stations ) { - qDebug( "DEMO: # of stations around = %d", stations ); + qDebug( "DEMO: # of stations around = %d", stations->count() ); + OStation* station; + for ( station = stations->first(); station != 0; station = stations->next() ) + { + qDebug( "DEMO: station dump following..." ); + station->dump(); + } } + else 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 @@ -36,3 +36,3 @@ #include <net/if.h> - +#include <cassert> #include <cstdio> @@ -215 +215,29 @@ void dumpBytes( const unsigned char* data, int num ) + +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 @@ -86,5 +86,6 @@ class OHostAddress : public QHostAddress { - public: + /*public: OHostAddress(); ~OHostAddress(); + */ }; @@ -122,5 +123,5 @@ class OPrivateIOCTL : public QObject -/* dump bytes */ - void dumpBytes( const unsigned char* data, int num ); +QString modeToString( int ); +int stringToMode( const QString& ); 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 @@ -258,2 +258,3 @@ QString ONetworkInterface::ipV4Address() const return "<unknown>"; + } @@ -476,3 +477,3 @@ bool OWirelessNetworkInterface::isAssociated() const //FIXME: handle different modes - return associatedAP() != "44:44:44:44:44:44"; + return !(associatedAP() == OMacAddress::unknown); } @@ -480,22 +481,8 @@ bool OWirelessNetworkInterface::isAssociated() const -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; } @@ -690,14 +677,3 @@ 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 ); @@ -712,13 +688,3 @@ QString OWirelessNetworkInterface::mode() const } - 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 ); } @@ -832,3 +798,3 @@ void OWirelessNetworkInterface::setSSID( const QString& ssid ) -int OWirelessNetworkInterface::scanNetwork() +OStationList* OWirelessNetworkInterface::scanNetwork() { @@ -838,5 +804,7 @@ int OWirelessNetworkInterface::scanNetwork() { - return -1; + return 0; } + OStationList* stations = new OStationList(); + int timeout = 1000000; @@ -888,3 +856,3 @@ int OWirelessNetworkInterface::scanNetwork() qDebug( " - no results (empty neighbourhood)" ); - return 0; + return stations; } @@ -894,4 +862,2 @@ int OWirelessNetworkInterface::scanNetwork() - int stations = 0; - // parse results @@ -908,6 +874,27 @@ int OWirelessNetworkInterface::scanNetwork() { - 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; @@ -926,2 +913,4 @@ int OWirelessNetworkInterface::scanNetwork() + return stations; + } @@ -930,3 +919,3 @@ int OWirelessNetworkInterface::scanNetwork() 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 @@ -41,2 +41,3 @@ #include <opie2/onetutils.h> +#include <opie2/ostation.h> @@ -408,3 +409,3 @@ class OWirelessNetworkInterface : public ONetworkInterface */ - virtual QString associatedAP() const; + virtual OMacAddress associatedAP() const; /** @@ -422,3 +423,3 @@ class OWirelessNetworkInterface : public ONetworkInterface */ - virtual int scanNetwork(); + virtual OStationList* scanNetwork(); 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 @@ -40,2 +40,9 @@ OStation::OStation() qDebug( "OStation::OStation()" ); + + type = "<unknown>"; + macAddress = OMacAddress::unknown; + ssid = "<unknown>"; + channel = 0; + apAddress = OMacAddress::unknown; + } @@ -49 +56,9 @@ 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 @@ -36,4 +36,3 @@ -#include <qdict.h> -#include <qmap.h> +#include <qlist.h> #include <qstring.h> @@ -46,3 +45,3 @@ class OStation; -typedef QDict<OStation> OStationDict; +typedef QList<OStation> OStationList; @@ -58,9 +57,17 @@ class 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 |