From 69038478ebe36615fb749e82ee625a131416fe0c Mon Sep 17 00:00:00 2001 From: Timothy Pearson Date: Sat, 8 Sep 2012 23:54:40 -0500 Subject: [PATCH] Use BSSID instead of storing APInfo pointers internally --- ...ction_setting_wireless_security_widget.cpp | 2 +- .../src/tdenetman-wireless_manager.cpp | 6 +- .../src/tdenetman-wireless_network.cpp | 154 +++++++++++++++--- .../src/tdenetman-wireless_network.h | 4 +- 4 files changed, 141 insertions(+), 25 deletions(-) diff --git a/tdenetworkmanager/src/configwidgets/tdenetman-connection_setting_wireless_security_widget.cpp b/tdenetworkmanager/src/configwidgets/tdenetman-connection_setting_wireless_security_widget.cpp index bd4b593..654d1f8 100644 --- a/tdenetworkmanager/src/configwidgets/tdenetman-connection_setting_wireless_security_widget.cpp +++ b/tdenetworkmanager/src/configwidgets/tdenetman-connection_setting_wireless_security_widget.cpp @@ -121,7 +121,7 @@ WirelessSecurityWEPImpl::WirelessSecurityWEPImpl(TDEWiFiConnection* sec, TQWidge void WirelessSecurityWEPImpl::slotAuthAlgChanged(int index) { if (index == 0) { - _security_setting->securitySettings.authType =TDENetworkWiFiAuthType::Open; + _security_setting->securitySettings.authType = TDENetworkWiFiAuthType::Open; } else if (index == 1) { _security_setting->securitySettings.authType = TDENetworkWiFiAuthType::Shared; diff --git a/tdenetworkmanager/src/tdenetman-wireless_manager.cpp b/tdenetworkmanager/src/tdenetman-wireless_manager.cpp index 6a9b28c..747fc04 100644 --- a/tdenetworkmanager/src/tdenetman-wireless_manager.cpp +++ b/tdenetworkmanager/src/tdenetman-wireless_manager.cpp @@ -49,12 +49,12 @@ TQValueList WirelessManager::getWirelessNetworks(TDENetworkDevi // check if we have a network matching this AP for (TQValueList::Iterator netIt = nets.begin(); netIt != nets.end(); ++netIt) { - if ((*netIt).contains(ap) ) { + if ((*netIt).contains(ap->BSSID) ) { // we alread have a network where this AP belongs to found = true; // attach this ap to the network - (*netIt).addAP(ap); + (*netIt).addAP(ap->BSSID, (dev)?dev->uniqueID():TQString::null); /* // FIXME active? if (active_ap) @@ -70,7 +70,7 @@ TQValueList WirelessManager::getWirelessNetworks(TDENetworkDevi if (!found) { // create a new network-descriptor according to this ap WirelessNetwork net(match); - net.addAP(ap); + net.addAP(ap->BSSID, (dev)?dev->uniqueID():TQString::null); nets.append(net); } } diff --git a/tdenetworkmanager/src/tdenetman-wireless_network.cpp b/tdenetworkmanager/src/tdenetman-wireless_network.cpp index d3105df..5e6770b 100644 --- a/tdenetworkmanager/src/tdenetman-wireless_network.cpp +++ b/tdenetworkmanager/src/tdenetman-wireless_network.cpp @@ -48,7 +48,7 @@ class WirelessNetworkPrivate bool active; TQ_UINT32 match; - TQValueList aps; + TQMap aps; }; WirelessNetwork::WirelessNetwork(const WirelessNetwork& other) @@ -71,15 +71,35 @@ WirelessNetwork::~WirelessNetwork() WirelessNetwork& WirelessNetwork::operator= (const WirelessNetwork& other) { - if (d) + if (d) { delete d; + } d = new WirelessNetworkPrivate(*other.d); return *this; } -bool WirelessNetwork::contains (const TDENetworkWiFiAPInfo * const ap) +bool WirelessNetwork::contains(const TDEMACAddress ap) { - if ( (d->match & MATCH_SSID) && getSsid() != ap->SSID) { + TDEHardwareDevices* hwdevices = KGlobal::hardwareDevices(); + TDEGlobalNetworkManager* nm = KGlobal::networkManager(); + + TDENetworkDevice* dev = dynamic_cast(hwdevices->findByUniqueID(d->aps[ap])); + TDENetworkWiFiAPInfo* apInfo = NULL; + if (dev) { + TDENetworkConnectionManager* deviceConnMan = dev->connectionManager(); + apInfo = deviceConnMan->findAccessPointByBSSID(ap); + } + else if (d->aps[ap] == "") { + apInfo = nm->findAccessPointByBSSID(ap); + } + + if (apInfo) { + if ( (d->match & MATCH_SSID) && (getSsid() != apInfo->SSID)) { + return false; + } + } + else { + // AP was not found in list return false; } @@ -87,10 +107,10 @@ bool WirelessNetwork::contains (const TDENetworkWiFiAPInfo * const ap) return true; } -bool WirelessNetwork::addAP(const TDENetworkWiFiAPInfo * const ap) +bool WirelessNetwork::addAP(const TDEMACAddress ap, const TQString dev) { - if ( this->contains( ap ) || d->aps.isEmpty()) { - d->aps.append(ap); + if ( this->contains(ap) || d->aps.isEmpty()) { + d->aps[ap] = dev; return true; } return false; @@ -98,8 +118,26 @@ bool WirelessNetwork::addAP(const TDENetworkWiFiAPInfo * const ap) const TQByteArray WirelessNetwork::getSsid() const { + TDEHardwareDevices* hwdevices = KGlobal::hardwareDevices(); + TDEGlobalNetworkManager* nm = KGlobal::networkManager(); + if ( !d->aps.isEmpty() ) { - return (*(d->aps.begin()))->SSID; + TDENetworkDevice* dev = dynamic_cast(hwdevices->findByUniqueID(d->aps.begin().data())); + TDENetworkWiFiAPInfo* apInfo = NULL; + if (dev) { + TDENetworkConnectionManager* deviceConnMan = dev->connectionManager(); + apInfo = deviceConnMan->findAccessPointByBSSID(d->aps.begin().key()); + } + else if (d->aps.begin().data() == "") { + apInfo = nm->findAccessPointByBSSID(d->aps.begin().key()); + } + + if (apInfo) { + return apInfo->SSID; + } + else { + return TQByteArray(); + } } else { return TQByteArray(); @@ -108,8 +146,26 @@ const TQByteArray WirelessNetwork::getSsid() const TQString WirelessNetwork::getDisplaySsid() const { + TDEHardwareDevices* hwdevices = KGlobal::hardwareDevices(); + TDEGlobalNetworkManager* nm = KGlobal::networkManager(); + if (!d->aps.isEmpty()) { - return (*(d->aps.begin()))->friendlySSID(); + TDENetworkDevice* dev = dynamic_cast(hwdevices->findByUniqueID(d->aps.begin().data())); + TDENetworkWiFiAPInfo* apInfo = NULL; + if (dev) { + TDENetworkConnectionManager* deviceConnMan = dev->connectionManager(); + apInfo = deviceConnMan->findAccessPointByBSSID(d->aps.begin().key()); + } + else if (d->aps.begin().data() == "") { + apInfo = nm->findAccessPointByBSSID(d->aps.begin().key()); + } + + if (apInfo) { + return apInfo->friendlySSID(); + } + else { + return TQString(); + } } else { return TQString(); @@ -118,30 +174,75 @@ TQString WirelessNetwork::getDisplaySsid() const TDENetworkWiFiAPFlags::TDENetworkWiFiAPFlags WirelessNetwork::getFlags() const { + TDEHardwareDevices* hwdevices = KGlobal::hardwareDevices(); + TDEGlobalNetworkManager* nm = KGlobal::networkManager(); + TDENetworkWiFiAPFlags::TDENetworkWiFiAPFlags flags = TDENetworkWiFiAPFlags::None; - for (TQValueList::Iterator it = d->aps.begin(); it != d->aps.end(); ++it) { - flags |= ((*it)->wpaFlags & TDENetworkWiFiAPFlags::GeneralFlagsMask); - flags |= ((*it)->rsnFlags & TDENetworkWiFiAPFlags::GeneralFlagsMask); + for (TQMap::Iterator it = d->aps.begin(); it != d->aps.end(); ++it) { + TDENetworkDevice* dev = dynamic_cast(hwdevices->findByUniqueID(it.data())); + TDENetworkWiFiAPInfo* apInfo = NULL; + if (dev) { + TDENetworkConnectionManager* deviceConnMan = dev->connectionManager(); + apInfo = deviceConnMan->findAccessPointByBSSID(it.key()); + } + else if (it.data() == "") { + apInfo = nm->findAccessPointByBSSID(it.key()); + } + + if (apInfo) { + flags |= (apInfo->wpaFlags & TDENetworkWiFiAPFlags::GeneralFlagsMask); + flags |= (apInfo->rsnFlags & TDENetworkWiFiAPFlags::GeneralFlagsMask); + } } return flags; } TDENetworkWiFiAPFlags::TDENetworkWiFiAPFlags WirelessNetwork::getWpaFlags() const { + TDEHardwareDevices* hwdevices = KGlobal::hardwareDevices(); + TDEGlobalNetworkManager* nm = KGlobal::networkManager(); + TDENetworkWiFiAPFlags::TDENetworkWiFiAPFlags flags = TDENetworkWiFiAPFlags::None; - for (TQValueList::Iterator it = d->aps.begin(); it != d->aps.end(); ++it) + for (TQMap::Iterator it = d->aps.begin(); it != d->aps.end(); ++it) { - flags |= ((*it)->wpaFlags & TDENetworkWiFiAPFlags::EncryptionFlagsMask); + TDENetworkDevice* dev = dynamic_cast(hwdevices->findByUniqueID(it.data())); + TDENetworkWiFiAPInfo* apInfo = NULL; + if (dev) { + TDENetworkConnectionManager* deviceConnMan = dev->connectionManager(); + apInfo = deviceConnMan->findAccessPointByBSSID(it.key()); + } + else if (it.data() == "") { + apInfo = nm->findAccessPointByBSSID(it.key()); + } + + if (apInfo) { + flags |= (apInfo->wpaFlags & TDENetworkWiFiAPFlags::EncryptionFlagsMask); + } } return flags; } TDENetworkWiFiAPFlags::TDENetworkWiFiAPFlags WirelessNetwork::getRsnFlags() const { + TDEHardwareDevices* hwdevices = KGlobal::hardwareDevices(); + TDEGlobalNetworkManager* nm = KGlobal::networkManager(); + TDENetworkWiFiAPFlags::TDENetworkWiFiAPFlags flags = TDENetworkWiFiAPFlags::None; - for (TQValueList::Iterator it = d->aps.begin(); it != d->aps.end(); ++it) + for (TQMap::Iterator it = d->aps.begin(); it != d->aps.end(); ++it) { - flags |= ((*it)->rsnFlags & TDENetworkWiFiAPFlags::EncryptionFlagsMask); + TDENetworkDevice* dev = dynamic_cast(hwdevices->findByUniqueID(it.data())); + TDENetworkWiFiAPInfo* apInfo = NULL; + if (dev) { + TDENetworkConnectionManager* deviceConnMan = dev->connectionManager(); + apInfo = deviceConnMan->findAccessPointByBSSID(it.key()); + } + else if (it.data() == "") { + apInfo = nm->findAccessPointByBSSID(it.key()); + } + + if (apInfo) { + flags |= (apInfo->rsnFlags & TDENetworkWiFiAPFlags::EncryptionFlagsMask); + } } return flags; } @@ -153,10 +254,25 @@ bool WirelessNetwork::isEncrypted() const TQ_UINT8 WirelessNetwork::getStrength() const { + TDEHardwareDevices* hwdevices = KGlobal::hardwareDevices(); + TDEGlobalNetworkManager* nm = KGlobal::networkManager(); + TQ_UINT8 strength = 0; - for (TQValueList::Iterator it = d->aps.begin(); it != d->aps.end(); ++it) { - if (((*it)->signalQuality*100.0) > strength) { - strength = ((*it)->signalQuality*100.0); + for (TQMap::Iterator it = d->aps.begin(); it != d->aps.end(); ++it) { + TDENetworkDevice* dev = dynamic_cast(hwdevices->findByUniqueID(it.data())); + TDENetworkWiFiAPInfo* apInfo = NULL; + if (dev) { + TDENetworkConnectionManager* deviceConnMan = dev->connectionManager(); + apInfo = deviceConnMan->findAccessPointByBSSID(it.key()); + } + else if (it.data() == "") { + apInfo = nm->findAccessPointByBSSID(it.key()); + } + + if (apInfo) { + if ((apInfo->signalQuality*100.0) > strength) { + strength = (apInfo->signalQuality*100.0); + } } } return strength; diff --git a/tdenetworkmanager/src/tdenetman-wireless_network.h b/tdenetworkmanager/src/tdenetman-wireless_network.h index 8ace658..473dbb6 100644 --- a/tdenetworkmanager/src/tdenetman-wireless_network.h +++ b/tdenetworkmanager/src/tdenetman-wireless_network.h @@ -57,10 +57,10 @@ class WirelessNetwork WirelessNetwork& operator= (const WirelessNetwork&); // check if the AccessPoint represents the same net - bool contains(const TDENetworkWiFiAPInfo * const); + bool contains(const TDEMACAddress); // add an AP to the Network - bool addAP(const TDENetworkWiFiAPInfo * const); + bool addAP(const TDEMACAddress, const TQString); // combined flags of all APs TDENetworkWiFiAPFlags::TDENetworkWiFiAPFlags getFlags() const;