/**************************************************************************** ** ** 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 #include "qnmdbushelper.h" #include "qnetworkmanagerservice.h" //Q_DECLARE_METATYPE(QList) QT_BEGIN_NAMESPACE static QDBusConnection dbusConnection = QDBusConnection::systemBus(); //static QDBusInterface iface(NM_DBUS_SERVICE, NM_DBUS_PATH, NM_DBUS_INTERFACE, dbusConnection); class QNetworkManagerInterfacePrivate { public: QDBusInterface *connectionInterface; bool valid; }; QNetworkManagerInterface::QNetworkManagerInterface(QObject *parent) : QObject(parent), nmDBusHelper(0) { d = new QNetworkManagerInterfacePrivate(); d->connectionInterface = new QDBusInterface(NM_DBUS_SERVICE, NM_DBUS_PATH, NM_DBUS_INTERFACE, dbusConnection); if (!d->connectionInterface->isValid()) { qWarning() << "Could not find NetworkManager"; d->valid = false; return; } d->valid = true; nmDBusHelper = new QNmDBusHelper; 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() { if (nmDBusHelper) delete nmDBusHelper; delete d->connectionInterface; delete d; } bool QNetworkManagerInterface::isValid() { return d->valid; } bool QNetworkManagerInterface::setConnections() { if(!isValid() ) return false; bool allOk = false; if (!dbusConnection.connect(NM_DBUS_SERVICE, NM_DBUS_PATH, NM_DBUS_INTERFACE, "PropertiesChanged", nmDBusHelper,SLOT(slotPropertiesChanged( QMap)))) { allOk = true; } if (!dbusConnection.connect(NM_DBUS_SERVICE, NM_DBUS_PATH, NM_DBUS_INTERFACE, "DeviceAdded", this,SIGNAL(deviceAdded(QDBusObjectPath)))) { allOk = true; } if (!dbusConnection.connect(NM_DBUS_SERVICE, NM_DBUS_PATH, NM_DBUS_INTERFACE, "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("GetDevices"); return reply.value(); } void QNetworkManagerInterface::activateConnection( const QString &serviceName, QDBusObjectPath connectionPath, QDBusObjectPath devicePath, QDBusObjectPath specificObject) { QDBusPendingCall pendingCall = d->connectionInterface->asyncCall("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("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(NM_DBUS_SERVICE, d->path, NM_DBUS_INTERFACE_ACCESS_POINT, dbusConnection); if (!d->connectionInterface->isValid()) { d->valid = false; qWarning() << "Could not find InterfaceAccessPoint"; return; } d->valid = true; } QNetworkManagerInterfaceAccessPoint::~QNetworkManagerInterfaceAccessPoint() { if (nmDBusHelper) delete nmDBusHelper; delete d->connectionInterface; delete d; } bool QNetworkManagerInterfaceAccessPoint::isValid() { return d->valid; } bool QNetworkManagerInterfaceAccessPoint::setConnections() { if(!isValid() ) return false; bool allOk = false; if (nmDBusHelper) delete nmDBusHelper; nmDBusHelper = 0; nmDBusHelper = new QNmDBusHelper; connect(nmDBusHelper, SIGNAL(pathForPropertiesChanged(const QString &,QMap)), this,SIGNAL(propertiesChanged( const QString &, QMap))); if(dbusConnection.connect(NM_DBUS_SERVICE, d->path, NM_DBUS_INTERFACE_ACCESS_POINT, "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(NM_DBUS_SERVICE, d->path, NM_DBUS_INTERFACE_DEVICE, dbusConnection); if (!d->connectionInterface->isValid()) { d->valid = false; qWarning() << "Could not find NetworkManager"; return; } d->valid = true; } QNetworkManagerInterfaceDevice::~QNetworkManagerInterfaceDevice() { if (nmDBusHelper) delete nmDBusHelper; delete d->connectionInterface; delete d; } bool QNetworkManagerInterfaceDevice::isValid() { return d->valid; } bool QNetworkManagerInterfaceDevice::setConnections() { if(!isValid() ) return false; bool allOk = false; if (nmDBusHelper) delete nmDBusHelper; nmDBusHelper = 0; nmDBusHelper = new QNmDBusHelper; connect(nmDBusHelper,SIGNAL(pathForStateChanged(const QString &, quint32)), this, SIGNAL(stateChanged(const QString&, quint32))); if(dbusConnection.connect(NM_DBUS_SERVICE, d->path, NM_DBUS_INTERFACE_DEVICE, "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(); } QNetworkInterface QNetworkManagerInterfaceDevice::interface() const { return QNetworkInterface::interfaceFromName(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(NM_DBUS_SERVICE, d->path, NM_DBUS_INTERFACE_DEVICE_WIRED, dbusConnection, parent); if (!d->connectionInterface->isValid()) { d->valid = false; qWarning() << "Could not find InterfaceDeviceWired"; return; } d->valid = true; } QNetworkManagerInterfaceDeviceWired::~QNetworkManagerInterfaceDeviceWired() { if (nmDBusHelper) delete nmDBusHelper; delete d->connectionInterface; delete d; } bool QNetworkManagerInterfaceDeviceWired::isValid() { return d->valid; } bool QNetworkManagerInterfaceDeviceWired::setConnections() { if(!isValid() ) return false; bool allOk = false; if (nmDBusHelper) delete nmDBusHelper; nmDBusHelper = 0; nmDBusHelper = new QNmDBusHelper; connect(nmDBusHelper, SIGNAL(pathForPropertiesChanged(const QString &,QMap)), this,SIGNAL(propertiesChanged( const QString &, QMap))); if(dbusConnection.connect(NM_DBUS_SERVICE, d->path, NM_DBUS_INTERFACE_DEVICE_WIRED, "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(NM_DBUS_SERVICE, d->path, NM_DBUS_INTERFACE_DEVICE_WIRELESS, dbusConnection, parent); if (!d->connectionInterface->isValid()) { d->valid = false; qWarning() << "Could not find InterfaceDeviceWireless"; return; } d->valid = true; } QNetworkManagerInterfaceDeviceWireless::~QNetworkManagerInterfaceDeviceWireless() { if (nmDBusHelper) delete nmDBusHelper; delete d->connectionInterface; delete d; } bool QNetworkManagerInterfaceDeviceWireless::isValid() { return d->valid; } bool QNetworkManagerInterfaceDeviceWireless::setConnections() { if(!isValid() ) return false; bool allOk = false; if (nmDBusHelper) delete nmDBusHelper; nmDBusHelper = 0; nmDBusHelper = new QNmDBusHelper; 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(NM_DBUS_SERVICE, d->path, NM_DBUS_INTERFACE_DEVICE_WIRELESS, "AccessPointAdded", nmDBusHelper, SLOT(slotAccessPointAdded( QDBusObjectPath )))) { allOk = true; } if(!dbusConnection.connect(NM_DBUS_SERVICE, d->path, NM_DBUS_INTERFACE_DEVICE_WIRELESS, "AccessPointRemoved", nmDBusHelper, SLOT(slotAccessPointRemoved( QDBusObjectPath )))) { allOk = true; } if(!dbusConnection.connect(NM_DBUS_SERVICE, d->path, NM_DBUS_INTERFACE_DEVICE_WIRELESS, "PropertiesChanged", nmDBusHelper,SLOT(slotPropertiesChanged( QMap)))) { allOk = true; } return allOk; } QDBusInterface *QNetworkManagerInterfaceDeviceWireless::connectionInterface() const { return d->connectionInterface; } QList QNetworkManagerInterfaceDeviceWireless::getAccessPoints() { QDBusReply > reply = d->connectionInterface->call("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, NM_DBUS_PATH_SETTINGS, NM_DBUS_IFACE_SETTINGS, dbusConnection); if (!d->connectionInterface->isValid()) { d->valid = false; qWarning() << "Could not find NetworkManagerSettings"; 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, NM_DBUS_PATH_SETTINGS, NM_DBUS_IFACE_SETTINGS, "NewConnection", this, SIGNAL(newConnection(QDBusObjectPath)))) { allOk = true; } return allOk; } QList QNetworkManagerSettings::listConnections() { QDBusReply > reply = d->connectionInterface->call("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, NM_DBUS_IFACE_SETTINGS_CONNECTION, dbusConnection, parent); if (!d->connectionInterface->isValid()) { qWarning() << "Could not find NetworkManagerSettingsConnection"; d->valid = false; return; } d->valid = true; QDBusReply< QNmSettingsMap > rep = d->connectionInterface->call("GetSettings"); d->settingsMap = rep.value(); } QNetworkManagerSettingsConnection::~QNetworkManagerSettingsConnection() { if (nmDBusHelper) delete nmDBusHelper; 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, NM_DBUS_IFACE_SETTINGS_CONNECTION, "Updated", this, SIGNAL(updated(QNmSettingsMap)))) { allOk = true; } else { QDBusError error = dbusConnection.lastError(); } if (nmDBusHelper) delete nmDBusHelper; nmDBusHelper = 0; nmDBusHelper = new QNmDBusHelper; connect(nmDBusHelper, SIGNAL(pathForSettingsRemoved(const QString &)), this,SIGNAL(removed( const QString &))); if (!dbusConnection.connect(d->service, d->path, NM_DBUS_IFACE_SETTINGS_CONNECTION, "Removed", nmDBusHelper, SIGNAL(slotSettingsRemoved()))) { allOk = true; } return allOk; } //QNetworkManagerSettingsConnection::update(QNmSettingsMap map) //{ // d->connectionInterface->call("Update", QVariant::fromValue(map)); //} QDBusInterface *QNetworkManagerSettingsConnection::connectionInterface() const { return d->connectionInterface; } QNmSettingsMap QNetworkManagerSettingsConnection::getSettings() { QDBusReply< QNmSettingsMap > rep = d->connectionInterface->call("GetSettings"); d->settingsMap = rep.value(); return d->settingsMap; } NMDeviceType QNetworkManagerSettingsConnection::getType() { QNmSettingsMap::const_iterator i = d->settingsMap.find("connection"); while (i != d->settingsMap.end() && i.key() == "connection") { QMap innerMap = i.value(); QMap::const_iterator ii = innerMap.find("type"); while (ii != innerMap.end() && ii.key() == "type") { QString devType = ii.value().toString(); if (devType == "802-3-ethernet") { return DEVICE_TYPE_802_3_ETHERNET; } if (devType == "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("connection"); while (i != d->settingsMap.end() && i.key() == "connection") { QMap innerMap = i.value(); QMap::const_iterator ii = innerMap.find("autoconnect"); while (ii != innerMap.end() && ii.key() == "autoconnect") { return ii.value().toBool(); ii++; } i++; } return true; //default networkmanager is autoconnect } quint64 QNetworkManagerSettingsConnection::getTimestamp() { QNmSettingsMap::const_iterator i = d->settingsMap.find("connection"); while (i != d->settingsMap.end() && i.key() == "connection") { QMap innerMap = i.value(); QMap::const_iterator ii = innerMap.find("timestamp"); while (ii != innerMap.end() && ii.key() == "timestamp") { return ii.value().toUInt(); ii++; } i++; } return 0; } QString QNetworkManagerSettingsConnection::getId() { QNmSettingsMap::const_iterator i = d->settingsMap.find("connection"); while (i != d->settingsMap.end() && i.key() == "connection") { QMap innerMap = i.value(); QMap::const_iterator ii = innerMap.find("id"); while (ii != innerMap.end() && ii.key() == "id") { return ii.value().toString(); ii++; } i++; } return QString(); } QString QNetworkManagerSettingsConnection::getUuid() { QNmSettingsMap::const_iterator i = d->settingsMap.find("connection"); while (i != d->settingsMap.end() && i.key() == "connection") { QMap innerMap = i.value(); QMap::const_iterator ii = innerMap.find("uuid"); while (ii != innerMap.end() && ii.key() == "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("802-11-wireless"); while (i != d->settingsMap.end() && i.key() == "802-11-wireless") { QMap innerMap = i.value(); QMap::const_iterator ii = innerMap.find("ssid"); while (ii != innerMap.end() && ii.key() == "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("802-3-ethernet"); while (i != d->settingsMap.end() && i.key() == "802-3-ethernet") { QMap innerMap = i.value(); QMap::const_iterator ii = innerMap.find("mac-address"); while (ii != innerMap.end() && ii.key() == "mac-address") { return ii.value().toString(); ii++; } i++; } } else if(getType() == DEVICE_TYPE_802_11_WIRELESS) { QNmSettingsMap::const_iterator i = d->settingsMap.find("802-11-wireless"); while (i != d->settingsMap.end() && i.key() == "802-11-wireless") { QMap innerMap = i.value(); QMap::const_iterator ii = innerMap.find("mac-address"); while (ii != innerMap.end() && ii.key() == "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("802-11-wireless"); while (i != d->settingsMap.end() && i.key() == "802-11-wireless") { QMap innerMap = i.value(); QMap::const_iterator ii = innerMap.find("seen-bssids"); while (ii != innerMap.end() && ii.key() == "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(NM_DBUS_SERVICE, d->path, NM_DBUS_INTERFACE_ACTIVE_CONNECTION, dbusConnection, parent); if (!d->connectionInterface->isValid()) { d->valid = false; qWarning() << "Could not find NetworkManagerSettingsConnection"; return; } d->valid = true; } QNetworkManagerConnectionActive::~QNetworkManagerConnectionActive() { if (nmDBusHelper) delete nmDBusHelper; delete d->connectionInterface; delete d; } bool QNetworkManagerConnectionActive::isValid() { return d->valid; } bool QNetworkManagerConnectionActive::setConnections() { if(!isValid() ) return false; bool allOk = false; if (nmDBusHelper) delete nmDBusHelper; nmDBusHelper = 0; nmDBusHelper = new QNmDBusHelper; connect(nmDBusHelper, SIGNAL(pathForPropertiesChanged(const QString &,QMap)), this,SIGNAL(propertiesChanged( const QString &, QMap))); if(dbusConnection.connect(NM_DBUS_SERVICE, d->path, NM_DBUS_INTERFACE_ACTIVE_CONNECTION, "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(NM_DBUS_SERVICE, d->path, NM_DBUS_INTERFACE_IP4_CONFIG, dbusConnection, parent); if (!d->connectionInterface->isValid()) { d->valid = false; qWarning() << "Could not find NetworkManagerIp4Config"; 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