/*************************************************************************** * * tdenetman-wireless_manager.cpp - A NetworkManager frontend for KDE * * 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 * **************************************************************************/ // other includes #include // KNM includes #include "tdenetman-wireless_manager.h" TQValueList WirelessManager::getWirelessNetworks(TDENetworkDevice* dev, TQ_UINT32 match) { TQValueList nets; TQValueList aps; // fetch all APs aps = WirelessManager::getAccessPoints(dev); // now group the APs together according to their security settings for (TQValueList::Iterator apit = aps.begin(); apit != aps.end(); ++apit) { bool found = false; // no hidden APs TDENetworkWiFiAPInfo * ap = *apit; if ( ap ) { if (ap->SSID.count() == 0) { continue; } // check if we have a network matching this AP for (TQValueList::Iterator netIt = nets.begin(); netIt != nets.end(); ++netIt) { if ((*netIt).contains(ap) ) { // we alread have a network where this AP belongs to found = true; // attach this ap to the network (*netIt).addAP(ap); /* // FIXME active? if (active_ap) { // here is the active_ap if (!(*net).getActive() && ((*ap) == *active_ap)) (*net).setActive(true); }*/ break; } } if (!found) { // create a new network-descriptor according to this ap WirelessNetwork net(match); net.addAP(ap); nets.append(net); } } } return nets; } TQValueList internalGetAccessPoints(TDENetworkDevice* dev) { TQValueList list; if (dev) { TDENetworkConnectionManager* deviceConnMan = dev->connectionManager(); TDENetworkHWNeighbor* neighbor; TDENetworkHWNeighborList* neighbors = deviceConnMan->siteSurvey(); for (neighbor = neighbors->first(); neighbor; neighbor = neighbors->next()) { TDENetworkWiFiAPInfo* apInfo = dynamic_cast(neighbor); if (!apInfo) { continue; } list.append(apInfo); } } return list; } TQValueList WirelessManager::getAccessPoints(TDENetworkDevice* dev) { // build up AP list depending on one device or on all devices if (dev) { return internalGetAccessPoints(dev); } else { TQValueList aps; TDEHardwareDevices *hwdevices = KGlobal::hardwareDevices(); if (hwdevices) { TDEGenericHardwareList devices = hwdevices->listByDeviceClass(TDEGenericDeviceType::Network); for (TDEGenericHardwareList::iterator it = devices.begin(); it != devices.end(); ++it) { TDENetworkDevice* wdev = dynamic_cast(*it); if (wdev) { aps += internalGetAccessPoints(wdev); } } } return aps; } } TQValueList WirelessManager::getWirelessConnections() { TQValueList conns; TDEGlobalNetworkManager* nm = KGlobal::networkManager(); if (nm) { // get all wireless connections TDENetworkConnectionList* allconmap = nm->connections(); for (TDENetworkConnectionList::Iterator it = allconmap->begin(); it != allconmap->end(); ++it) { TDEWiFiConnection* wireless_conn = dynamic_cast(*it); if (!wireless_conn) { continue; } conns.append(wireless_conn); } } return conns; } TQValueList internalGetAccessPointsWithESSID(TQByteArray essid, TDENetworkDevice* dev) { TQValueList list; if (dev) { TDENetworkConnectionManager* deviceConnMan = dev->connectionManager(); TDENetworkHWNeighbor* neighbor; TDENetworkHWNeighborList* neighbors = deviceConnMan->siteSurvey(); for (neighbor = neighbors->first(); neighbor; neighbor = neighbors->next()) { TDENetworkWiFiAPInfo* apInfo = dynamic_cast(neighbor); if (!apInfo) { continue; } if (apInfo->SSID == essid) { list.append(apInfo); } } } return list; } TQValueList WirelessManager::getAccessPointsForEssid(TQByteArray essid, TDENetworkDevice* dev) { // build up AP list depending on one device or on all devices if (dev) { return internalGetAccessPointsWithESSID(essid, dev); } else { TQValueList aps; TDEHardwareDevices *hwdevices = KGlobal::hardwareDevices(); if (hwdevices) { TDEGenericHardwareList devices = hwdevices->listByDeviceClass(TDEGenericDeviceType::Network); for (TDEGenericHardwareList::iterator it = devices.begin(); it != devices.end(); ++it) { TDENetworkDevice* wdev = dynamic_cast(*it); if (wdev) { aps += internalGetAccessPointsWithESSID(essid, wdev); } } } return aps; } }