diff -r 885c2596c964 -r 5d007b20cfd0 qtmobility/src/bearer/qnmwifiengine_unix.cpp --- a/qtmobility/src/bearer/qnmwifiengine_unix.cpp Thu Aug 19 10:43:30 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,839 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Mobility Components. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qnmwifiengine_unix_p.h" -#include "qnetworkconfiguration_p.h" -#include - -#include -#include - -#include -#include - -#include - -QTM_BEGIN_NAMESPACE -Q_GLOBAL_STATIC(QNmWifiEngine, nmWifiEngine) -typedef QList > QNmSettingsAddressMap; -QTM_END_NAMESPACE - -Q_DECLARE_METATYPE(QTM_PREPEND_NAMESPACE(QNmSettingsAddressMap)) - -QTM_BEGIN_NAMESPACE - -QNmWifiEngine::QNmWifiEngine(QObject *parent) -: QNetworkSessionEngine(parent) -{ - iface = new QNetworkManagerInterface(this); - if(!iface->isValid()) { - return; - } - iface->setConnections(); - connect(iface,SIGNAL(deviceAdded(QDBusObjectPath)), - this,SLOT(addDevice(QDBusObjectPath))); -// connect(iface,SIGNAL(deviceRemoved(QDBusObjectPath)), -// this,SLOT(removeDevice(QDBusObjectPath))); - connect(iface, SIGNAL(activationFinished(QDBusPendingCallWatcher*)), - this, SLOT(slotActivationFinished(QDBusPendingCallWatcher*))); - - foreach (const QDBusObjectPath &path, iface->getDevices()) - addDevice(path); - - QStringList connectionServices; - connectionServices << NM_DBUS_SERVICE_SYSTEM_SETTINGS; - connectionServices << NM_DBUS_SERVICE_USER_SETTINGS; - QNetworkManagerSettings *settingsiface; - foreach (const QString &service, connectionServices) { - settingsiface = new QNetworkManagerSettings(service, this); - settingsiface->setConnections(); - connect(settingsiface,SIGNAL(newConnection(QDBusObjectPath)), - this,(SLOT(newConnection(QDBusObjectPath)))); - } - - updated = false; -} - -QNmWifiEngine::~QNmWifiEngine() -{ -} - -QString QNmWifiEngine::getNameForConfiguration(QNetworkManagerInterfaceDevice *devIface) -{ - QString newname; - if (devIface->state() == NM_DEVICE_STATE_ACTIVATED) { - QString path = devIface->ip4config().path(); - QNetworkManagerIp4Config * ipIface; - ipIface = new QNetworkManagerIp4Config(path); - newname = ipIface->domains().join(" "); - delete ipIface; - } - //fallback to interface name - if(newname.isEmpty()) - newname = devIface->networkInterface().name(); - return newname; -} - - -QList QNmWifiEngine::getConfigurations(bool *ok) -{ - if (ok) - *ok = false; - - if(!updated) { - foundConfigurations.clear(); - if(knownSsids.isEmpty()) - updateKnownSsids(); - - scanForAccessPoints(); - updateActiveConnectionsPaths(); - knownConnections(); - - accessPointConnections(); - - updated = true; - } - return foundConfigurations; -} - -void QNmWifiEngine::knownConnections() -{ - QStringList connectionServices; - connectionServices << NM_DBUS_SERVICE_SYSTEM_SETTINGS; - connectionServices << NM_DBUS_SERVICE_USER_SETTINGS; - - QString connPath; - - QScopedPointer settingsiface; - foreach (const QString &service, connectionServices) { - QString ident; - settingsiface.reset(new QNetworkManagerSettings(service)); - - QNetworkManagerSettingsConnection *sysIface; - foreach (const QDBusObjectPath &path, settingsiface->listConnections()) { - ident = path.path(); - bool addIt = false; - QNetworkConfigurationPrivate* cpPriv = new QNetworkConfigurationPrivate(); - sysIface = new QNetworkManagerSettingsConnection(service, path.path(), this); - sysIface->setConnections(); - connect(sysIface, SIGNAL(removed(QString)), - this,SLOT(settingsConnectionRemoved(QString))); - - cpPriv->name = sysIface->getId(); - cpPriv->isValid = true; - cpPriv->id = sysIface->getUuid(); - cpPriv->internet = true; - cpPriv->type = QNetworkConfiguration::InternetAccessPoint; - cpPriv->state = getStateForId(cpPriv->id); - - cpPriv->purpose = QNetworkConfiguration::PrivatePurpose; - - - if(sysIface->getType() == DEVICE_TYPE_802_3_ETHERNET) { - QString mac = sysIface->getMacAddress(); - if(!mac.length() > 2) { - QString devPath; - devPath = deviceConnectionPath(mac); - - QNetworkManagerInterfaceDevice devIface(devPath); - cpPriv->serviceInterface = devIface.networkInterface(); - QScopedPointer devWiredIface; - devWiredIface.reset(new QNetworkManagerInterfaceDeviceWired(devIface.connectionInterface()->path())); - cpPriv->internet = devWiredIface->carrier(); - - // use this mac addy - } else { - cpPriv->serviceInterface = getBestInterface( DEVICE_TYPE_802_3_ETHERNET, cpPriv->id); - } - - cpPriv->internet = true; - - addIt = true; - } else if(sysIface->getType() == DEVICE_TYPE_802_11_WIRELESS) { - QString mac = sysIface->getMacAddress();; - if(!mac.length() > 2) { - QString devPath; - devPath = deviceConnectionPath(mac); - - QNetworkManagerInterfaceDevice devIface(devPath); - cpPriv->serviceInterface = devIface.networkInterface(); - // use this mac addy - } else { - cpPriv->serviceInterface = getBestInterface( DEVICE_TYPE_802_11_WIRELESS, cpPriv->id); - } - addIt = true; - // get the wifi interface state first.. do we need this? - // QString activeAPPath = devWirelessIface->activeAccessPoint().path(); - } - if(addIt) { - foundConfigurations.append(cpPriv); - configurationInterface[cpPriv->id] = cpPriv->serviceInterface.name(); - cpPriv->bearer = bearerName(cpPriv->id); - } - } - } -} - -void QNmWifiEngine::accessPointConnections() -{ - QScopedPointer devIface; - foreach (const QDBusObjectPath &path, iface->getDevices()) { - devIface.reset(new QNetworkManagerInterfaceDevice(path.path())); - if(devIface->deviceType() == DEVICE_TYPE_802_11_WIRELESS) { - const QList apList = availableAccessPoints.uniqueKeys(); - - QList::const_iterator i; - for (i = apList.constBegin(); i != apList.constEnd(); ++i) { - QNetworkConfigurationPrivate* cpPriv; - cpPriv = addAccessPoint( devIface->connectionInterface()->path(), availableAccessPoints[*i]); - if(cpPriv->isValid) { - foundConfigurations.append(cpPriv); - configurationInterface[cpPriv->id] = cpPriv->serviceInterface.name(); - cpPriv->bearer = bearerName(cpPriv->id); - } - } - } - } -} - -QString QNmWifiEngine::getInterfaceFromId(const QString &id) -{ - return configurationInterface.value(id); -} - -bool QNmWifiEngine::hasIdentifier(const QString &id) -{ - if (configurationInterface.contains(id)) - return true; - - return false; -} - -QString QNmWifiEngine::bearerName(const QString &id) -{ - QString interface = getInterfaceFromId(id); - QScopedPointer devIface; - foreach (const QDBusObjectPath &path, iface->getDevices()) { - devIface.reset(new QNetworkManagerInterfaceDevice(path.path())); - - if(interface == devIface->networkInterface().name()) { - - switch(devIface->deviceType()) { - case DEVICE_TYPE_802_3_ETHERNET: - return QLatin1String("Ethernet"); - break; - case DEVICE_TYPE_802_11_WIRELESS: - return QLatin1String("WLAN"); - break; - case DEVICE_TYPE_GSM: - return QLatin1String("2G"); - break; - case DEVICE_TYPE_CDMA: - return QLatin1String("CDMA2000"); - break; - default: - break; - } - } - } - return QLatin1String("Unknown"); -} - -void QNmWifiEngine::connectToId(const QString &id) -{ - activatingConnectionPath = id; - QStringList connectionSettings = getConnectionPathForId(id); - if(connectionSettings.isEmpty()) { - emit connectionError(id, OperationNotSupported); - return; - } - - QDBusObjectPath connectionPath(connectionSettings.at(1)); - QString interface = getInterfaceFromId(id); - - interface = QNetworkInterface::interfaceFromName(interface).hardwareAddress().toLower(); - QString devPath; - devPath = deviceConnectionPath(interface); - QDBusObjectPath devicePath(devPath); - - iface->activateConnection( - connectionSettings.at(0), - connectionPath, - devicePath, - connectionPath); -} - -void QNmWifiEngine::disconnectFromId(const QString &id) -{ - QString activeConnectionPath = getActiveConnectionPath(id); - - if (!activeConnectionPath.isEmpty()) { - QScopedPointer activeCon; - activeCon.reset(new QNetworkManagerConnectionActive(activeConnectionPath)); - QScopedPointer settingsCon; - settingsCon.reset(new QNetworkManagerSettingsConnection(activeCon->serviceName(), activeCon->connection().path())); - - if(settingsCon->getType() == DEVICE_TYPE_802_3_ETHERNET) { //use depreciated value for now - emit connectionError(id, OperationNotSupported); - } else { - QDBusObjectPath dbpath(activeConnectionPath); - iface->deactivateConnection(dbpath); - activatingConnectionPath = ""; - } - } -} - -void QNmWifiEngine::requestUpdate() -{ - updated = false; - knownSsids.clear(); - availableAccessPoints.clear(); - emitConfigurationsChanged(); -} - -QNmWifiEngine *QNmWifiEngine::instance() -{ - QDBusConnection dbusConnection = QDBusConnection::systemBus(); - if (dbusConnection.isConnected()) { - QDBusConnectionInterface *dbiface = dbusConnection.interface(); - QDBusReply reply = dbiface->isServiceRegistered("org.freedesktop.NetworkManager"); - if (reply.isValid() && reply.value()) - return nmWifiEngine(); - } - - return 0; -} - -void QNmWifiEngine::updateKnownSsids() -{ - QStringList connectionServices; - connectionServices << NM_DBUS_SERVICE_SYSTEM_SETTINGS; - connectionServices << NM_DBUS_SERVICE_USER_SETTINGS; - - QScopedPointer settingsiface; - foreach (const QString &service, connectionServices) { - settingsiface.reset(new QNetworkManagerSettings(service)); - foreach (const QDBusObjectPath &path, settingsiface->listConnections()) { - QNetworkManagerSettingsConnection sysIface(service, path.path()); - knownSsids << sysIface.getSsid(); - } - } -} - -void QNmWifiEngine::updateActiveConnectionsPaths() -{ //need to know which connection paths are currently active/connected - QScopedPointer dbIface; - activeConnectionPaths.clear(); - dbIface.reset(new QNetworkManagerInterface); - foreach (const QDBusObjectPath &conpath, dbIface->activeConnections()) - activeConnectionPaths << conpath.path(); -} - -QNetworkConfigurationPrivate * QNmWifiEngine::addAccessPoint( const QString &iPath, QDBusObjectPath path) -{ - - QScopedPointer devIface(new QNetworkManagerInterfaceDevice(iPath)); - QScopedPointer devWirelessIface(new QNetworkManagerInterfaceDeviceWireless(iPath)); - - QString activeAPPath = devWirelessIface->activeAccessPoint().path(); - - QScopedPointer accessPointIface(new QNetworkManagerInterfaceAccessPoint(path.path())); - - QString ident = accessPointIface->connectionInterface()->path(); - quint32 nmState = devIface->state(); - - QString ssid = accessPointIface->ssid(); - QString hwAddy = accessPointIface->hwAddress(); - QString sInterface = devIface->networkInterface().name(); - - QNetworkConfigurationPrivate* cpPriv = new QNetworkConfigurationPrivate(); - bool addIt = true; - - if(addIt) { - - cpPriv->name = ssid; - cpPriv->isValid = true; - cpPriv->id = ident; - cpPriv->internet = true; - cpPriv->type = QNetworkConfiguration::InternetAccessPoint; - cpPriv->serviceInterface = devIface->networkInterface(); - - cpPriv->state = getAPState(nmState, knownSsids.contains(cpPriv->name)); - - if(activeAPPath == accessPointIface->connectionInterface()->path()) { - cpPriv->state = ( cpPriv->state | QNetworkConfiguration::Active); - } - if(accessPointIface->flags() == NM_802_11_AP_FLAGS_PRIVACY) - cpPriv->purpose = QNetworkConfiguration::PrivatePurpose; - else - cpPriv->purpose = QNetworkConfiguration::PublicPurpose; - return cpPriv; - } else { - cpPriv->isValid = false; - } - return cpPriv; -} - - - QNetworkConfiguration::StateFlags QNmWifiEngine::getAPState(qint32 nmState, bool isKnown) -{ - QNetworkConfiguration::StateFlags state = QNetworkConfiguration::Undefined; - // this is the state of the wifi device interface - if(isKnown) - state = ( QNetworkConfiguration::Defined); - - switch(nmState) { //device interface state, not AP state - case NM_DEVICE_STATE_UNKNOWN: - case NM_DEVICE_STATE_UNMANAGED: - case NM_DEVICE_STATE_UNAVAILABLE: - state = (QNetworkConfiguration::Undefined); - break; - case NM_DEVICE_STATE_DISCONNECTED: - { - if(isKnown) - state = ( state | QNetworkConfiguration::Discovered); - } - break; - case NM_DEVICE_STATE_PREPARE: - case NM_DEVICE_STATE_CONFIG: - case NM_DEVICE_STATE_NEED_AUTH: - case NM_DEVICE_STATE_IP_CONFIG: - if(isKnown) - state = ( state | QNetworkConfiguration::Discovered); - break; - case NM_DEVICE_STATE_ACTIVATED: - { - if(isKnown) - state = ( state | QNetworkConfiguration::Discovered); - } - break; - }; - return state; -} - -QString QNmWifiEngine::getActiveConnectionPath(const QString &id) -{ - QStringList connectionSettings = getConnectionPathForId(id); - QNetworkManagerInterface ifaceD; - QScopedPointer conDetailsD; - foreach (const QDBusObjectPath &path, ifaceD.activeConnections()) { - conDetailsD.reset(new QNetworkManagerConnectionActive( path.path())); - if(conDetailsD->connection().path() == connectionSettings.at(1) - && conDetailsD->serviceName() == connectionSettings.at(0)) - return path.path(); - } - return QString(); -} - - QNetworkConfiguration::StateFlags QNmWifiEngine::getStateFlag(quint32 nmstate) - { - QNetworkConfiguration::StateFlags flag; - switch (nmstate) { - case NM_DEVICE_STATE_UNKNOWN: - case NM_DEVICE_STATE_FAILED: - case NM_DEVICE_STATE_UNMANAGED: - flag = (QNetworkConfiguration::Undefined); - break; - case NM_DEVICE_STATE_PREPARE: - case NM_DEVICE_STATE_CONFIG: - case NM_DEVICE_STATE_NEED_AUTH: - case NM_DEVICE_STATE_IP_CONFIG: - case NM_DEVICE_STATE_UNAVAILABLE: - flag = (QNetworkConfiguration::Defined); - break; - case NM_DEVICE_STATE_DISCONNECTED: - flag = ( flag | QNetworkConfiguration::Discovered ); - break; - case NM_DEVICE_STATE_ACTIVATED: - { - flag = ( flag | QNetworkConfiguration::Discovered - | QNetworkConfiguration::Active ); - } - break; - default: - flag = ( QNetworkConfiguration::Defined); - break; - }; - return flag; - } - -void QNmWifiEngine::updateDeviceInterfaceState(const QString &/*path*/, quint32 nmState) -{ - if(nmState == NM_DEVICE_STATE_ACTIVATED - || nmState == NM_DEVICE_STATE_DISCONNECTED - || nmState == NM_DEVICE_STATE_UNAVAILABLE - || nmState == NM_DEVICE_STATE_FAILED) { - - QNetworkConfiguration::StateFlags state = (QNetworkConfiguration::Defined); - switch (nmState) { - case NM_DEVICE_STATE_UNKNOWN: - case NM_DEVICE_STATE_FAILED: - state = (QNetworkConfiguration::Undefined); - emit connectionError(activatingConnectionPath, ConnectError); - requestUpdate(); - break; - case NM_DEVICE_STATE_UNAVAILABLE: - state = (QNetworkConfiguration::Defined); - requestUpdate(); - break; - case NM_DEVICE_STATE_DISCONNECTED: - state = ( state | QNetworkConfiguration::Discovered ); - requestUpdate(); - break; - case NM_DEVICE_STATE_ACTIVATED: - { - state = ( state | QNetworkConfiguration::Discovered - | QNetworkConfiguration::Active ); - requestUpdate(); - } - break; - default: - state = ( QNetworkConfiguration::Defined); - break; - }; - } -} - -void QNmWifiEngine::addDevice(QDBusObjectPath path) -{ - QNetworkManagerInterfaceDevice *devIface = new QNetworkManagerInterfaceDevice(path.path(), this); - devIface->setConnections(); - connect(devIface,SIGNAL(stateChanged(const QString &, quint32)), - this, SLOT(updateDeviceInterfaceState(const QString&, quint32))); - - if(!devicePaths.contains(path.path())) - devicePaths << path.path(); - - switch(devIface->deviceType()) { - case DEVICE_TYPE_802_3_ETHERNET: - { - QNetworkManagerInterfaceDeviceWired * devWiredIface; - devWiredIface = new QNetworkManagerInterfaceDeviceWired(devIface->connectionInterface()->path(), this); - devWiredIface->setConnections(); - connect(devWiredIface, SIGNAL(propertiesChanged(const QString &,QMap)), - this,SLOT(cmpPropertiesChanged( const QString &, QMap))); - requestUpdate(); - } - break; - case DEVICE_TYPE_802_11_WIRELESS: - { - QNetworkManagerInterfaceDeviceWireless *devWirelessIface; - devWirelessIface = new QNetworkManagerInterfaceDeviceWireless(devIface->connectionInterface()->path(), this); - devWirelessIface->setConnections(); - - connect(devWirelessIface, SIGNAL(propertiesChanged(const QString &,QMap)), - this,SLOT(cmpPropertiesChanged( const QString &, QMap))); - - connect(devWirelessIface, SIGNAL(accessPointAdded(const QString &,QDBusObjectPath)), - this,SLOT(accessPointAdded(const QString &,QDBusObjectPath))); - - connect(devWirelessIface, SIGNAL(accessPointRemoved(const QString &,QDBusObjectPath)), - this,SLOT(accessPointRemoved(const QString &,QDBusObjectPath))); - requestUpdate(); - - } - break; - default: - break; - }; -} - -void QNmWifiEngine::cmpPropertiesChanged(const QString &path, QMap map) -{ - QMapIterator i(map); - while (i.hasNext()) { - i.next(); - if( i.key() == "State") { //only applies to device interfaces - updateDeviceInterfaceState(path, i.value().toUInt()); - } - if( i.key() == "ActiveAccessPoint") { - } - if( i.key() == "Carrier") { //someone got plugged in - } - } -} - -void QNmWifiEngine::accessPointRemoved( const QString &aPath, QDBusObjectPath /*oPath*/) -{ - if(aPath.contains("devices")) { - requestUpdate(); - } -} - -void QNmWifiEngine::accessPointAdded( const QString &/*aPath*/, QDBusObjectPath /*oPath*/) -{ - requestUpdate(); -} - -QNetworkConfiguration::StateFlags QNmWifiEngine::getStateForId(const QString &id) -{ - bool isAvailable = false; - QStringList conPath = getConnectionPathForId(id); - QString aconpath = getActiveConnectionPath(id); - - if(!aconpath.isEmpty()) { - //active connection - QNetworkManagerConnectionActive aConn(aconpath); - - QScopedPointer ifaceDevice; - QScopedPointer devWiredIface; - foreach (const QDBusObjectPath &dev, aConn.devices()) { - ifaceDevice.reset(new QNetworkManagerInterfaceDevice(dev.path())); - - if(ifaceDevice->deviceType() == DEVICE_TYPE_802_3_ETHERNET) { - - if(isAddressOfConnection(id, ifaceDevice->ip4Address())) { - // this is it! - return getStateFlag(ifaceDevice->state()); - } else { - continue; - } - - if(ifaceDevice->state() == NM_DEVICE_STATE_UNAVAILABLE || - ifaceDevice->state() == NM_DEVICE_STATE_DISCONNECTED) { - isAvailable = true; - - devWiredIface.reset(new QNetworkManagerInterfaceDeviceWired(ifaceDevice->connectionInterface()->path())); - if(!devWiredIface->carrier()) - return QNetworkConfiguration::Defined; - } - } else if(ifaceDevice->deviceType() == DEVICE_TYPE_802_11_WIRELESS) { - - } - - return getStateFlag(ifaceDevice->state()); - } - } else { - // not active - QScopedPointer sysIface; - sysIface.reset(new QNetworkManagerSettingsConnection(conPath.at(0),conPath.at(1))); - if(sysIface->isValid()) { - if(sysIface->getType() == DEVICE_TYPE_802_11_WIRELESS) { - QString ssid = sysIface->getSsid(); - bool ok = false; - - if(knownSsids.contains(ssid, Qt::CaseSensitive)) { - foreach (const QString &onessid, knownSsids) { - if(onessid == ssid && availableAccessPoints.contains(ssid)) { - ok = true; - break; - } - } - } - if(ok) - return getStateFlag(NM_DEVICE_STATE_DISCONNECTED); - else - return getStateFlag(NM_DEVICE_STATE_UNAVAILABLE); - } - } - } - - return QNetworkConfiguration::Defined; //not active, but we know this connection -} - -bool QNmWifiEngine::isAddressOfConnection(const QString &id, quint32 ipaddress) -{ - QStringList conPath = getConnectionPathForId(id); - QString aConPath = getActiveConnectionPath(id); - if(aConPath.isEmpty()) { - // not active - return false; - } - - QScopedPointer aConn; - aConn.reset(new QNetworkManagerConnectionActive(aConPath)); - QScopedPointer ifaceDevice; - foreach (const QDBusObjectPath &device, aConn->devices()) { - ifaceDevice.reset(new QNetworkManagerInterfaceDevice(device.path())); - if(ifaceDevice->ip4Address() == ipaddress) { - return true; - } - } - return false; -} - -QNetworkInterface QNmWifiEngine::getBestInterface( quint32 type, const QString &id) -{ - // check active connections first. - QStringList conIdPath = getConnectionPathForId(id); - - QNetworkInterface interface; - QScopedPointer aConn; - - foreach (const QString &conpath, activeConnectionPaths) { - aConn.reset(new QNetworkManagerConnectionActive(conpath)); - if(aConn->connection().path() == conIdPath.at(1) - && aConn->serviceName() == conIdPath.at(0)) { - - QList devs = aConn->devices(); - QNetworkManagerInterfaceDevice ifaceDevice(devs[0].path()); //just take the first one - return ifaceDevice.networkInterface(); - } - } - - //try guessing - QScopedPointer devIface; - foreach (const QDBusObjectPath &path, iface->getDevices()) { - devIface.reset(new QNetworkManagerInterfaceDevice(path.path())); - if(devIface->deviceType() == type ) { - if(devIface->state() == NM_DEVICE_STATE_DISCONNECTED) { - return devIface->networkInterface(); - } - } - } - return QNetworkInterface(); -} - -quint64 QNmWifiEngine::receivedDataForId(const QString &id) const -{ - if(configurationInterface.count() > 1) - return 0; - quint64 result = 0; - - QString devFile; - devFile = configurationInterface.value(id); - QFile rx("/sys/class/net/"+devFile+"/statistics/rx_bytes"); - if(rx.exists() && rx.open(QIODevice::ReadOnly | QIODevice::Text)) { - QTextStream in(&rx); - in >> result; - rx.close(); - } - return result; -} - -quint64 QNmWifiEngine::sentDataForId(const QString &id) const -{ - if(configurationInterface.count() > 1) - return 0; - quint64 result = 0; - QString devFile; - devFile = configurationInterface.value(id); - - QFile tx("/sys/class/net/"+devFile+"/statistics/tx_bytes"); - if(tx.exists() && tx.open(QIODevice::ReadOnly | QIODevice::Text)) { - QTextStream in(&tx); - in >> result; - tx.close(); - } - return result; -} - -void QNmWifiEngine::newConnection(QDBusObjectPath /*path*/) -{ - requestUpdate(); -} - -void QNmWifiEngine::settingsConnectionRemoved(const QString &/*path*/) -{ - requestUpdate(); -} - -void QNmWifiEngine::slotActivationFinished(QDBusPendingCallWatcher *openCall) -{ - QDBusPendingReply reply = *openCall; - if (reply.isError()) { - qWarning() <<"Error" << reply.error().name() << reply.error().message() - < devIface; - QScopedPointer devWirelessIface; - QScopedPointer accessPointIface; - foreach (const QDBusObjectPath &path, iface->getDevices()) { - devIface.reset(new QNetworkManagerInterfaceDevice(path.path())); - - if(devIface->deviceType() == DEVICE_TYPE_802_11_WIRELESS) { - - devWirelessIface.reset(new QNetworkManagerInterfaceDeviceWireless(devIface->connectionInterface()->path())); - ////////////// AccessPoints - - foreach (const QDBusObjectPath &path, devWirelessIface->getAccessPoints()) { - accessPointIface.reset(new QNetworkManagerInterfaceAccessPoint(path.path())); - const QString ssid = accessPointIface->ssid(); - availableAccessPoints.insert(ssid, path); - } - } - } -} - -QString QNmWifiEngine::deviceConnectionPath(const QString &mac) -{ - QString newMac = mac.toLower(); - newMac.replace(QLatin1Char(':'), QLatin1Char('_')); - //device object path might not contain just mac address - //might contain extra numbers on the end. thanks HAL - foreach (const QString &device, devicePaths) { - if(device.contains(newMac)) { - newMac = device; - break; - } - } - return newMac; -} - -QStringList QNmWifiEngine::getConnectionPathForId(const QString &uuid) -{ - QStringList connectionServices; - connectionServices << NM_DBUS_SERVICE_SYSTEM_SETTINGS; - connectionServices << NM_DBUS_SERVICE_USER_SETTINGS; - QScopedPointer settingsiface; - foreach (const QString &service, connectionServices) { - settingsiface.reset(new QNetworkManagerSettings(service)); - QScopedPointer sysIface; - foreach (const QDBusObjectPath &path, settingsiface->listConnections()) { - sysIface.reset(new QNetworkManagerSettingsConnection(service, path.path())); - if(sysIface->getUuid() == uuid) - return QStringList() << service << sysIface->connectionInterface()->path(); - } - } - return QStringList(); -} - -#include "moc_qnmwifiengine_unix_p.cpp" - -QTM_END_NAMESPACE -