-rw-r--r-- | libopie2/opienet/onetwork.cpp | 38 | ||||
-rw-r--r-- | libopie2/opienet/onetwork.h | 3 | ||||
-rw-r--r-- | libopie2/opienet/ostation.h | 2 |
3 files changed, 38 insertions, 5 deletions
diff --git a/libopie2/opienet/onetwork.cpp b/libopie2/opienet/onetwork.cpp index 546be9e..0a74019 100644 --- a/libopie2/opienet/onetwork.cpp +++ b/libopie2/opienet/onetwork.cpp @@ -39,4 +39,5 @@ #include <qfile.h> #include <qtextstream.h> +#include <qapplication.h> /* UNIX */ @@ -54,4 +55,5 @@ #include <linux/sockios.h> #include <net/if_arp.h> +#include <net/ethernet.h> #include <stdarg.h> @@ -492,4 +494,12 @@ bool OWirelessNetworkInterface::isAssociated() const +void OWirelessNetworkInterface::setAssociatedAP( const OMacAddress& mac ) const +{ + _iwr.u.ap_addr.sa_family = ARPHRD_ETHER; + ::memcpy(_iwr.u.ap_addr.sa_data, mac.native(), ETH_ALEN); + wioctl( SIOCSIWAP ); +} + + OMacAddress OWirelessNetworkInterface::associatedAP() const { @@ -907,5 +917,4 @@ OStationList* OWirelessNetworkInterface::scanNetwork() { odebug << "ONetworkInterface::scanNetwork() - scan in progress..." << oendl; - #if 0 if ( qApp ) { @@ -913,5 +922,4 @@ OStationList* OWirelessNetworkInterface::scanNetwork() continue; } - #endif tv.tv_sec = 0; tv.tv_usec = 100000; @@ -1128,5 +1136,8 @@ OStationList* OWirelessNetworkInterface::scanNetwork() { odebug << "SIOCGIWFREQ" << oendl; - stations->last()->channel = _channels[ static_cast<int>(double( we->u.freq.m ) * pow( 10.0, we->u.freq.e ) / 1000000) ]; + if ( we->u.freq.m > 1000 ) + stations->last()->channel = _channels[ static_cast<int>(double( we->u.freq.m ) * pow( 10.0, we->u.freq.e ) / 1000000) ]; + else + stations->last()->channel = static_cast<int>(((double) we->u.freq.m) * pow( 10.0, we->u.freq.e )); break; } @@ -1139,8 +1150,25 @@ OStationList* OWirelessNetworkInterface::scanNetwork() break; } + case IWEVQUAL: + { + odebug << "IWEVQUAL" << oendl; + stations->last()->level = static_cast<int>(we->u.qual.level); + break; /* Quality part of statistics (scan) */ + } + case SIOCGIWENCODE: + { + odebug << "SIOCGIWENCODE" << oendl; + stations->last()->encrypted = !(we->u.data.flags & IW_ENCODE_DISABLED); + break; + } + + case SIOCGIWRATE: + { + odebug << "SIOCGIWRATE" << oendl; + stations->last()->rates.append(we->u.bitrate.value); + break; + } case SIOCGIWSENS: odebug << "SIOCGIWSENS" << oendl; break; - case SIOCGIWENCODE: odebug << "SIOCGIWENCODE" << oendl; break; case IWEVTXDROP: odebug << "IWEVTXDROP" << oendl; break; /* Packet dropped to excessive retry */ - case IWEVQUAL: odebug << "IWEVQUAL" << oendl; break; /* Quality part of statistics (scan) */ case IWEVCUSTOM: odebug << "IWEVCUSTOM" << oendl; break; /* Driver specific ascii string */ case IWEVREGISTERED: odebug << "IWEVREGISTERED" << oendl; break; /* Discovered a new node (AP mode) */ diff --git a/libopie2/opienet/onetwork.h b/libopie2/opienet/onetwork.h index 4d9912d..fa9f39f 100644 --- a/libopie2/opienet/onetwork.h +++ b/libopie2/opienet/onetwork.h @@ -414,4 +414,7 @@ class OWirelessNetworkInterface : public ONetworkInterface */ virtual bool isAssociated() const; + /** Set the @a mac associated AP address. + */ + virtual void setAssociatedAP( const OMacAddress& mac ) const; /** * @returns the MAC address of the Access Point if the device is in infrastructure mode. diff --git a/libopie2/opienet/ostation.h b/libopie2/opienet/ostation.h index 5219d92..86c9a52 100644 --- a/libopie2/opienet/ostation.h +++ b/libopie2/opienet/ostation.h @@ -38,4 +38,5 @@ #include <qhostaddress.h> #include <qobject.h> +#include <qvaluelist.h> #include <sys/types.h> @@ -72,4 +73,5 @@ class OStation int level; bool encrypted; + QValueList <int> rates; private: class Private; |