/**************************************************************************** ** ** 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 plugins of the Qt Toolkit. ** ** $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 #include #include #include #include #include #include #include #include #include #include #include "qnetworkmanagerservice.h" #include "qnmdbushelper.h" QT_BEGIN_NAMESPACE static QDBusConnection dbusConnection = QDBusConnection::systemBus(); class QNetworkManagerInterfacePrivate { public: QDBusInterface *connectionInterface; bool valid; }; QNetworkManagerInterface::QNetworkManagerInterface(QObject *parent) : QObject(parent) { d = new QNetworkManagerInterfacePrivate(); d->connectionInterface = new QDBusInterface(QLatin1String(NM_DBUS_SERVICE), QLatin1String(NM_DBUS_PATH), QLatin1String(NM_DBUS_INTERFACE), dbusConnection); if (!d->connectionInterface->isValid()) { d->valid = false; return; } d->valid = true; nmDBusHelper = new QNmDBusHelper(this); connect(nmDBusHelper, SIGNAL(pathForPropertiesChanged(const QString &,QMap)), this,SIGNAL(propertiesChanged( const QString &, QMap))); connect(nmDBusHelper,SIGNAL(pathForStateChanged(const QString &, quint32)), this, SIGNAL(stateChanged(const QString&, quint32))); } QNetworkManagerInterface::~QNetworkManagerInterface() { delete d->connectionInterface; delete d; } bool QNetworkManagerInterface::isValid() { return d->valid; } bool QNetworkManagerInterface::setConnections() { if(!isValid() ) return false; bool allOk = false; if (!dbusConnection.connect(QLatin1String(NM_DBUS_SERVICE), QLatin1String(NM_DBUS_PATH), QLatin1String(NM_DBUS_INTERFACE), QLatin1String("PropertiesChanged"), nmDBusHelper,SLOT(slotPropertiesChanged( QMap)))) { allOk = true; } if (!dbusConnection.connect(QLatin1String(NM_DBUS_SERVICE), QLatin1String(NM_DBUS_PATH), QLatin1String(NM_DBUS_INTERFACE), QLatin1String("DeviceAdded"), this,SIGNAL(deviceAdded(QDBusObjectPath)))) { allOk = true; } if (!dbusConnection.connect(QLatin1String(NM_DBUS_SERVICE), QLatin1String(NM_DBUS_PATH), QLatin1String(NM_DBUS_INTERFACE), QLatin1String("DeviceRemoved"), this,SIGNAL(deviceRemoved(QDBusObjectPath)))) { allOk = true; } return allOk; } QDBusInterface *QNetworkManagerInterface::connectionInterface() const { return d->connectionInterface; } QList QNetworkManagerInterface::getDevices() const { QDBusReply > reply = d->connectionInterface->call(QLatin1String("GetDevices")); return reply.value(); } void QNetworkManagerInterface::activateConnection( const QString &serviceName, QDBusObjectPath connectionPath, QDBusObjectPath devicePath, QDBusObjectPath specificObject) { QDBusPendingCall pendingCall = d->connectionInterface->asyncCall(QLatin1String("ActivateConnection"), QVariant(serviceName), QVariant::fromValue(connectionPath), QVariant::fromValue(devicePath), QVariant::fromValue(specificObject)); QDBusPendingCallWatcher *callWatcher = new QDBusPendingCallWatcher(pendingCall, this); connect(callWatcher, SIGNAL(finished(QDBusPendingCallWatcher*)), this, SIGNAL(activationFinished(QDBusPendingCallWatcher*))); } void QNetworkManagerInterface::deactivateConnection(QDBusObjectPath connectionPath) const { d->connectionInterface->call(QLatin1String("DeactivateConnection"), QVariant::fromValue(connectionPath)); } bool QNetworkManagerInterface::wirelessEnabled() const { return d->connectionInterface->property("WirelessEnabled").toBool(); } bool QNetworkManagerInterface::wirelessHardwareEnabled() const { return d->connectionInterface->property("WirelessHardwareEnabled").toBool(); } QList QNetworkManagerInterface::activeConnections() const { QVariant prop = d->connectionInterface->property("ActiveConnections"); return prop.value >(); } quint32 QNetworkManagerInterface::state() { return d->connectionInterface->property("State").toUInt(); } class QNetworkManagerInterfaceAccessPointPrivate { public: QDBusInterface *connectionInterface; QString path; bool valid; }; QNetworkManagerInterfaceAccessPoint::QNetworkManagerInterfaceAccessPoint(const QString &dbusPathName, QObject *parent) : QObject(parent), nmDBusHelper(0) { d = new QNetworkManagerInterfaceAccessPointPrivate(); d->path = dbusPathName; d->connectionInterface = new QDBusInterface(QLatin1String(NM_DBUS_SERVICE), d->path, QLatin1String(NM_DBUS_INTERFACE_ACCESS_POINT), dbusConnection); if (!d->connectionInterface->isValid()) { d->valid = false; return; } d->valid = true; } QNetworkManagerInterfaceAccessPoint::~QNetworkManagerInterfaceAccessPoint() { delete d->connectionInterface; delete d; } bool QNetworkManagerInterfaceAccessPoint::isValid() { return d->valid; } bool QNetworkManagerInterfaceAccessPoint::setConnections() { if(!isValid() ) return false; bool allOk = false; delete nmDBusHelper; nmDBusHelper = new QNmDBusHelper(this); connect(nmDBusHelper, SIGNAL(pathForPropertiesChanged(const QString &,QMap)), this,SIGNAL(propertiesChanged( const QString &, QMap))); if(dbusConnection.connect(QLatin1String(NM_DBUS_SERVICE), d->path, QLatin1String(NM_DBUS_INTERFACE_ACCESS_POINT), QLatin1String("PropertiesChanged"), nmDBusHelper,SLOT(slotPropertiesChanged( QMap))) ) { allOk = true; } return allOk; } QDBusInterface *QNetworkManagerInterfaceAccessPoint::connectionInterface() const { return d->connectionInterface; } quint32 QNetworkManagerInterfaceAccessPoint::flags() const { return d->connectionInterface->property("Flags").toUInt(); } quint32 QNetworkManagerInterfaceAccessPoint::wpaFlags() const { return d->connectionInterface->property("WpaFlags").toUInt(); } quint32 QNetworkManagerInterfaceAccessPoint::rsnFlags() const { return d->connectionInterface->property("RsnFlags").toUInt(); } QString QNetworkManagerInterfaceAccessPoint::ssid() const { return d->connectionInterface->property("Ssid").toString(); } quint32 QNetworkManagerInterfaceAccessPoint::frequency() const { return d->connectionInterface->property("Frequency").toUInt(); } QString QNetworkManagerInterfaceAccessPoint::hwAddress() const { return d->connectionInterface->property("HwAddress").toString(); } quint32 QNetworkManagerInterfaceAccessPoint::mode() const { return d->connectionInterface->property("Mode").toUInt(); } quint32 QNetworkManagerInterfaceAccessPoint::maxBitrate() const { return d->connectionInterface->property("MaxBitrate").toUInt(); } quint32 QNetworkManagerInterfaceAccessPoint::strength() const { return d->connectionInterface->property("Strength").toUInt(); } class QNetworkManagerInterfaceDevicePrivate { public: QDBusInterface *connectionInterface; QString path; bool valid; }; QNetworkManagerInterfaceDevice::QNetworkManagerInterfaceDevice(const QString &deviceObjectPath, QObject *parent) : QObject(parent), nmDBusHelper(0) { d = new QNetworkManagerInterfaceDevicePrivate(); d->path = deviceObjectPath; d->connectionInterface = new QDBusInterface(QLatin1String(NM_DBUS_SERVICE), d->path, QLatin1String(NM_DBUS_INTERFACE_DEVICE), dbusConnection); if (!d->connectionInterface->isValid()) { d->valid = false; return; } d->valid = true; } QNetworkManagerInterfaceDevice::~QNetworkManagerInterfaceDevice() { delete d->connectionInterface; delete d; } bool QNetworkManagerInterfaceDevice::isValid() { return d->valid; } bool QNetworkManagerInterfaceDevice::setConnections() { if(!isValid() ) return false; bool allOk = false; delete nmDBusHelper; nmDBusHelper = new QNmDBusHelper(this); connect(nmDBusHelper,SIGNAL(pathForStateChanged(const QString &, quint32)), this, SIGNAL(stateChanged(const QString&, quint32))); if(dbusConnection.connect(QLatin1String(NM_DBUS_SERVICE), d->path, QLatin1String(NM_DBUS_INTERFACE_DEVICE), QLatin1String("StateChanged"), nmDBusHelper,SLOT(deviceStateChanged(quint32)))) { allOk = true; } return allOk; } QDBusInterface *QNetworkManagerInterfaceDevice::connectionInterface() const { return d->connectionInterface; } QString QNetworkManagerInterfaceDevice::udi() const { return d->connectionInterface->property("Udi").toString(); } QString QNetworkManagerInterfaceDevice::networkInterface() const { return d->connectionInterface->property("Interface").toString(); } quint32 QNetworkManagerInterfaceDevice::ip4Address() const { return d->connectionInterface->property("Ip4Address").toUInt(); } quint32 QNetworkManagerInterfaceDevice::state() const { return d->connectionInterface->property("State").toUInt(); } quint32 QNetworkManagerInterfaceDevice::deviceType() const { return d->connectionInterface->property("DeviceType").toUInt(); } QDBusObjectPath QNetworkManagerInterfaceDevice::ip4config() const { QVariant prop = d->connectionInterface->property("Ip4Config"); return prop.value(); } class QNetworkManagerInterfaceDeviceWiredPrivate { public: QDBusInterface *connectionInterface; QString path; bool valid; }; QNetworkManagerInterfaceDeviceWired::QNetworkManagerInterfaceDeviceWired(const QString &ifaceDevicePath, QObject *parent) : QObject(parent), nmDBusHelper(0) { d = new QNetworkManagerInterfaceDeviceWiredPrivate(); d->path = ifaceDevicePath; d->connectionInterface = new QDBusInterface(QLatin1String(NM_DBUS_SERVICE), d->path, QLatin1String(NM_DBUS_INTERFACE_DEVICE_WIRED), dbusConnection, parent); if (!d->connectionInterface->isValid()) { d->valid = false; return; } d->valid = true; } QNetworkManagerInterfaceDeviceWired::~QNetworkManagerInterfaceDeviceWired() { delete d->connectionInterface; delete d; } bool QNetworkManagerInterfaceDeviceWired::isValid() { return d->valid; } bool QNetworkManagerInterfaceDeviceWired::setConnections() { if(!isValid() ) return false; bool allOk = false; delete nmDBusHelper; nmDBusHelper = new QNmDBusHelper(this); connect(nmDBusHelper, SIGNAL(pathForPropertiesChanged(const QString &,QMap)), this,SIGNAL(propertiesChanged( const QString &, QMap))); if(dbusConnection.connect(QLatin1String(NM_DBUS_SERVICE), d->path, QLatin1String(NM_DBUS_INTERFACE_DEVICE_WIRED), QLatin1String("PropertiesChanged"), nmDBusHelper,SLOT(slotPropertiesChanged( QMap))) ) { allOk = true; } return allOk; } QDBusInterface *QNetworkManagerInterfaceDeviceWired::connectionInterface() const { return d->connectionInterface; } QString QNetworkManagerInterfaceDeviceWired::hwAddress() const { return d->connectionInterface->property("HwAddress").toString(); } quint32 QNetworkManagerInterfaceDeviceWired::speed() const { return d->connectionInterface->property("Speed").toUInt(); } bool QNetworkManagerInterfaceDeviceWired::carrier() const { return d->connectionInterface->property("Carrier").toBool(); } class QNetworkManagerInterfaceDeviceWirelessPrivate { public: QDBusInterface *connectionInterface; QString path; bool valid; }; QNetworkManagerInterfaceDeviceWireless::QNetworkManagerInterfaceDeviceWireless(const QString &ifaceDevicePath, QObject *parent) : QObject(parent), nmDBusHelper(0) { d = new QNetworkManagerInterfaceDeviceWirelessPrivate(); d->path = ifaceDevicePath; d->connectionInterface = new QDBusInterface(QLatin1String(NM_DBUS_SERVICE), d->path, QLatin1String(NM_DBUS_INTERFACE_DEVICE_WIRELESS), dbusConnection, parent); if (!d->connectionInterface->isValid()) { d->valid = false; return; } d->valid = true; } QNetworkManagerInterfaceDeviceWireless::~QNetworkManagerInterfaceDeviceWireless() { delete d->connectionInterface; delete d; } bool QNetworkManagerInterfaceDeviceWireless::isValid() { return d->valid; } bool QNetworkManagerInterfaceDeviceWireless::setConnections() { if(!isValid() ) return false; bool allOk = false; delete nmDBusHelper; nmDBusHelper = new QNmDBusHelper(this); connect(nmDBusHelper, SIGNAL(pathForPropertiesChanged(const QString &,QMap)), this,SIGNAL(propertiesChanged( const QString &, QMap))); connect(nmDBusHelper, SIGNAL(pathForAccessPointAdded(const QString &,QDBusObjectPath)), this,SIGNAL(accessPointAdded(const QString &,QDBusObjectPath))); connect(nmDBusHelper, SIGNAL(pathForAccessPointRemoved(const QString &,QDBusObjectPath)), this,SIGNAL(accessPointRemoved(const QString &,QDBusObjectPath))); if(!dbusConnection.connect(QLatin1String(NM_DBUS_SERVICE), d->path, QLatin1String(NM_DBUS_INTERFACE_DEVICE_WIRELESS), QLatin1String("AccessPointAdded"), nmDBusHelper, SLOT(slotAccessPointAdded( QDBusObjectPath )))) { allOk = true; } if(!dbusConnection.connect(QLatin1String(NM_DBUS_SERVICE), d->path, QLatin1String(NM_DBUS_INTERFACE_DEVICE_WIRELESS), QLatin1String("AccessPointRemoved"), nmDBusHelper, SLOT(slotAccessPointRemoved( QDBusObjectPath )))) { allOk = true; } if(!dbusConnection.connect(QLatin1String(NM_DBUS_SERVICE), d->path, QLatin1String(NM_DBUS_INTERFACE_DEVICE_WIRELESS), QLatin1String("PropertiesChanged"), nmDBusHelper,SLOT(slotPropertiesChanged( QMap)))) { allOk = true; } return allOk; } QDBusInterface *QNetworkManagerInterfaceDeviceWireless::connectionInterface() const { return d->connectionInterface; } QList QNetworkManagerInterfaceDeviceWireless::getAccessPoints() { QDBusReply > reply = d->connectionInterface->call(QLatin1String("GetAccessPoints")); return reply.value(); } QString QNetworkManagerInterfaceDeviceWireless::hwAddress() const { return d->connectionInterface->property("HwAddress").toString(); } quint32 QNetworkManagerInterfaceDeviceWireless::mode() const { return d->connectionInterface->property("Mode").toUInt(); } quint32 QNetworkManagerInterfaceDeviceWireless::bitrate() const { return d->connectionInterface->property("Bitrate").toUInt(); } QDBusObjectPath QNetworkManagerInterfaceDeviceWireless::activeAccessPoint() const { return d->connectionInterface->property("ActiveAccessPoint").value(); } quint32 QNetworkManagerInterfaceDeviceWireless::wirelessCapabilities() const { return d->connectionInterface->property("WirelelessCapabilities").toUInt(); } class QNetworkManagerSettingsPrivate { public: QDBusInterface *connectionInterface; QString path; bool valid; }; QNetworkManagerSettings::QNetworkManagerSettings(const QString &settingsService, QObject *parent) : QObject(parent) { d = new QNetworkManagerSettingsPrivate(); d->path = settingsService; d->connectionInterface = new QDBusInterface(settingsService, QLatin1String(NM_DBUS_PATH_SETTINGS), QLatin1String(NM_DBUS_IFACE_SETTINGS), dbusConnection); if (!d->connectionInterface->isValid()) { d->valid = false; return; } d->valid = true; } QNetworkManagerSettings::~QNetworkManagerSettings() { delete d->connectionInterface; delete d; } bool QNetworkManagerSettings::isValid() { return d->valid; } bool QNetworkManagerSettings::setConnections() { bool allOk = false; if (!dbusConnection.connect(d->path, QLatin1String(NM_DBUS_PATH_SETTINGS), QLatin1String(NM_DBUS_IFACE_SETTINGS), QLatin1String("NewConnection"), this, SIGNAL(newConnection(QDBusObjectPath)))) { allOk = true; } return allOk; } QList QNetworkManagerSettings::listConnections() { QDBusReply > reply = d->connectionInterface->call(QLatin1String("ListConnections")); return reply.value(); } QDBusInterface *QNetworkManagerSettings::connectionInterface() const { return d->connectionInterface; } class QNetworkManagerSettingsConnectionPrivate { public: QDBusInterface *connectionInterface; QString path; QString service; QNmSettingsMap settingsMap; bool valid; }; QNetworkManagerSettingsConnection::QNetworkManagerSettingsConnection(const QString &settingsService, const QString &connectionObjectPath, QObject *parent) : QObject(parent), nmDBusHelper(0) { qDBusRegisterMetaType(); d = new QNetworkManagerSettingsConnectionPrivate(); d->path = connectionObjectPath; d->service = settingsService; d->connectionInterface = new QDBusInterface(settingsService, d->path, QLatin1String(NM_DBUS_IFACE_SETTINGS_CONNECTION), dbusConnection, parent); if (!d->connectionInterface->isValid()) { d->valid = false; return; } d->valid = true; QDBusReply< QNmSettingsMap > rep = d->connectionInterface->call(QLatin1String("GetSettings")); d->settingsMap = rep.value(); } QNetworkManagerSettingsConnection::~QNetworkManagerSettingsConnection() { delete d->connectionInterface; delete d; } bool QNetworkManagerSettingsConnection::isValid() { return d->valid; } bool QNetworkManagerSettingsConnection::setConnections() { if(!isValid() ) return false; bool allOk = false; if(!dbusConnection.connect(d->service, d->path, QLatin1String(NM_DBUS_IFACE_SETTINGS_CONNECTION), QLatin1String("Updated"), this, SIGNAL(updated(QNmSettingsMap)))) { allOk = true; } else { QDBusError error = dbusConnection.lastError(); } delete nmDBusHelper; nmDBusHelper = new QNmDBusHelper(this); connect(nmDBusHelper, SIGNAL(pathForSettingsRemoved(const QString &)), this,SIGNAL(removed( const QString &))); if (!dbusConnection.connect(d->service, d->path, QLatin1String(NM_DBUS_IFACE_SETTINGS_CONNECTION), QLatin1String("Removed"), nmDBusHelper, SIGNAL(slotSettingsRemoved()))) { allOk = true; } return allOk; } QDBusInterface *QNetworkManagerSettingsConnection::connectionInterface() const { return d->connectionInterface; } QNmSettingsMap QNetworkManagerSettingsConnection::getSettings() { QDBusReply< QNmSettingsMap > rep = d->connectionInterface->call(QLatin1String("GetSettings")); d->settingsMap = rep.value(); return d->settingsMap; } NMDeviceType QNetworkManagerSettingsConnection::getType() { QNmSettingsMap::const_iterator i = d->settingsMap.find(QLatin1String("connection")); while (i != d->settingsMap.end() && i.key() == QLatin1String("connection")) { QMap innerMap = i.value(); QMap::const_iterator ii = innerMap.find(QLatin1String("type")); while (ii != innerMap.end() && ii.key() == QLatin1String("type")) { QString devType = ii.value().toString(); if (devType == QLatin1String("802-3-ethernet")) { return DEVICE_TYPE_802_3_ETHERNET; } if (devType == QLatin1String("802-11-wireless")) { return DEVICE_TYPE_802_11_WIRELESS; } ii++; } i++; } return DEVICE_TYPE_UNKNOWN; } bool QNetworkManagerSettingsConnection::isAutoConnect() { QNmSettingsMap::const_iterator i = d->settingsMap.find(QLatin1String("connection")); while (i != d->settingsMap.end() && i.key() == QLatin1String("connection")) { QMap innerMap = i.value(); QMap::const_iterator ii = innerMap.find(QLatin1String("autoconnect")); while (ii != innerMap.end() && ii.key() == QLatin1String("autoconnect")) { return ii.value().toBool(); ii++; } i++; } return true; //default networkmanager is autoconnect } quint64 QNetworkManagerSettingsConnection::getTimestamp() { QNmSettingsMap::const_iterator i = d->settingsMap.find(QLatin1String("connection")); while (i != d->settingsMap.end() && i.key() == QLatin1String("connection")) { QMap innerMap = i.value(); QMap::const_iterator ii = innerMap.find(QLatin1String("timestamp")); while (ii != innerMap.end() && ii.key() == QLatin1String("timestamp")) { return ii.value().toUInt(); ii++; } i++; } return 0; } QString QNetworkManagerSettingsConnection::getId() { QNmSettingsMap::const_iterator i = d->settingsMap.find(QLatin1String("connection")); while (i != d->settingsMap.end() && i.key() == QLatin1String("connection")) { QMap innerMap = i.value(); QMap::const_iterator ii = innerMap.find(QLatin1String("id")); while (ii != innerMap.end() && ii.key() == QLatin1String("id")) { return ii.value().toString(); ii++; } i++; } return QString(); } QString QNetworkManagerSettingsConnection::getUuid() { QNmSettingsMap::const_iterator i = d->settingsMap.find(QLatin1String("connection")); while (i != d->settingsMap.end() && i.key() == QLatin1String("connection")) { QMap innerMap = i.value(); QMap::const_iterator ii = innerMap.find(QLatin1String("uuid")); while (ii != innerMap.end() && ii.key() == QLatin1String("uuid")) { return ii.value().toString(); ii++; } i++; } // is no uuid, return the connection path return d->connectionInterface->path(); } QString QNetworkManagerSettingsConnection::getSsid() { QNmSettingsMap::const_iterator i = d->settingsMap.find(QLatin1String("802-11-wireless")); while (i != d->settingsMap.end() && i.key() == QLatin1String("802-11-wireless")) { QMap innerMap = i.value(); QMap::const_iterator ii = innerMap.find(QLatin1String("ssid")); while (ii != innerMap.end() && ii.key() == QLatin1String("ssid")) { return ii.value().toString(); ii++; } i++; } return QString(); } QString QNetworkManagerSettingsConnection::getMacAddress() { if(getType() == DEVICE_TYPE_802_3_ETHERNET) { QNmSettingsMap::const_iterator i = d->settingsMap.find(QLatin1String("802-3-ethernet")); while (i != d->settingsMap.end() && i.key() == QLatin1String("802-3-ethernet")) { QMap innerMap = i.value(); QMap::const_iterator ii = innerMap.find(QLatin1String("mac-address")); while (ii != innerMap.end() && ii.key() == QLatin1String("mac-address")) { return ii.value().toString(); ii++; } i++; } } else if(getType() == DEVICE_TYPE_802_11_WIRELESS) { QNmSettingsMap::const_iterator i = d->settingsMap.find(QLatin1String("802-11-wireless")); while (i != d->settingsMap.end() && i.key() == QLatin1String("802-11-wireless")) { QMap innerMap = i.value(); QMap::const_iterator ii = innerMap.find(QLatin1String("mac-address")); while (ii != innerMap.end() && ii.key() == QLatin1String("mac-address")) { return ii.value().toString(); ii++; } i++; } } return QString(); } QStringList QNetworkManagerSettingsConnection::getSeenBssids() { if(getType() == DEVICE_TYPE_802_11_WIRELESS) { QNmSettingsMap::const_iterator i = d->settingsMap.find(QLatin1String("802-11-wireless")); while (i != d->settingsMap.end() && i.key() == QLatin1String("802-11-wireless")) { QMap innerMap = i.value(); QMap::const_iterator ii = innerMap.find(QLatin1String("seen-bssids")); while (ii != innerMap.end() && ii.key() == QLatin1String("seen-bssids")) { return ii.value().toStringList(); ii++; } i++; } } return QStringList(); } class QNetworkManagerConnectionActivePrivate { public: QDBusInterface *connectionInterface; QString path; bool valid; }; QNetworkManagerConnectionActive::QNetworkManagerConnectionActive( const QString &activeConnectionObjectPath, QObject *parent) : QObject(parent), nmDBusHelper(0) { d = new QNetworkManagerConnectionActivePrivate(); d->path = activeConnectionObjectPath; d->connectionInterface = new QDBusInterface(QLatin1String(NM_DBUS_SERVICE), d->path, QLatin1String(NM_DBUS_INTERFACE_ACTIVE_CONNECTION), dbusConnection, parent); if (!d->connectionInterface->isValid()) { d->valid = false; return; } d->valid = true; } QNetworkManagerConnectionActive::~QNetworkManagerConnectionActive() { delete d->connectionInterface; delete d; } bool QNetworkManagerConnectionActive::isValid() { return d->valid; } bool QNetworkManagerConnectionActive::setConnections() { if(!isValid() ) return false; bool allOk = false; delete nmDBusHelper; nmDBusHelper = new QNmDBusHelper(this); connect(nmDBusHelper, SIGNAL(pathForPropertiesChanged(const QString &,QMap)), this,SIGNAL(propertiesChanged( const QString &, QMap))); if(dbusConnection.connect(QLatin1String(NM_DBUS_SERVICE), d->path, QLatin1String(NM_DBUS_INTERFACE_ACTIVE_CONNECTION), QLatin1String("PropertiesChanged"), nmDBusHelper,SLOT(slotPropertiesChanged( QMap))) ) { allOk = true; } return allOk; } QDBusInterface *QNetworkManagerConnectionActive::connectionInterface() const { return d->connectionInterface; } QString QNetworkManagerConnectionActive::serviceName() const { return d->connectionInterface->property("ServiceName").toString(); } QDBusObjectPath QNetworkManagerConnectionActive::connection() const { QVariant prop = d->connectionInterface->property("Connection"); return prop.value(); } QDBusObjectPath QNetworkManagerConnectionActive::specificObject() const { QVariant prop = d->connectionInterface->property("SpecificObject"); return prop.value(); } QList QNetworkManagerConnectionActive::devices() const { QVariant prop = d->connectionInterface->property("Devices"); return prop.value >(); } quint32 QNetworkManagerConnectionActive::state() const { return d->connectionInterface->property("State").toUInt(); } bool QNetworkManagerConnectionActive::defaultRoute() const { return d->connectionInterface->property("Default").toBool(); } class QNetworkManagerIp4ConfigPrivate { public: QDBusInterface *connectionInterface; QString path; bool valid; }; QNetworkManagerIp4Config::QNetworkManagerIp4Config( const QString &deviceObjectPath, QObject *parent) : QObject(parent) { d = new QNetworkManagerIp4ConfigPrivate(); d->path = deviceObjectPath; d->connectionInterface = new QDBusInterface(QLatin1String(NM_DBUS_SERVICE), d->path, QLatin1String(NM_DBUS_INTERFACE_IP4_CONFIG), dbusConnection, parent); if (!d->connectionInterface->isValid()) { d->valid = false; return; } d->valid = true; } QNetworkManagerIp4Config::~QNetworkManagerIp4Config() { delete d->connectionInterface; delete d; } bool QNetworkManagerIp4Config::isValid() { return d->valid; } QStringList QNetworkManagerIp4Config::domains() const { return d->connectionInterface->property("Domains").toStringList(); } QT_END_NAMESPACE