/*************************************************************************** * * tdenetman-wireless_network.cpp - A NetworkManager frontend for TDE * * Copyright (C) 2005, 2006 Novell, Inc. * * Author: Helmut Schaa , * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * **************************************************************************/ // TDENM includes #include "tdenetman.h" #include "tdenetman-wireless_network.h" // TDE includes #include // TQt includes #include #include class WirelessNetworkPrivate { public: WirelessNetworkPrivate() : active(false) { } ~WirelessNetworkPrivate() { } bool active; TQ_UINT32 match; TQMap aps; }; WirelessNetwork::WirelessNetwork(const WirelessNetwork& other) { hwdevices = TDEGlobal::hardwareDevices(); d = new WirelessNetworkPrivate(*other.d); } WirelessNetwork::WirelessNetwork(TQ_UINT32 match) { hwdevices = TDEGlobal::hardwareDevices(); d = new WirelessNetworkPrivate(); // which attributes have to match d->match = match; } WirelessNetwork::~WirelessNetwork() { delete d; } WirelessNetwork& WirelessNetwork::operator= (const WirelessNetwork& other) { if (d) { delete d; } d = new WirelessNetworkPrivate(*other.d); return *this; } bool WirelessNetwork::contains(const TDEMACAddress ap) { TDEGlobalNetworkManager* nm = TDEGlobal::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; } // AP matches return true; } bool WirelessNetwork::addAP(const TDEMACAddress ap, const TQString dev) { if ( this->contains(ap) || d->aps.isEmpty()) { d->aps[ap] = dev; return true; } return false; } const TQByteArray WirelessNetwork::getSsid() const { TDEGlobalNetworkManager* nm = TDEGlobal::networkManager(); if ( !d->aps.isEmpty() ) { 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(); } } TQString WirelessNetwork::getDisplaySsid() const { TDEGlobalNetworkManager* nm = TDEGlobal::networkManager(); if (!d->aps.isEmpty()) { 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(); } } TDENetworkWiFiAPFlags::TDENetworkWiFiAPFlags WirelessNetwork::getFlags() const { TDEGlobalNetworkManager* nm = TDEGlobal::networkManager(); TDENetworkWiFiAPFlags::TDENetworkWiFiAPFlags flags = TDENetworkWiFiAPFlags::None; 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 { TDEGlobalNetworkManager* nm = TDEGlobal::networkManager(); TDENetworkWiFiAPFlags::TDENetworkWiFiAPFlags flags = TDENetworkWiFiAPFlags::None; 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::EncryptionFlagsMask); } } return flags; } TDENetworkWiFiAPFlags::TDENetworkWiFiAPFlags WirelessNetwork::getRsnFlags() const { TDEGlobalNetworkManager* nm = TDEGlobal::networkManager(); TDENetworkWiFiAPFlags::TDENetworkWiFiAPFlags flags = TDENetworkWiFiAPFlags::None; 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->rsnFlags & TDENetworkWiFiAPFlags::EncryptionFlagsMask); } } return flags; } bool WirelessNetwork::isEncrypted() const { return (getFlags() & TDENetworkWiFiAPFlags::PrivacySupport); } TQ_UINT8 WirelessNetwork::getStrength() const { TDEGlobalNetworkManager* nm = TDEGlobal::networkManager(); TQ_UINT8 strength = 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; } void WirelessNetwork::setActive(bool a) { d->active=a; } bool WirelessNetwork::getActive() const { return d->active; }