summaryrefslogtreecommitdiffstats
path: root/src/plugins/bearer
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/bearer')
-rw-r--r--src/plugins/bearer/connman/connman.pro4
-rw-r--r--src/plugins/bearer/connman/qconnmanengine.h2
-rw-r--r--src/plugins/bearer/corewlan/qcorewlanengine.mm23
-rw-r--r--src/plugins/bearer/linux_common/qofonoservice_linux.cpp (renamed from src/plugins/bearer/connman/qofonoservice_linux.cpp)107
-rw-r--r--src/plugins/bearer/linux_common/qofonoservice_linux_p.h (renamed from src/plugins/bearer/connman/qofonoservice_linux_p.h)28
-rw-r--r--src/plugins/bearer/networkmanager/main.cpp5
-rw-r--r--src/plugins/bearer/networkmanager/networkmanager.pro6
-rw-r--r--src/plugins/bearer/networkmanager/qnetworkmanagerengine.cpp659
-rw-r--r--src/plugins/bearer/networkmanager/qnetworkmanagerengine.h37
-rw-r--r--src/plugins/bearer/networkmanager/qnetworkmanagerservice.cpp740
-rw-r--r--src/plugins/bearer/networkmanager/qnetworkmanagerservice.h112
-rw-r--r--src/plugins/bearer/networkmanager/qnmdbushelper.cpp140
-rw-r--r--src/plugins/bearer/networkmanager/qnmdbushelper.h73
-rw-r--r--src/plugins/bearer/qnetworksession_impl.cpp3
14 files changed, 1206 insertions, 733 deletions
diff --git a/src/plugins/bearer/connman/connman.pro b/src/plugins/bearer/connman/connman.pro
index bc4efe8b62..efa13a6ebd 100644
--- a/src/plugins/bearer/connman/connman.pro
+++ b/src/plugins/bearer/connman/connman.pro
@@ -8,14 +8,14 @@ QT = core network-private dbus
CONFIG += link_pkgconfig
HEADERS += qconnmanservice_linux_p.h \
- qofonoservice_linux_p.h \
+ ../linux_common/qofonoservice_linux_p.h \
qconnmanengine.h \
../qnetworksession_impl.h \
../qbearerengine_impl.h
SOURCES += main.cpp \
qconnmanservice_linux.cpp \
- qofonoservice_linux.cpp \
+ ../linux_common/qofonoservice_linux.cpp \
qconnmanengine.cpp \
../qnetworksession_impl.cpp
diff --git a/src/plugins/bearer/connman/qconnmanengine.h b/src/plugins/bearer/connman/qconnmanengine.h
index 52e8b384a0..a995d8ed25 100644
--- a/src/plugins/bearer/connman/qconnmanengine.h
+++ b/src/plugins/bearer/connman/qconnmanengine.h
@@ -48,7 +48,7 @@
#include "../qbearerengine_impl.h"
#include "qconnmanservice_linux_p.h"
-#include "qofonoservice_linux_p.h"
+#include "../linux_common/qofonoservice_linux_p.h"
#include <QMap>
#include <QVariant>
diff --git a/src/plugins/bearer/corewlan/qcorewlanengine.mm b/src/plugins/bearer/corewlan/qcorewlanengine.mm
index 6f9ea91799..55847a04a4 100644
--- a/src/plugins/bearer/corewlan/qcorewlanengine.mm
+++ b/src/plugins/bearer/corewlan/qcorewlanengine.mm
@@ -288,8 +288,6 @@ void QScanThread::getUserConfigurations()
for (NSString *ifName in wifiInterfaces) {
CWInterface *wifiInterface = [CWInterface interfaceWithName: ifName];
- if (!wifiInterface.powerOn)
- continue;
NSString *nsInterfaceName = wifiInterface.ssid;
// add user configured system networks
@@ -311,6 +309,21 @@ void QScanThread::getUserConfigurations()
CFRelease(airportPlist);
}
+ // remembered networks
+ CWConfiguration *userConfig = [wifiInterface configuration];
+ NSOrderedSet *networkProfiles = [userConfig networkProfiles];
+ NSEnumerator *enumerator = [networkProfiles objectEnumerator];
+ CWNetworkProfile *wProfile;
+ while ((wProfile = [enumerator nextObject])) {
+ QString networkName = QCFString::toQString([wProfile ssid]);
+
+ if (!userProfiles.contains(networkName)) {
+ QMap<QString,QString> map;
+ map.insert(networkName, QCFString::toQString(nsInterfaceName));
+ userProfiles.insert(networkName, map);
+ }
+ }
+
// 802.1X user profiles
QString userProfilePath = QDir::homePath() + "/Library/Preferences/com.apple.eap.profiles.plist";
NSDictionary* eapDict = [[[NSDictionary alloc] initWithContentsOfFile: QCFString::toNSString(userProfilePath)] autorelease];
@@ -330,14 +343,14 @@ void QScanThread::getUserConfigurations()
[itemKey getObjects:objects andKeys:keys];
QString networkName;
QString ssid;
- for(int i = 0; i < dictSize; i++) {
+ for (int i = 0; i < dictSize; i++) {
if([nameStr isEqualToString:keys[i]]) {
networkName = QCFString::toQString(objects[i]);
}
- if([networkSsidStr isEqualToString:keys[i]]) {
+ if ([networkSsidStr isEqualToString:keys[i]]) {
ssid = QCFString::toQString(objects[i]);
}
- if(!userProfiles.contains(networkName)
+ if (!userProfiles.contains(networkName)
&& !ssid.isEmpty()) {
QMap<QString,QString> map;
map.insert(ssid, QCFString::toQString(nsInterfaceName));
diff --git a/src/plugins/bearer/connman/qofonoservice_linux.cpp b/src/plugins/bearer/linux_common/qofonoservice_linux.cpp
index acc82bda04..f4460c1be0 100644
--- a/src/plugins/bearer/connman/qofonoservice_linux.cpp
+++ b/src/plugins/bearer/linux_common/qofonoservice_linux.cpp
@@ -95,14 +95,12 @@ QStringList QOfonoManagerInterface::getModems()
{
if (modemList.isEmpty()) {
QList<QVariant> argumentList;
- QDBusPendingReply<PathPropertiesList> reply = asyncCallWithArgumentList(QLatin1String("GetModems"), argumentList);
+ QDBusPendingReply<PathPropertiesList> reply = callWithArgumentList(QDBus::Block, QLatin1String("GetModems"), argumentList);
reply.waitForFinished();
if (!reply.isError()) {
foreach (ObjectPathProperties modem, reply.value()) {
modemList << modem.path.path();
}
- } else {
- qDebug() << reply.error().message();
}
}
@@ -114,7 +112,8 @@ QString QOfonoManagerInterface::currentModem()
QStringList modems = getModems();
foreach (const QString &modem, modems) {
QOfonoModemInterface device(modem);
- if (device.isPowered() && device.isOnline())
+ if (device.isPowered() && device.isOnline()
+ && device.interfaces().contains(QStringLiteral("org.ofono.NetworkRegistration")))
return modem;
}
return QString();
@@ -171,11 +170,17 @@ bool QOfonoModemInterface::isOnline()
return qdbus_cast<bool>(var);
}
+QStringList QOfonoModemInterface::interfaces()
+{
+ const QVariant var = getProperty(QStringLiteral("Interfaces"));
+ return var.toStringList();
+}
+
QVariantMap QOfonoModemInterface::getProperties()
{
if (propertiesMap.isEmpty()) {
QList<QVariant> argumentList;
- QDBusPendingReply<QVariantMap> reply = asyncCallWithArgumentList(QLatin1String("GetProperties"), argumentList);
+ QDBusPendingReply<QVariantMap> reply = callWithArgumentList(QDBus::Block, QLatin1String("GetProperties"), argumentList);
if (!reply.isError()) {
propertiesMap = reply.value();
}
@@ -187,7 +192,8 @@ QVariant QOfonoModemInterface::getProperty(const QString &property)
{
QVariant var;
QVariantMap map = getProperties();
- var = map.value(property);
+ if (map.contains(property))
+ var = map.value(property);
return var;
}
@@ -214,7 +220,8 @@ QVariant QOfonoNetworkRegistrationInterface::getProperty(const QString &property
{
QVariant var;
QVariantMap map = getProperties();
- var = map.value(property);
+ if (map.contains(property))
+ var = map.value(property);
return var;
}
@@ -222,12 +229,10 @@ QVariantMap QOfonoNetworkRegistrationInterface::getProperties()
{
if (propertiesMap.isEmpty()) {
QList<QVariant> argumentList;
- QDBusPendingReply<QVariantMap> reply = asyncCallWithArgumentList(QLatin1String("GetProperties"), argumentList);
+ QDBusPendingReply<QVariantMap> reply = callWithArgumentList(QDBus::Block, QLatin1String("GetProperties"), argumentList);
reply.waitForFinished();
if (!reply.isError()) {
propertiesMap = reply.value();
- } else {
- qDebug() << reply.error().message();
}
}
return propertiesMap;
@@ -264,12 +269,30 @@ QStringList QOfonoDataConnectionManagerInterface::contexts()
return contextList;
}
+PathPropertiesList QOfonoDataConnectionManagerInterface::contextsWithProperties()
+{
+ if (contextListProperties.isEmpty()) {
+ QDBusPendingReply<PathPropertiesList > reply = call(QLatin1String("GetContexts"));
+ reply.waitForFinished();
+ if (!reply.isError()) {
+ contextListProperties = reply.value();
+ }
+ }
+ return contextListProperties;
+}
+
bool QOfonoDataConnectionManagerInterface::roamingAllowed()
{
QVariant var = getProperty(QStringLiteral("RoamingAllowed"));
return qdbus_cast<bool>(var);
}
+QString QOfonoDataConnectionManagerInterface::bearer()
+{
+ QVariant var = getProperty(QStringLiteral("Bearer"));
+ return qdbus_cast<QString>(var);
+}
+
QVariant QOfonoDataConnectionManagerInterface::getProperty(const QString &property)
{
return getProperties().value(property);
@@ -279,7 +302,7 @@ QVariantMap &QOfonoDataConnectionManagerInterface::getProperties()
{
if (propertiesMap.isEmpty()) {
QList<QVariant> argumentList;
- QDBusPendingReply<QVariantMap> reply = asyncCallWithArgumentList(QLatin1String("GetProperties"), argumentList);
+ QDBusPendingReply<QVariantMap> reply = callWithArgumentList(QDBus::Block, QLatin1String("GetProperties"), argumentList);
if (!reply.isError()) {
propertiesMap = reply.value();
}
@@ -294,6 +317,68 @@ void QOfonoDataConnectionManagerInterface::propertyChanged(const QString &name,
Q_EMIT roamingAllowedChanged(value.variant().toBool());
}
+
+QOfonoConnectionContextInterface::QOfonoConnectionContextInterface(const QString &dbusPathName, QObject *parent)
+ : QDBusAbstractInterface(QLatin1String(OFONO_SERVICE),
+ dbusPathName,
+ OFONO_CONNECTION_CONTEXT_INTERFACE,
+ QDBusConnection::systemBus(), parent)
+{
+ QDBusConnection::systemBus().connect(QLatin1String(OFONO_SERVICE),
+ path(),
+ QLatin1String(OFONO_MODEM_INTERFACE),
+ QLatin1String("PropertyChanged"),
+ this,SLOT(propertyChanged(QString,QDBusVariant)));
+}
+
+QOfonoConnectionContextInterface::~QOfonoConnectionContextInterface()
+{
+}
+
+QVariantMap QOfonoConnectionContextInterface::getProperties()
+{
+ if (propertiesMap.isEmpty()) {
+ QList<QVariant> argumentList;
+ QDBusPendingReply<QVariantMap> reply = callWithArgumentList(QDBus::Block, QLatin1String("GetProperties"), argumentList);
+ if (!reply.isError()) {
+ propertiesMap = reply.value();
+ }
+ }
+ return propertiesMap;
+}
+
+void QOfonoConnectionContextInterface::propertyChanged(const QString &name, const QDBusVariant &value)
+{
+ propertiesMap[name] = value.variant();
+}
+
+QVariant QOfonoConnectionContextInterface::getProperty(const QString &property)
+{
+ QVariant var;
+ QVariantMap map = getProperties();
+ if (map.contains(property))
+ var = map.value(property);
+ return var;
+}
+
+bool QOfonoConnectionContextInterface::active()
+{
+ QVariant var = getProperty(QStringLiteral("Active"));
+ return qdbus_cast<bool>(var);
+}
+
+QString QOfonoConnectionContextInterface::accessPointName()
+{
+ QVariant var = getProperty(QStringLiteral("AccessPointName"));
+ return qdbus_cast<QString>(var);
+}
+
+QString QOfonoConnectionContextInterface::name()
+{
+ QVariant var = getProperty(QStringLiteral("Name"));
+ return qdbus_cast<QString>(var);
+}
+
QT_END_NAMESPACE
#endif // QT_NO_DBUS
diff --git a/src/plugins/bearer/connman/qofonoservice_linux_p.h b/src/plugins/bearer/linux_common/qofonoservice_linux_p.h
index 302d7543d4..8adb8db19c 100644
--- a/src/plugins/bearer/connman/qofonoservice_linux_p.h
+++ b/src/plugins/bearer/linux_common/qofonoservice_linux_p.h
@@ -67,6 +67,7 @@
#define OFONO_MODEM_INTERFACE "org.ofono.Modem"
#define OFONO_NETWORK_REGISTRATION_INTERFACE "org.ofono.NetworkRegistration"
#define OFONO_DATA_CONNECTION_MANAGER_INTERFACE "org.ofono.ConnectionManager"
+#define OFONO_CONNECTION_CONTEXT_INTERFACE "org.ofono.ConnectionContext"
QT_BEGIN_NAMESPACE
@@ -114,6 +115,7 @@ public:
bool isPowered();
bool isOnline();
+ QStringList interfaces();
private:
QVariantMap getProperties();
QVariantMap propertiesMap;
@@ -151,18 +153,42 @@ public:
~QOfonoDataConnectionManagerInterface();
QStringList contexts();
+ PathPropertiesList contextsWithProperties();
bool roamingAllowed();
+ QVariant getProperty(const QString &);
+ QString bearer();
Q_SIGNALS:
void roamingAllowedChanged(bool);
private:
QVariantMap &getProperties();
QVariantMap propertiesMap;
- QVariant getProperty(const QString &);
QStringList contextList;
+ PathPropertiesList contextListProperties;
private Q_SLOTS:
void propertyChanged(const QString &, const QDBusVariant &value);
};
+class QOfonoConnectionContextInterface : public QDBusAbstractInterface
+{
+ Q_OBJECT
+
+public:
+
+ explicit QOfonoConnectionContextInterface(const QString &dbusPathName, QObject *parent = 0);
+ ~QOfonoConnectionContextInterface();
+
+ QVariant getProperty(const QString &);
+ bool active();
+ QString accessPointName();
+ QString name();
+
+Q_SIGNALS:
+private:
+ QVariantMap getProperties();
+ QVariantMap propertiesMap;
+private slots:
+ void propertyChanged(const QString &, const QDBusVariant &value);
+};
QT_END_NAMESPACE
diff --git a/src/plugins/bearer/networkmanager/main.cpp b/src/plugins/bearer/networkmanager/main.cpp
index f416bb42a6..3576ddc37c 100644
--- a/src/plugins/bearer/networkmanager/main.cpp
+++ b/src/plugins/bearer/networkmanager/main.cpp
@@ -66,10 +66,7 @@ QBearerEngine *QNetworkManagerEnginePlugin::create(const QString &key) const
{
if (key == QLatin1String("networkmanager")) {
QNetworkManagerEngine *engine = new QNetworkManagerEngine;
- if (engine->networkManagerAvailable())
- return engine;
- else
- delete engine;
+ return engine;
}
return 0;
diff --git a/src/plugins/bearer/networkmanager/networkmanager.pro b/src/plugins/bearer/networkmanager/networkmanager.pro
index 1ed9bfaa1b..b3a270615c 100644
--- a/src/plugins/bearer/networkmanager/networkmanager.pro
+++ b/src/plugins/bearer/networkmanager/networkmanager.pro
@@ -6,16 +6,16 @@ load(qt_plugin)
QT = core network-private dbus
-HEADERS += qnmdbushelper.h \
- qnetworkmanagerservice.h \
+HEADERS += qnetworkmanagerservice.h \
qnetworkmanagerengine.h \
+ ../linux_common/qofonoservice_linux_p.h \
../qnetworksession_impl.h \
../qbearerengine_impl.h
SOURCES += main.cpp \
- qnmdbushelper.cpp \
qnetworkmanagerservice.cpp \
qnetworkmanagerengine.cpp \
+ ../linux_common/qofonoservice_linux.cpp \
../qnetworksession_impl.cpp
OTHER_FILES += networkmanager.json
diff --git a/src/plugins/bearer/networkmanager/qnetworkmanagerengine.cpp b/src/plugins/bearer/networkmanager/qnetworkmanagerengine.cpp
index 5f49ea0b6d..f0977b4735 100644
--- a/src/plugins/bearer/networkmanager/qnetworkmanagerengine.cpp
+++ b/src/plugins/bearer/networkmanager/qnetworkmanagerengine.cpp
@@ -47,6 +47,7 @@
#include <QDBusInterface>
#include <QDBusMessage>
#include <QDBusReply>
+#include "../linux_common/qofonoservice_linux_p.h"
#ifndef QT_NO_BEARERMANAGEMENT
#ifndef QT_NO_DBUS
@@ -55,47 +56,85 @@ QT_BEGIN_NAMESPACE
QNetworkManagerEngine::QNetworkManagerEngine(QObject *parent)
: QBearerEngineImpl(parent),
- managerInterface(new QNetworkManagerInterface(this)),
- systemSettings(new QNetworkManagerSettings(NM_DBUS_SERVICE, this)),
- userSettings(new QNetworkManagerSettings(NM_DBUS_SERVICE, this))
+ managerInterface(NULL),
+ systemSettings(NULL),
+ ofonoManager(NULL),
+ nmAvailable(false)
{
- if (!managerInterface->isValid())
- return;
-
- managerInterface->setConnections();
- connect(managerInterface, SIGNAL(deviceAdded(QDBusObjectPath)),
- this, SLOT(deviceAdded(QDBusObjectPath)));
- connect(managerInterface, SIGNAL(deviceRemoved(QDBusObjectPath)),
- this, SLOT(deviceRemoved(QDBusObjectPath)));
- connect(managerInterface, SIGNAL(activationFinished(QDBusPendingCallWatcher*)),
- this, SLOT(activationFinished(QDBusPendingCallWatcher*)));
- connect(managerInterface, SIGNAL(propertiesChanged(QString,QMap<QString,QVariant>)),
- this, SLOT(interfacePropertiesChanged(QString,QMap<QString,QVariant>)));
-
qDBusRegisterMetaType<QNmSettingsMap>();
- systemSettings->setConnections();
- connect(systemSettings, SIGNAL(newConnection(QDBusObjectPath)),
- this, SLOT(newConnection(QDBusObjectPath)));
-
- userSettings->setConnections();
- connect(userSettings, SIGNAL(newConnection(QDBusObjectPath)),
- this, SLOT(newConnection(QDBusObjectPath)));
+ nmWatcher = new QDBusServiceWatcher(NM_DBUS_SERVICE,QDBusConnection::systemBus(),
+ QDBusServiceWatcher::WatchForRegistration |
+ QDBusServiceWatcher::WatchForUnregistration, this);
+ connect(nmWatcher, SIGNAL(serviceRegistered(QString)),
+ this, SLOT(nmRegistered(QString)));
+ connect(nmWatcher, SIGNAL(serviceUnregistered(QString)),
+ this, SLOT(nmUnRegistered(QString)));
+
+ ofonoWatcher = new QDBusServiceWatcher("org.ofono",QDBusConnection::systemBus(),
+ QDBusServiceWatcher::WatchForRegistration |
+ QDBusServiceWatcher::WatchForUnregistration, this);
+ connect(ofonoWatcher, SIGNAL(serviceRegistered(QString)),
+ this, SLOT(ofonoRegistered(QString)));
+ connect(ofonoWatcher, SIGNAL(serviceUnregistered(QString)),
+ this, SLOT(ofonoUnRegistered(QString)));
+
+ if (QDBusConnection::systemBus().interface()->isServiceRegistered("org.ofono"))
+ ofonoRegistered();
+
+ if (QDBusConnection::systemBus().interface()->isServiceRegistered(NM_DBUS_SERVICE))
+ nmRegistered();
}
QNetworkManagerEngine::~QNetworkManagerEngine()
{
qDeleteAll(connections);
+ connections.clear();
qDeleteAll(accessPoints);
+ accessPoints.clear();
qDeleteAll(wirelessDevices);
- qDeleteAll(activeConnections);
+ wirelessDevices.clear();
+ qDeleteAll(activeConnectionsList);
+ activeConnectionsList.clear();
+ qDeleteAll(interfaceDevices);
+ interfaceDevices.clear();
+
+ connectionInterfaces.clear();
+
+ qDeleteAll(ofonoContextManagers);
+ ofonoContextManagers.clear();
+
+ qDeleteAll(wiredDevices);
+ wiredDevices.clear();
}
void QNetworkManagerEngine::initialize()
{
+ if (nmAvailable)
+ setupConfigurations();
+}
+
+void QNetworkManagerEngine::setupConfigurations()
+{
QMutexLocker locker(&mutex);
+ // Get active connections.
+ foreach (const QDBusObjectPath &acPath, managerInterface->activeConnections()) {
- // Get current list of access points.
+ QNetworkManagerConnectionActive *activeConnection =
+ new QNetworkManagerConnectionActive(acPath.path(),this);
+ activeConnectionsList.insert(acPath.path(), activeConnection);
+ connect(activeConnection, SIGNAL(propertiesChanged(QMap<QString,QVariant>)),
+ this, SLOT(activeConnectionPropertiesChanged(QMap<QString,QVariant>)));
+ activeConnection->setConnections();
+
+ QStringList devices = activeConnection->devices();
+ if (!devices.isEmpty()) {
+ QNetworkManagerInterfaceDevice device(devices.at(0),this);
+ connectionInterfaces.insert(activeConnection->connection().path(),device.networkInterface());
+ }
+ }
+
+ // Get current list of access points.
foreach (const QDBusObjectPath &devicePath, managerInterface->getDevices()) {
locker.unlock();
deviceAdded(devicePath); //add all accesspoints
@@ -103,7 +142,6 @@ void QNetworkManagerEngine::initialize()
}
// Get connections.
-
foreach (const QDBusObjectPath &settingsPath, systemSettings->listConnections()) {
locker.unlock();
if (!hasIdentifier(settingsPath.path()))
@@ -111,57 +149,19 @@ void QNetworkManagerEngine::initialize()
locker.relock();
}
- foreach (const QDBusObjectPath &settingsPath, userSettings->listConnections()) {
- locker.unlock();
- if (!hasIdentifier(settingsPath.path()))
- newConnection(settingsPath, userSettings);
- locker.relock();
- }
-
- // Get active connections.
- foreach (const QDBusObjectPath &acPath, managerInterface->activeConnections()) {
- QNetworkManagerConnectionActive *activeConnection =
- new QNetworkManagerConnectionActive(acPath.path(),this);
- activeConnections.insert(acPath.path(), activeConnection);
-
- activeConnection->setConnections();
- connect(activeConnection, SIGNAL(propertiesChanged(QString,QMap<QString,QVariant>)),
- this, SLOT(activeConnectionPropertiesChanged(QString,QMap<QString,QVariant>)));
- }
Q_EMIT updateCompleted();
}
bool QNetworkManagerEngine::networkManagerAvailable() const
{
- QMutexLocker locker(&mutex);
-
- return managerInterface->isValid();
+ return nmAvailable;
}
-QString QNetworkManagerEngine::getInterfaceFromId(const QString &id)
+QString QNetworkManagerEngine::getInterfaceFromId(const QString &settingsPath)
{
- QMutexLocker locker(&mutex);
-
- foreach (const QDBusObjectPath &acPath, managerInterface->activeConnections()) {
- QNetworkManagerConnectionActive activeConnection(acPath.path());
-
- const QString identifier = activeConnection.connection().path();
-
- if (id == identifier) {
- QList<QDBusObjectPath> devices = activeConnection.devices();
-
- if (devices.isEmpty())
- continue;
-
- QNetworkManagerInterfaceDevice device(devices.at(0).path());
- return device.networkInterface();
- }
- }
-
- return QString();
+ return connectionInterfaces.value(settingsPath);
}
-
bool QNetworkManagerEngine::hasIdentifier(const QString &id)
{
QMutexLocker locker(&mutex);
@@ -177,35 +177,37 @@ void QNetworkManagerEngine::connectToId(const QString &id)
if (!connection)
return;
- QNmSettingsMap map = connection->getSettings();
- const QString connectionType = map.value("connection").value("type").toString();
+ NMDeviceType connectionType = connection->getType();
QString dbusDevicePath;
- foreach (const QDBusObjectPath &devicePath, managerInterface->getDevices()) {
- QNetworkManagerInterfaceDevice device(devicePath.path());
- if (device.deviceType() == DEVICE_TYPE_ETHERNET &&
- connectionType == QLatin1String("802-3-ethernet")) {
- dbusDevicePath = devicePath.path();
+ const QString settingsPath = connection->connectionInterface()->path();
+ QString specificPath = configuredAccessPoints.key(settingsPath);
+
+ if (isConnectionActive(settingsPath))
+ return;
+
+ QHashIterator<QString, QNetworkManagerInterfaceDevice*> i(interfaceDevices);
+ while (i.hasNext()) {
+ i.next();
+ if (i.value()->deviceType() == DEVICE_TYPE_ETHERNET &&
+ connectionType == DEVICE_TYPE_ETHERNET) {
+ dbusDevicePath = i.key();
break;
- } else if (device.deviceType() == DEVICE_TYPE_WIFI &&
- connectionType == QLatin1String("802-11-wireless")) {
- dbusDevicePath = devicePath.path();
+ } else if (i.value()->deviceType() == DEVICE_TYPE_WIFI &&
+ connectionType == DEVICE_TYPE_WIFI) {
+ dbusDevicePath = i.key();
break;
- } else if (device.deviceType() == DEVICE_TYPE_MODEM &&
- connectionType == QLatin1String("gsm")) {
- dbusDevicePath = devicePath.path();
+ } else if (i.value()->deviceType() == DEVICE_TYPE_MODEM &&
+ connectionType == DEVICE_TYPE_MODEM) {
+ dbusDevicePath = i.key();
break;
}
}
- const QString service = connection->connectionInterface()->service();
- const QString settingsPath = connection->connectionInterface()->path();
- QString specificPath = configuredAccessPoints.key(settingsPath);
-
if (specificPath.isEmpty())
specificPath = "/";
- managerInterface->activateConnection(service, QDBusObjectPath(settingsPath),
+ managerInterface->activateConnection(QDBusObjectPath(settingsPath),
QDBusObjectPath(dbusDevicePath), QDBusObjectPath(specificPath));
}
@@ -221,13 +223,11 @@ void QNetworkManagerEngine::disconnectFromId(const QString &id)
return;
}
- foreach (const QDBusObjectPath &acPath, managerInterface->activeConnections()) {
- QNetworkManagerConnectionActive activeConnection(acPath.path());
-
- const QString identifier = activeConnection.connection().path();
-
- if (id == identifier && accessPointConfigurations.contains(id)) {
- managerInterface->deactivateConnection(acPath);
+ QHashIterator<QString, QNetworkManagerConnectionActive*> i(activeConnectionsList);
+ while (i.hasNext()) {
+ i.next();
+ if (id == i.value()->connection().path() && accessPointConfigurations.contains(id)) {
+ managerInterface->deactivateConnection(QDBusObjectPath(i.key()));
break;
}
}
@@ -235,7 +235,7 @@ void QNetworkManagerEngine::disconnectFromId(const QString &id)
void QNetworkManagerEngine::requestUpdate()
{
- if (managerInterface->wirelessEnabled()) {
+ if (managerInterface && managerInterface->wirelessEnabled()) {
QHashIterator<QString, QNetworkManagerInterfaceDeviceWireless *> i(wirelessDevices);
while (i.hasNext()) {
i.next();
@@ -250,12 +250,9 @@ void QNetworkManagerEngine::scanFinished()
QMetaObject::invokeMethod(this, "updateCompleted", Qt::QueuedConnection);
}
-void QNetworkManagerEngine::interfacePropertiesChanged(const QString &path,
- const QMap<QString, QVariant> &properties)
+void QNetworkManagerEngine::interfacePropertiesChanged(const QMap<QString, QVariant> &properties)
{
- Q_UNUSED(path)
QMutexLocker locker(&mutex);
-
QMapIterator<QString, QVariant> i(properties);
while (i.hasNext()) {
i.next();
@@ -267,22 +264,20 @@ void QNetworkManagerEngine::interfacePropertiesChanged(const QString &path,
qdbus_cast<QList<QDBusObjectPath> >(i.value().value<QDBusArgument>());
QStringList identifiers = accessPointConfigurations.keys();
- foreach (const QString &id, identifiers)
- QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.value(id);
-
- QStringList priorActiveConnections = this->activeConnections.keys();
+ QStringList priorActiveConnections = activeConnectionsList.keys();
foreach (const QDBusObjectPath &acPath, activeConnections) {
priorActiveConnections.removeOne(acPath.path());
QNetworkManagerConnectionActive *activeConnection =
- this->activeConnections.value(acPath.path());
+ activeConnectionsList.value(acPath.path());
+
if (!activeConnection) {
activeConnection = new QNetworkManagerConnectionActive(acPath.path(),this);
- this->activeConnections.insert(acPath.path(), activeConnection);
+ activeConnectionsList.insert(acPath.path(), activeConnection);
+ connect(activeConnection, SIGNAL(propertiesChanged(QMap<QString,QVariant>)),
+ this, SLOT(activeConnectionPropertiesChanged(QMap<QString,QVariant>)));
activeConnection->setConnections();
- connect(activeConnection, SIGNAL(propertiesChanged(QString,QMap<QString,QVariant>)),
- this, SLOT(activeConnectionPropertiesChanged(QString,QMap<QString,QVariant>)));
}
const QString id = activeConnection->connection().path();
@@ -293,8 +288,14 @@ void QNetworkManagerEngine::interfacePropertiesChanged(const QString &path,
if (ptr) {
ptr->mutex.lock();
if (activeConnection->state() == NM_ACTIVE_CONNECTION_STATE_ACTIVATED &&
- ptr->state != QNetworkConfiguration::Active) {
- ptr->state = QNetworkConfiguration::Active;
+ (ptr->state & QNetworkConfiguration::Active) != QNetworkConfiguration::Active) {
+
+ ptr->state |= QNetworkConfiguration::Active;
+
+ if (activeConnectionsList.value(id) && activeConnectionsList.value(id)->defaultRoute()
+ && managerInterface->state() < QNetworkManagerInterface::NM_STATE_CONNECTED_GLOBAL) {
+ ptr->purpose = QNetworkConfiguration::PrivatePurpose;
+ }
ptr->mutex.unlock();
locker.unlock();
@@ -307,7 +308,7 @@ void QNetworkManagerEngine::interfacePropertiesChanged(const QString &path,
}
while (!priorActiveConnections.isEmpty())
- delete this->activeConnections.take(priorActiveConnections.takeFirst());
+ delete activeConnectionsList.take(priorActiveConnections.takeFirst());
while (!identifiers.isEmpty()) {
QNetworkConfigurationPrivatePointer ptr =
@@ -330,14 +331,13 @@ void QNetworkManagerEngine::interfacePropertiesChanged(const QString &path,
}
}
-void QNetworkManagerEngine::activeConnectionPropertiesChanged(const QString &path,
- const QMap<QString, QVariant> &properties)
+void QNetworkManagerEngine::activeConnectionPropertiesChanged(const QMap<QString, QVariant> &properties)
{
QMutexLocker locker(&mutex);
Q_UNUSED(properties)
- QNetworkManagerConnectionActive *activeConnection = activeConnections.value(path);
+ QNetworkManagerConnectionActive *activeConnection = qobject_cast<QNetworkManagerConnectionActive *>(sender());
if (!activeConnection)
return;
@@ -346,32 +346,34 @@ void QNetworkManagerEngine::activeConnectionPropertiesChanged(const QString &pat
QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.value(id);
if (ptr) {
- ptr->mutex.lock();
- if (activeConnection->state() == NM_ACTIVE_CONNECTION_STATE_ACTIVATED &&
- ptr->state != QNetworkConfiguration::Active) {
- ptr->state |= QNetworkConfiguration::Active;
- ptr->mutex.unlock();
-
- locker.unlock();
- emit configurationChanged(ptr);
- locker.relock();
- } else {
- ptr->mutex.unlock();
+ if (properties.contains(QStringLiteral("State"))) {
+ ptr->mutex.lock();
+ if (properties.value("State").toUInt() == NM_ACTIVE_CONNECTION_STATE_ACTIVATED) {
+ QStringList devices = activeConnection->devices();
+ if (!devices.isEmpty()) {
+ QNetworkManagerInterfaceDevice device(devices.at(0),this);
+ connectionInterfaces.insert(id,device.networkInterface());
+ }
+
+ ptr->state |= QNetworkConfiguration::Active;
+ ptr->mutex.unlock();
+
+ locker.unlock();
+ emit configurationChanged(ptr);
+ locker.relock();
+ } else {
+ connectionInterfaces.remove(id);
+ ptr->mutex.unlock();
+ }
}
}
}
-void QNetworkManagerEngine::devicePropertiesChanged(const QString &/*path*/,quint32 /*state*/)
-{
-// Q_UNUSED(path);
-// Q_UNUSED(state)
-}
-
-void QNetworkManagerEngine::deviceConnectionsChanged(const QStringList &activeConnectionsList)
+void QNetworkManagerEngine::deviceConnectionsChanged(const QStringList &connectionsList)
{
QMutexLocker locker(&mutex);
for (int i = 0; i < connections.count(); ++i) {
- if (activeConnectionsList.contains(connections.at(i)->connectionInterface()->path()))
+ if (connectionsList.contains(connections.at(i)->connectionInterface()->path()))
continue;
const QString settingsPath = connections.at(i)->connectionInterface()->path();
@@ -392,33 +394,33 @@ void QNetworkManagerEngine::deviceConnectionsChanged(const QStringList &activeCo
void QNetworkManagerEngine::deviceAdded(const QDBusObjectPath &path)
{
- QMutexLocker locker(&mutex);
QNetworkManagerInterfaceDevice *iDevice;
iDevice = new QNetworkManagerInterfaceDevice(path.path(),this);
connect(iDevice,SIGNAL(connectionsChanged(QStringList)),
this,SLOT(deviceConnectionsChanged(QStringList)));
- connect(iDevice,SIGNAL(stateChanged(QString,quint32)),
- this,SLOT(devicePropertiesChanged(QString,quint32)));
iDevice->setConnections();
interfaceDevices.insert(path.path(),iDevice);
-
if (iDevice->deviceType() == DEVICE_TYPE_WIFI) {
QNetworkManagerInterfaceDeviceWireless *wirelessDevice =
new QNetworkManagerInterfaceDeviceWireless(iDevice->connectionInterface()->path(),this);
- wirelessDevice->setConnections();
connect(wirelessDevice, SIGNAL(accessPointAdded(QString)),
this, SLOT(newAccessPoint(QString)));
connect(wirelessDevice, SIGNAL(accessPointRemoved(QString)),
this, SLOT(removeAccessPoint(QString)));
connect(wirelessDevice,SIGNAL(scanDone()),this,SLOT(scanFinished()));
-
- foreach (const QDBusObjectPath &apPath, wirelessDevice->getAccessPoints())
- newAccessPoint(apPath.path());
+ wirelessDevice->setConnections();
wirelessDevices.insert(path.path(), wirelessDevice);
}
+
+ if (iDevice->deviceType() == DEVICE_TYPE_ETHERNET) {
+ QNetworkManagerInterfaceDeviceWired *wiredDevice =
+ new QNetworkManagerInterfaceDeviceWired(iDevice->connectionInterface()->path(),this);
+ connect(wiredDevice,SIGNAL(carrierChanged(bool)),this,SLOT(wiredCarrierChanged(bool)));
+ wiredDevices.insert(iDevice->connectionInterface()->path(), wiredDevice);
+ }
}
void QNetworkManagerEngine::deviceRemoved(const QDBusObjectPath &path)
@@ -435,6 +437,41 @@ void QNetworkManagerEngine::deviceRemoved(const QDBusObjectPath &path)
delete wirelessDevices.take(path.path());
locker.relock();
}
+ if (wiredDevices.contains(path.path())) {
+ locker.unlock();
+ delete wiredDevices.take(path.path());
+ locker.relock();
+ }
+}
+
+void QNetworkManagerEngine::wiredCarrierChanged(bool carrier)
+{
+ QNetworkManagerInterfaceDeviceWired *deviceWired = qobject_cast<QNetworkManagerInterfaceDeviceWired *>(sender());
+ if (!deviceWired)
+ return;
+ QMutexLocker locker(&mutex);
+ foreach (const QDBusObjectPath &settingsPath, systemSettings->listConnections()) {
+ for (int i = 0; i < connections.count(); ++i) {
+ QNetworkManagerSettingsConnection *connection = connections.at(i);
+ if (connection->getType() == DEVICE_TYPE_ETHERNET
+ && settingsPath.path() == connection->connectionInterface()->path()) {
+ QNetworkConfigurationPrivatePointer ptr =
+ accessPointConfigurations.value(settingsPath.path());
+
+ if (ptr) {
+ ptr->mutex.lock();
+ if (carrier)
+ ptr->state |= QNetworkConfiguration::Discovered;
+ else
+ ptr->state = QNetworkConfiguration::Defined;
+ ptr->mutex.unlock();
+ locker.unlock();
+ emit configurationChanged(ptr);
+ return;
+ }
+ }
+ }
+ }
}
void QNetworkManagerEngine::newConnection(const QDBusObjectPath &path,
@@ -444,67 +481,102 @@ void QNetworkManagerEngine::newConnection(const QDBusObjectPath &path,
if (!settings)
settings = qobject_cast<QNetworkManagerSettings *>(sender());
- if (!settings)
+ if (!settings) {
return;
+ }
- settings->deleteLater();
QNetworkManagerSettingsConnection *connection =
new QNetworkManagerSettingsConnection(settings->connectionInterface()->service(),
path.path(),this);
- QString apPath;
- for (int i = 0; i < accessPoints.count(); ++i) {
- if (connection->getSsid() == accessPoints.at(i)->ssid()) {
- // remove the corresponding accesspoint from configurations
- apPath = accessPoints.at(i)->connectionInterface()->path();
-
- QNetworkConfigurationPrivatePointer ptr
- = accessPointConfigurations.take(apPath);
- if (ptr) {
- locker.unlock();
- emit configurationRemoved(ptr);
- locker.relock();
- }
- }
+ const QString settingsPath = connection->connectionInterface()->path();
+ if (accessPointConfigurations.contains(settingsPath)) {
+ return;
}
+
connections.append(connection);
connect(connection,SIGNAL(removed(QString)),this,SLOT(removeConnection(QString)));
connect(connection,SIGNAL(updated()),this,SLOT(updateConnection()));
connection->setConnections();
- const QString settingsPath = connection->connectionInterface()->path();
+ NMDeviceType deviceType = connection->getType();
- if (connection->getType() == DEVICE_TYPE_WIFI
- && !configuredAccessPoints.contains(settingsPath))
- configuredAccessPoints.insert(apPath,settingsPath);
+ if (deviceType == DEVICE_TYPE_WIFI) {
+ QString apPath;
+ for (int i = 0; i < accessPoints.count(); ++i) {
+ if (connection->getSsid() == accessPoints.at(i)->ssid()) {
+ // remove the corresponding accesspoint from configurations
+ apPath = accessPoints.at(i)->connectionInterface()->path();
+ QNetworkConfigurationPrivatePointer ptr
+ = accessPointConfigurations.take(apPath);
+ if (ptr) {
+ locker.unlock();
+ emit configurationRemoved(ptr);
+ locker.relock();
+ }
+ }
+ }
+ if (!configuredAccessPoints.contains(settingsPath))
+ configuredAccessPoints.insert(apPath,settingsPath);
+ }
QNetworkConfigurationPrivate *cpPriv =
parseConnection(settingsPath, connection->getSettings());
// Check if connection is active.
- foreach (const QDBusObjectPath &acPath, managerInterface->activeConnections()) {
- QNetworkManagerConnectionActive activeConnection(acPath.path());
+ if (isConnectionActive(settingsPath))
+ cpPriv->state |= QNetworkConfiguration::Active;
+
+ if (deviceType == DEVICE_TYPE_ETHERNET) {
+ QHashIterator<QString, QNetworkManagerInterfaceDevice*> i(interfaceDevices);
+ while (i.hasNext()) {
+ i.next();
+ if (i.value()->deviceType() == deviceType) {
+ QNetworkManagerInterfaceDeviceWired *wiredDevice
+ = wiredDevices.value(i.value()->connectionInterface()->path());
+ if (wiredDevice->carrier()) {
+ cpPriv->state |= QNetworkConfiguration::Discovered;
+ }
+ }
+ }
+ }
- if (activeConnection.defaultRoute() &&
- activeConnection.connection().path() == settingsPath &&
- activeConnection.state() == NM_ACTIVE_CONNECTION_STATE_ACTIVATED) {
- cpPriv->state |= QNetworkConfiguration::Active;
- break;
- }
- }
QNetworkConfigurationPrivatePointer ptr(cpPriv);
accessPointConfigurations.insert(ptr->id, ptr);
-
locker.unlock();
emit configurationAdded(ptr);
}
+bool QNetworkManagerEngine::isConnectionActive(const QString &settingsPath)
+{
+ QHashIterator<QString, QNetworkManagerConnectionActive*> i(activeConnectionsList);
+ while (i.hasNext()) {
+ i.next();
+ if (i.value()->connection().path() == settingsPath) {
+ if (i.value()->state() == NM_ACTIVE_CONNECTION_STATE_ACTIVATING
+ || i.value()->state() == NM_ACTIVE_CONNECTION_STATE_ACTIVATED) {
+ return true;
+ } else {
+ break;
+ }
+ }
+ }
+
+ QNetworkManagerSettingsConnection *settingsConnection = connectionFromId(settingsPath);
+ if (settingsConnection->getType() == DEVICE_TYPE_MODEM) {
+ return isActiveContext(settingsConnection->connectionInterface()->path());
+ }
+
+ return false;
+}
+
void QNetworkManagerEngine::removeConnection(const QString &path)
{
QMutexLocker locker(&mutex);
QNetworkManagerSettingsConnection *connection =
qobject_cast<QNetworkManagerSettingsConnection *>(sender());
+
if (!connection)
return;
@@ -525,6 +597,7 @@ void QNetworkManagerEngine::removeConnection(const QString &path)
while (i.hasNext()) {
i.next();
if (i.value() == path) {
+ configuredAccessPoints.remove(i.key());
newAccessPoint(i.key());
}
}
@@ -538,8 +611,6 @@ void QNetworkManagerEngine::updateConnection()
qobject_cast<QNetworkManagerSettingsConnection *>(sender());
if (!connection)
return;
-
- connection->deleteLater();
const QString settingsPath = connection->connectionInterface()->path();
QNetworkConfigurationPrivate *cpPriv = parseConnection(settingsPath, connection->getSettings());
@@ -575,10 +646,9 @@ void QNetworkManagerEngine::updateConnection()
void QNetworkManagerEngine::activationFinished(QDBusPendingCallWatcher *watcher)
{
QMutexLocker locker(&mutex);
-
+ QDBusPendingReply<QDBusObjectPath> reply(*watcher);
watcher->deleteLater();
- QDBusPendingReply<QDBusObjectPath> reply(*watcher);
if (!reply.isError()) {
QDBusObjectPath result = reply.value();
@@ -607,7 +677,6 @@ void QNetworkManagerEngine::activationFinished(QDBusPendingCallWatcher *watcher)
void QNetworkManagerEngine::newAccessPoint(const QString &path)
{
QMutexLocker locker(&mutex);
-
QNetworkManagerInterfaceAccessPoint *accessPoint =
new QNetworkManagerInterfaceAccessPoint(path,this);
@@ -620,15 +689,14 @@ void QNetworkManagerEngine::newAccessPoint(const QString &path)
if (okToAdd) {
accessPoints.append(accessPoint);
accessPoint->setConnections();
- connect(accessPoint, SIGNAL(propertiesChanged(QMap<QString,QVariant>)),
- this, SLOT(updateAccessPoint(QMap<QString,QVariant>)));
}
-
// Check if configuration exists for connection.
if (!accessPoint->ssid().isEmpty()) {
+
for (int i = 0; i < connections.count(); ++i) {
QNetworkManagerSettingsConnection *connection = connections.at(i);
const QString settingsPath = connection->connectionInterface()->path();
+
if (accessPoint->ssid() == connection->getSsid()) {
if (!configuredAccessPoints.contains(path)) {
configuredAccessPoints.insert(path,settingsPath);
@@ -639,6 +707,9 @@ void QNetworkManagerEngine::newAccessPoint(const QString &path)
ptr->mutex.lock();
QNetworkConfiguration::StateFlags flag = QNetworkConfiguration::Defined;
ptr->state = (flag | QNetworkConfiguration::Discovered);
+
+ if (isConnectionActive(settingsPath))
+ ptr->state = (flag | QNetworkConfiguration::Active);
ptr->mutex.unlock();
locker.unlock();
@@ -655,11 +726,7 @@ void QNetworkManagerEngine::newAccessPoint(const QString &path)
ptr->isValid = true;
ptr->id = path;
ptr->type = QNetworkConfiguration::InternetAccessPoint;
- if (accessPoint->flags() == NM_802_11_AP_FLAGS_PRIVACY) {
- ptr->purpose = QNetworkConfiguration::PrivatePurpose;
- } else {
- ptr->purpose = QNetworkConfiguration::PublicPurpose;
- }
+ ptr->purpose = QNetworkConfiguration::PublicPurpose;
ptr->state = QNetworkConfiguration::Undefined;
ptr->bearerType = QNetworkConfiguration::BearerWLAN;
@@ -674,13 +741,13 @@ void QNetworkManagerEngine::removeAccessPoint(const QString &path)
QMutexLocker locker(&mutex);
for (int i = 0; i < accessPoints.count(); ++i) {
QNetworkManagerInterfaceAccessPoint *accessPoint = accessPoints.at(i);
-
if (accessPoint->connectionInterface()->path() == path) {
accessPoints.removeOne(accessPoint);
if (configuredAccessPoints.contains(accessPoint->connectionInterface()->path())) {
// find connection and change state to Defined
configuredAccessPoints.remove(accessPoint->connectionInterface()->path());
+
for (int i = 0; i < connections.count(); ++i) {
QNetworkManagerSettingsConnection *connection = connections.at(i);
@@ -706,8 +773,6 @@ void QNetworkManagerEngine::removeAccessPoint(const QString &path)
if (ptr) {
locker.unlock();
-
- locker.unlock();
emit configurationRemoved(ptr);
locker.relock();
}
@@ -718,46 +783,12 @@ void QNetworkManagerEngine::removeAccessPoint(const QString &path)
}
}
-void QNetworkManagerEngine::updateAccessPoint(const QMap<QString, QVariant> &map)
-{
- QMutexLocker locker(&mutex);
-
- Q_UNUSED(map)
-
- QNetworkManagerInterfaceAccessPoint *accessPoint =
- qobject_cast<QNetworkManagerInterfaceAccessPoint *>(sender());
- if (!accessPoint)
- return;
- accessPoint->deleteLater();
- for (int i = 0; i < connections.count(); ++i) {
- QNetworkManagerSettingsConnection *connection = connections.at(i);
-
- if (accessPoint->ssid() == connection->getSsid()) {
- const QString settingsPath = connection->connectionInterface()->path();
- const QString connectionId = settingsPath;
-
- QNetworkConfigurationPrivatePointer ptr =
- accessPointConfigurations.value(connectionId);
- ptr->mutex.lock();
- QNetworkConfiguration::StateFlags flag = QNetworkConfiguration::Defined;
- ptr->state = (flag | QNetworkConfiguration::Discovered);
- ptr->mutex.unlock();
-
- locker.unlock();
- emit configurationChanged(ptr);
- return;
- }
- }
-}
-
QNetworkConfigurationPrivate *QNetworkManagerEngine::parseConnection(const QString &settingsPath,
const QNmSettingsMap &map)
{
- // Q_UNUSED(service);
QMutexLocker locker(&mutex);
QNetworkConfigurationPrivate *cpPriv = new QNetworkConfigurationPrivate;
cpPriv->name = map.value("connection").value("id").toString();
-
cpPriv->isValid = true;
cpPriv->id = settingsPath;
cpPriv->type = QNetworkConfiguration::InternetAccessPoint;
@@ -765,18 +796,16 @@ QNetworkConfigurationPrivate *QNetworkManagerEngine::parseConnection(const QStri
cpPriv->purpose = QNetworkConfiguration::PublicPurpose;
cpPriv->state = QNetworkConfiguration::Defined;
-
const QString connectionType = map.value("connection").value("type").toString();
if (connectionType == QLatin1String("802-3-ethernet")) {
cpPriv->bearerType = QNetworkConfiguration::BearerEthernet;
- cpPriv->purpose = QNetworkConfiguration::PublicPurpose;
foreach (const QDBusObjectPath &devicePath, managerInterface->getDevices()) {
- QNetworkManagerInterfaceDevice device(devicePath.path());
+ QNetworkManagerInterfaceDevice device(devicePath.path(),this);
if (device.deviceType() == DEVICE_TYPE_ETHERNET) {
- QNetworkManagerInterfaceDeviceWired wiredDevice(device.connectionInterface()->path());
- if (wiredDevice.carrier()) {
+ QNetworkManagerInterfaceDeviceWired *wiredDevice = wiredDevices.value(device.connectionInterface()->path());
+ if (wiredDevice->carrier()) {
cpPriv->state |= QNetworkConfiguration::Discovered;
break;
}
@@ -786,12 +815,6 @@ QNetworkConfigurationPrivate *QNetworkManagerEngine::parseConnection(const QStri
cpPriv->bearerType = QNetworkConfiguration::BearerWLAN;
const QString connectionSsid = map.value("802-11-wireless").value("ssid").toString();
- const QString connectionSecurity = map.value("802-11-wireless").value("security").toString();
- if (!connectionSecurity.isEmpty()) {
- cpPriv->purpose = QNetworkConfiguration::PrivatePurpose;
- } else {
- cpPriv->purpose = QNetworkConfiguration::PublicPurpose;
- }
for (int i = 0; i < accessPoints.count(); ++i) {
if (connectionSsid == accessPoints.at(i)->ssid()
&& map.value("802-11-wireless").value("seen-bssids").toStringList().contains(accessPoints.at(i)->hwAddress())) {
@@ -814,35 +837,46 @@ QNetworkConfigurationPrivate *QNetworkManagerEngine::parseConnection(const QStri
}
} else if (connectionType == QLatin1String("gsm")) {
- foreach (const QDBusObjectPath &devicePath, managerInterface->getDevices()) {
- QNetworkManagerInterfaceDevice device(devicePath.path());
-
- if (device.deviceType() == DEVICE_TYPE_MODEM) {
- QNetworkManagerInterfaceDeviceModem deviceModem(device.connectionInterface()->path(),this);
- switch (deviceModem.currentCapabilities()) {
- case 2:
- cpPriv->bearerType = QNetworkConfiguration::Bearer2G;
+ const QString connectionPath = map.value("connection").value("id").toString();
+ cpPriv->name = contextName(connectionPath);
+ cpPriv->bearerType = currentBearerType(connectionPath);
+
+ if (ofonoManager && ofonoManager->isValid()) {
+ const QString contextPart = connectionPath.section('/', -1);
+ QHashIterator<QString, QOfonoDataConnectionManagerInterface*> i(ofonoContextManagers);
+ while (i.hasNext()) {
+ i.next();
+ const QString path = i.key() +"/"+contextPart;
+ if (isActiveContext(path)) {
+ cpPriv->state |= QNetworkConfiguration::Active;
break;
- case 4:
- cpPriv->bearerType = QNetworkConfiguration::Bearer3G;
- break;
- case 8:
- cpPriv->bearerType = QNetworkConfiguration::Bearer4G;
- break;
- default:
- cpPriv->bearerType = QNetworkConfiguration::BearerUnknown;
- break;
- };
+ }
}
}
-
- cpPriv->purpose = QNetworkConfiguration::PrivatePurpose;
- cpPriv->state |= QNetworkConfiguration::Discovered;
}
return cpPriv;
}
+bool QNetworkManagerEngine::isActiveContext(const QString &contextPath)
+{
+ if (ofonoManager && ofonoManager->isValid()) {
+ const QString contextPart = contextPath.section('/', -1);
+ QHashIterator<QString, QOfonoDataConnectionManagerInterface*> i(ofonoContextManagers);
+ while (i.hasNext()) {
+ i.next();
+ PathPropertiesList list = i.value()->contextsWithProperties();
+ for (int i = 0; i < list.size(); ++i) {
+ if (list.at(i).path.path().contains(contextPart)) {
+ return list.at(i).properties.value(QStringLiteral("Active")).toBool();
+
+ }
+ }
+ }
+ }
+ return false;
+}
+
QNetworkManagerSettingsConnection *QNetworkManagerEngine::connectionFromId(const QString &id) const
{
for (int i = 0; i < connections.count(); ++i) {
@@ -857,7 +891,6 @@ QNetworkManagerSettingsConnection *QNetworkManagerEngine::connectionFromId(const
QNetworkSession::State QNetworkManagerEngine::sessionStateForId(const QString &id)
{
QMutexLocker locker(&mutex);
-
QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.value(id);
if (!ptr)
@@ -866,8 +899,8 @@ QNetworkSession::State QNetworkManagerEngine::sessionStateForId(const QString &i
if (!ptr->isValid)
return QNetworkSession::Invalid;
- foreach (const QString &acPath, activeConnections.keys()) {
- QNetworkManagerConnectionActive *activeConnection = activeConnections.value(acPath);
+ foreach (const QString &acPath, activeConnectionsList.keys()) {
+ QNetworkManagerConnectionActive *activeConnection = activeConnectionsList.value(acPath);
const QString identifier = activeConnection->connection().path();
@@ -899,7 +932,7 @@ quint64 QNetworkManagerEngine::bytesWritten(const QString &id)
QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.value(id);
if (ptr && (ptr->state & QNetworkConfiguration::Active) == QNetworkConfiguration::Active) {
- const QString networkInterface = getInterfaceFromId(id);
+ const QString networkInterface = connectionInterfaces.value(id);
if (!networkInterface.isEmpty()) {
const QString devFile = QLatin1String("/sys/class/net/") +
networkInterface +
@@ -927,7 +960,7 @@ quint64 QNetworkManagerEngine::bytesReceived(const QString &id)
QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.value(id);
if (ptr && (ptr->state & QNetworkConfiguration::Active) == QNetworkConfiguration::Active) {
- const QString networkInterface = getInterfaceFromId(id);
+ const QString networkInterface = connectionInterfaces.value(id);
if (!networkInterface.isEmpty()) {
const QString devFile = QLatin1String("/sys/class/net/") +
networkInterface +
@@ -974,9 +1007,125 @@ QNetworkSessionPrivate *QNetworkManagerEngine::createSessionBackend()
QNetworkConfigurationPrivatePointer QNetworkManagerEngine::defaultConfiguration()
{
+ QHashIterator<QString, QNetworkManagerConnectionActive*> i(activeConnectionsList);
+ while (i.hasNext()) {
+ i.next();
+ QNetworkManagerConnectionActive *activeConnection = i.value();
+ if ((activeConnection->defaultRoute() || activeConnection->default6Route())) {
+ return accessPointConfigurations.value(activeConnection->connection().path());
+ }
+ }
+
return QNetworkConfigurationPrivatePointer();
}
+QNetworkConfiguration::BearerType QNetworkManagerEngine::currentBearerType(const QString &id)
+{
+ QString contextPart = id.section('/', -1);
+ QHashIterator<QString, QOfonoDataConnectionManagerInterface*> i(ofonoContextManagers);
+ while (i.hasNext()) {
+ i.next();
+ QString contextPath = i.key() +"/"+contextPart;
+
+ if (i.value()->contexts().contains(contextPath)) {
+
+ QString bearer = i.value()->bearer();
+
+ if (bearer == QStringLiteral("gsm")) {
+ return QNetworkConfiguration::Bearer2G;
+ } else if (bearer == QStringLiteral("edge")) {
+ return QNetworkConfiguration::Bearer2G;
+ } else if (bearer == QStringLiteral("umts")) {
+ return QNetworkConfiguration::BearerWCDMA;
+ } else if (bearer == QStringLiteral("hspa")
+ || bearer == QStringLiteral("hsdpa")
+ || bearer == QStringLiteral("hsupa")) {
+ return QNetworkConfiguration::BearerHSPA;
+ } else if (bearer == QStringLiteral("lte")) {
+ return QNetworkConfiguration::BearerLTE;
+ }
+ }
+ }
+
+ return QNetworkConfiguration::BearerUnknown;
+}
+
+QString QNetworkManagerEngine::contextName(const QString &path)
+{
+ QString contextPart = path.section('/', -1);
+ QHashIterator<QString, QOfonoDataConnectionManagerInterface*> i(ofonoContextManagers);
+ while (i.hasNext()) {
+ i.next();
+ PathPropertiesList list = i.value()->contextsWithProperties();
+ for (int i = 0; i < list.size(); ++i) {
+ if (list.at(i).path.path().contains(contextPart)) {
+ return list.at(i).properties.value(QStringLiteral("Name")).toString();
+ }
+ }
+ }
+ return path;
+}
+
+void QNetworkManagerEngine::nmRegistered(const QString &)
+{
+ if (ofonoManager) {
+ delete ofonoManager;
+ ofonoManager = NULL;
+ }
+ managerInterface = new QNetworkManagerInterface(this);
+ systemSettings = new QNetworkManagerSettings(NM_DBUS_SERVICE, this);
+
+ connect(managerInterface, SIGNAL(deviceAdded(QDBusObjectPath)),
+ this, SLOT(deviceAdded(QDBusObjectPath)));
+ connect(managerInterface, SIGNAL(deviceRemoved(QDBusObjectPath)),
+ this, SLOT(deviceRemoved(QDBusObjectPath)));
+ connect(managerInterface, SIGNAL(activationFinished(QDBusPendingCallWatcher*)),
+ this, SLOT(activationFinished(QDBusPendingCallWatcher*)));
+ connect(managerInterface, SIGNAL(propertiesChanged(QMap<QString,QVariant>)),
+ this, SLOT(interfacePropertiesChanged(QMap<QString,QVariant>)));
+ managerInterface->setConnections();
+
+ connect(systemSettings, SIGNAL(newConnection(QDBusObjectPath)),
+ this, SLOT(newConnection(QDBusObjectPath)));
+ systemSettings->setConnections();
+ nmAvailable = true;
+
+ setupConfigurations();
+}
+
+void QNetworkManagerEngine::nmUnRegistered(const QString &)
+{
+ if (systemSettings) {
+ delete systemSettings;
+ systemSettings = NULL;
+ }
+ if (managerInterface) {
+ delete managerInterface;
+ managerInterface = NULL;
+ }
+}
+
+void QNetworkManagerEngine::ofonoRegistered(const QString &)
+{
+ if (ofonoManager) {
+ delete ofonoManager;
+ ofonoManager = NULL;
+ }
+ ofonoManager = new QOfonoManagerInterface(this);
+ if (ofonoManager && ofonoManager->isValid()) {
+ Q_FOREACH (const QString &modem, ofonoManager->getModems()) {
+ QOfonoDataConnectionManagerInterface *ofonoContextManager
+ = new QOfonoDataConnectionManagerInterface(modem,this);
+ ofonoContextManagers.insert(modem, ofonoContextManager);
+ }
+ }
+}
+
+void QNetworkManagerEngine::ofonoUnRegistered(const QString &)
+{
+ ofonoContextManagers.clear();
+}
+
QT_END_NAMESPACE
#endif // QT_NO_DBUS
diff --git a/src/plugins/bearer/networkmanager/qnetworkmanagerengine.h b/src/plugins/bearer/networkmanager/qnetworkmanagerengine.h
index ab1cfea71e..da6af14c00 100644
--- a/src/plugins/bearer/networkmanager/qnetworkmanagerengine.h
+++ b/src/plugins/bearer/networkmanager/qnetworkmanagerengine.h
@@ -49,6 +49,8 @@
#include "qnetworkmanagerservice.h"
+#include "../linux_common/qofonoservice_linux_p.h"
+
#include <QMap>
#include <QVariant>
@@ -89,11 +91,8 @@ public:
QNetworkConfigurationPrivatePointer defaultConfiguration();
private Q_SLOTS:
- void interfacePropertiesChanged(const QString &path,
- const QMap<QString, QVariant> &properties);
- void activeConnectionPropertiesChanged(const QString &path,
- const QMap<QString, QVariant> &properties);
- void devicePropertiesChanged(const QString &path, quint32);
+ void interfacePropertiesChanged(const QMap<QString, QVariant> &properties);
+ void activeConnectionPropertiesChanged(const QMap<QString, QVariant> &properties);
void deviceAdded(const QDBusObjectPath &path);
void deviceRemoved(const QDBusObjectPath &path);
@@ -106,9 +105,16 @@ private Q_SLOTS:
void newAccessPoint(const QString &path);
void removeAccessPoint(const QString &path);
- void updateAccessPoint(const QMap<QString, QVariant> &map);
void scanFinished();
+ void wiredCarrierChanged(bool);
+
+ void nmRegistered(const QString &serviceName = QString());
+ void nmUnRegistered(const QString &serviceName = QString());
+
+ void ofonoRegistered(const QString &serviceName = QString());
+ void ofonoUnRegistered(const QString &serviceName = QString());
+
private:
QNetworkConfigurationPrivate *parseConnection(const QString &settingsPath,
const QNmSettingsMap &map);
@@ -116,14 +122,29 @@ private:
QNetworkManagerInterface *managerInterface;
QNetworkManagerSettings *systemSettings;
- QNetworkManagerSettings *userSettings;
+ QHash<QString, QNetworkManagerInterfaceDeviceWired *> wiredDevices;
QHash<QString, QNetworkManagerInterfaceDeviceWireless *> wirelessDevices;
- QHash<QString, QNetworkManagerConnectionActive *> activeConnections;
+
+ QHash<QString, QNetworkManagerConnectionActive *> activeConnectionsList;
QList<QNetworkManagerSettingsConnection *> connections;
QList<QNetworkManagerInterfaceAccessPoint *> accessPoints;
QHash<QString, QNetworkManagerInterfaceDevice *> interfaceDevices;
QMap<QString,QString> configuredAccessPoints; //ap, settings path
+ QHash<QString,QString> connectionInterfaces; // ac, interface
+
+ QOfonoManagerInterface *ofonoManager;
+ QHash <QString, QOfonoDataConnectionManagerInterface *> ofonoContextManagers;
+ QNetworkConfiguration::BearerType currentBearerType(const QString &id);
+ QString contextName(const QString &path);
+
+ bool isConnectionActive(const QString &settingsPath);
+ QDBusServiceWatcher *ofonoWatcher;
+ QDBusServiceWatcher *nmWatcher;
+
+ bool isActiveContext(const QString &contextPath);
+ bool nmAvailable;
+ void setupConfigurations();
};
QT_END_NAMESPACE
diff --git a/src/plugins/bearer/networkmanager/qnetworkmanagerservice.cpp b/src/plugins/bearer/networkmanager/qnetworkmanagerservice.cpp
index f249ac6100..fad94f069d 100644
--- a/src/plugins/bearer/networkmanager/qnetworkmanagerservice.cpp
+++ b/src/plugins/bearer/networkmanager/qnetworkmanagerservice.cpp
@@ -44,7 +44,6 @@
#include <QtDBus/QDBusPendingCall>
#include "qnetworkmanagerservice.h"
-#include "qnmdbushelper.h"
#ifndef QT_NO_DBUS
@@ -64,18 +63,38 @@ QNetworkManagerInterface::QNetworkManagerInterface(QObject *parent)
d->connectionInterface = new QDBusInterface(QLatin1String(NM_DBUS_SERVICE),
QLatin1String(NM_DBUS_PATH),
QLatin1String(NM_DBUS_INTERFACE),
- QDBusConnection::systemBus());
+ QDBusConnection::systemBus(),parent);
if (!d->connectionInterface->isValid()) {
d->valid = false;
return;
}
d->valid = true;
- nmDBusHelper = new QNmDBusHelper(this);
- connect(nmDBusHelper, SIGNAL(pathForPropertiesChanged(QString,QMap<QString,QVariant>)),
- this,SIGNAL(propertiesChanged(QString,QMap<QString,QVariant>)));
- connect(nmDBusHelper,SIGNAL(pathForStateChanged(QString,quint32)),
- this, SIGNAL(stateChanged(QString,quint32)));
+ QDBusInterface managerPropertiesInterface(QLatin1String(NM_DBUS_SERVICE),
+ QLatin1String(NM_DBUS_PATH),
+ QLatin1String("org.freedesktop.DBus.Properties"),
+ QDBusConnection::systemBus());
+ QList<QVariant> argumentList;
+ argumentList << QLatin1String(NM_DBUS_INTERFACE);
+ QDBusPendingReply<QVariantMap> propsReply
+ = managerPropertiesInterface.callWithArgumentList(QDBus::Block,QLatin1String("GetAll"),
+ argumentList);
+ if (!propsReply.isError()) {
+ propertyMap = propsReply.value();
+ }
+
+ QDBusPendingReply<QList <QDBusObjectPath> > nmReply
+ = d->connectionInterface->call(QLatin1String("GetDevices"));
+ nmReply.waitForFinished();
+ if (!nmReply.isError()) {
+ devicesPathList = nmReply.value();
+ }
+
+ QDBusConnection::systemBus().connect(QLatin1String(NM_DBUS_SERVICE),
+ QLatin1String(NM_DBUS_PATH),
+ QLatin1String(NM_DBUS_INTERFACE),
+ QLatin1String("PropertiesChanged"),
+ this,SLOT(propertiesSwap(QMap<QString,QVariant>)));
}
QNetworkManagerInterface::~QNetworkManagerInterface()
@@ -91,27 +110,24 @@ bool QNetworkManagerInterface::isValid()
bool QNetworkManagerInterface::setConnections()
{
- if(!isValid() )
+ if (!isValid())
return false;
- QDBusConnection dbusConnection = QDBusConnection::systemBus();
-
- bool allOk = false;
- if (dbusConnection.connect(QLatin1String(NM_DBUS_SERVICE),
+ QDBusConnection::systemBus().connect(QLatin1String(NM_DBUS_SERVICE),
QLatin1String(NM_DBUS_PATH),
QLatin1String(NM_DBUS_INTERFACE),
QLatin1String("PropertiesChanged"),
- nmDBusHelper,SLOT(slotPropertiesChanged(QMap<QString,QVariant>)))) {
- allOk = true;
- }
- if (dbusConnection.connect(QLatin1String(NM_DBUS_SERVICE),
+ this,SLOT(propertiesSwap(QMap<QString,QVariant>)));
+
+ bool allOk = false;
+ if (QDBusConnection::systemBus().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),
+ if (QDBusConnection::systemBus().connect(QLatin1String(NM_DBUS_SERVICE),
QLatin1String(NM_DBUS_PATH),
QLatin1String(NM_DBUS_INTERFACE),
QLatin1String("DeviceRemoved"),
@@ -127,14 +143,17 @@ QDBusInterface *QNetworkManagerInterface::connectionInterface() const
return d->connectionInterface;
}
-QList <QDBusObjectPath> QNetworkManagerInterface::getDevices() const
+QList <QDBusObjectPath> QNetworkManagerInterface::getDevices()
{
- QDBusReply<QList<QDBusObjectPath> > reply = d->connectionInterface->call(QLatin1String("GetDevices"));
- return reply.value();
+ if (devicesPathList.isEmpty()) {
+ qWarning() << "using blocking call!";
+ QDBusReply<QList<QDBusObjectPath> > reply = d->connectionInterface->call(QLatin1String("GetDevices"));
+ devicesPathList = reply.value();
+ }
+ return devicesPathList;
}
-void QNetworkManagerInterface::activateConnection( const QString &,
- QDBusObjectPath connectionPath,
+void QNetworkManagerInterface::activateConnection(QDBusObjectPath connectionPath,
QDBusObjectPath devicePath,
QDBusObjectPath specificObject)
{
@@ -150,28 +169,80 @@ void QNetworkManagerInterface::activateConnection( const QString &,
void QNetworkManagerInterface::deactivateConnection(QDBusObjectPath connectionPath) const
{
- d->connectionInterface->call(QLatin1String("DeactivateConnection"), QVariant::fromValue(connectionPath));
+ d->connectionInterface->asyncCall(QLatin1String("DeactivateConnection"), QVariant::fromValue(connectionPath));
}
bool QNetworkManagerInterface::wirelessEnabled() const
{
- return d->connectionInterface->property("WirelessEnabled").toBool();
+ if (propertyMap.contains("WirelessEnabled"))
+ return propertyMap.value("WirelessEnabled").toBool();
+ return false;
}
bool QNetworkManagerInterface::wirelessHardwareEnabled() const
{
- return d->connectionInterface->property("WirelessHardwareEnabled").toBool();
+ if (propertyMap.contains("WirelessHardwareEnabled"))
+ return propertyMap.value("WirelessHardwareEnabled").toBool();
+ return false;
}
QList <QDBusObjectPath> QNetworkManagerInterface::activeConnections() const
{
- QVariant prop = d->connectionInterface->property("ActiveConnections");
- return prop.value<QList<QDBusObjectPath> >();
+ if (propertyMap.contains("ActiveConnections")) {
+
+ const QDBusArgument &dbusArgs = propertyMap.value("ActiveConnections").value<QDBusArgument>();
+ QDBusObjectPath path;
+ QList <QDBusObjectPath> list;
+
+ dbusArgs.beginArray();
+ while (!dbusArgs.atEnd()) {
+ dbusArgs >> path;
+ list.append(path);
+ }
+ dbusArgs.endArray();
+
+ return list;
+ }
+
+ QList <QDBusObjectPath> list;
+ list << QDBusObjectPath();
+ return list;
}
-quint32 QNetworkManagerInterface::state()
+QNetworkManagerInterface::NMState QNetworkManagerInterface::state()
{
- return d->connectionInterface->property("State").toUInt();
+ if (propertyMap.contains("State"))
+ return static_cast<QNetworkManagerInterface::NMState>(propertyMap.value("State").toUInt());
+ return QNetworkManagerInterface::NM_STATE_UNKNOWN;
+}
+
+QString QNetworkManagerInterface::version() const
+{
+ if (propertyMap.contains("Version"))
+ return propertyMap.value("Version").toString();
+ return QString();
+}
+
+void QNetworkManagerInterface::propertiesSwap(QMap<QString,QVariant> map)
+{
+ QMapIterator<QString, QVariant> i(map);
+ while (i.hasNext()) {
+ i.next();
+ propertyMap.insert(i.key(),i.value());
+
+ if (i.key() == QStringLiteral("State")) {
+ quint32 state = i.value().toUInt();
+ if (state == NM_DEVICE_STATE_ACTIVATED
+ || state == NM_DEVICE_STATE_DISCONNECTED
+ || state == NM_DEVICE_STATE_UNAVAILABLE
+ || state == NM_DEVICE_STATE_FAILED) {
+ Q_EMIT propertiesChanged(map);
+ Q_EMIT stateChanged(state);
+ }
+ } else if (i.key() == QStringLiteral("ActiveConnections")) {
+ Q_EMIT propertiesChanged(map);
+ }
+ }
}
class QNetworkManagerInterfaceAccessPointPrivate
@@ -183,18 +254,38 @@ public:
};
QNetworkManagerInterfaceAccessPoint::QNetworkManagerInterfaceAccessPoint(const QString &dbusPathName, QObject *parent)
- : QObject(parent), nmDBusHelper(0)
+ : QObject(parent)
{
d = new QNetworkManagerInterfaceAccessPointPrivate();
d->path = dbusPathName;
d->connectionInterface = new QDBusInterface(QLatin1String(NM_DBUS_SERVICE),
d->path,
QLatin1String(NM_DBUS_INTERFACE_ACCESS_POINT),
- QDBusConnection::systemBus());
+ QDBusConnection::systemBus(),parent);
if (!d->connectionInterface->isValid()) {
d->valid = false;
return;
}
+ QDBusInterface accessPointPropertiesInterface(QLatin1String(NM_DBUS_SERVICE),
+ d->path,
+ QLatin1String("org.freedesktop.DBus.Properties"),
+ QDBusConnection::systemBus());
+
+ QList<QVariant> argumentList;
+ argumentList << QLatin1String(NM_DBUS_INTERFACE_ACCESS_POINT);
+ QDBusPendingReply<QVariantMap> propsReply
+ = accessPointPropertiesInterface.callWithArgumentList(QDBus::Block,QLatin1String("GetAll"),
+ argumentList);
+ if (!propsReply.isError()) {
+ propertyMap = propsReply.value();
+ }
+
+ QDBusConnection::systemBus().connect(QLatin1String(NM_DBUS_SERVICE),
+ d->path,
+ QLatin1String(NM_DBUS_INTERFACE_ACCESS_POINT),
+ QLatin1String("PropertiesChanged"),
+ this,SLOT(propertiesSwap(QMap<QString,QVariant>)));
+
d->valid = true;
}
@@ -212,24 +303,10 @@ bool QNetworkManagerInterfaceAccessPoint::isValid()
bool QNetworkManagerInterfaceAccessPoint::setConnections()
{
- if(!isValid() )
+ if (!isValid())
return false;
- bool allOk = false;
- delete nmDBusHelper;
- nmDBusHelper = new QNmDBusHelper(this);
- connect(nmDBusHelper, SIGNAL(pathForPropertiesChanged(QString,QMap<QString,QVariant>)),
- this,SIGNAL(propertiesChanged(QString,QMap<QString,QVariant>)));
-
- if (QDBusConnection::systemBus().connect(QLatin1String(NM_DBUS_SERVICE),
- d->path,
- QLatin1String(NM_DBUS_INTERFACE_ACCESS_POINT),
- QLatin1String("PropertiesChanged"),
- nmDBusHelper,SLOT(slotPropertiesChanged(QMap<QString,QVariant>))) ) {
- allOk = true;
-
- }
- return allOk;
+ return true;
}
QDBusInterface *QNetworkManagerInterfaceAccessPoint::connectionInterface() const
@@ -239,47 +316,74 @@ QDBusInterface *QNetworkManagerInterfaceAccessPoint::connectionInterface() const
quint32 QNetworkManagerInterfaceAccessPoint::flags() const
{
- return d->connectionInterface->property("Flags").toUInt();
+ if (propertyMap.contains("Flags"))
+ return propertyMap.value("Flags").toUInt();
+ return 0;
}
quint32 QNetworkManagerInterfaceAccessPoint::wpaFlags() const
{
- return d->connectionInterface->property("WpaFlags").toUInt();
+ if (propertyMap.contains("WpaFlags"))
+ return propertyMap.value("WpaFlags").toUInt();
+ return 0;
}
quint32 QNetworkManagerInterfaceAccessPoint::rsnFlags() const
{
- return d->connectionInterface->property("RsnFlags").toUInt();
+ if (propertyMap.contains("RsnFlags"))
+ return propertyMap.value("RsnFlags").toUInt();
+ return 0;
}
QString QNetworkManagerInterfaceAccessPoint::ssid() const
{
- return d->connectionInterface->property("Ssid").toString();
+ if (propertyMap.contains("Ssid"))
+ return propertyMap.value("Ssid").toString();
+ return QString();
}
quint32 QNetworkManagerInterfaceAccessPoint::frequency() const
{
- return d->connectionInterface->property("Frequency").toUInt();
+ if (propertyMap.contains("Frequency"))
+ return propertyMap.value("Frequency").toUInt();
+ return 0;
}
QString QNetworkManagerInterfaceAccessPoint::hwAddress() const
{
- return d->connectionInterface->property("HwAddress").toString();
+ if (propertyMap.contains("HwAddress"))
+ return propertyMap.value("HwAddress").toString();
+ return QString();
}
quint32 QNetworkManagerInterfaceAccessPoint::mode() const
{
- return d->connectionInterface->property("Mode").toUInt();
+ if (propertyMap.contains("Mode"))
+ return propertyMap.value("Mode").toUInt();
+ return 0;
}
quint32 QNetworkManagerInterfaceAccessPoint::maxBitrate() const
{
- return d->connectionInterface->property("MaxBitrate").toUInt();
+ if (propertyMap.contains("MaxBitrate"))
+ return propertyMap.value("MaxBitrate").toUInt();
+ return 0;
}
quint32 QNetworkManagerInterfaceAccessPoint::strength() const
{
- return d->connectionInterface->property("Strength").toUInt();
+ if (propertyMap.contains("Strength"))
+ return propertyMap.value("Strength").toUInt();
+ return 0;
+}
+
+void QNetworkManagerInterfaceAccessPoint::propertiesSwap(QMap<QString,QVariant> map)
+{
+ QMapIterator<QString, QVariant> i(map);
+ while (i.hasNext()) {
+ i.next();
+ propertyMap.insert(i.key(),i.value());
+ }
}
class QNetworkManagerInterfaceDevicePrivate
@@ -291,18 +395,39 @@ public:
};
QNetworkManagerInterfaceDevice::QNetworkManagerInterfaceDevice(const QString &deviceObjectPath, QObject *parent)
- : QObject(parent), nmDBusHelper(0)
+ : QObject(parent)
{
+
d = new QNetworkManagerInterfaceDevicePrivate();
d->path = deviceObjectPath;
d->connectionInterface = new QDBusInterface(QLatin1String(NM_DBUS_SERVICE),
d->path,
QLatin1String(NM_DBUS_INTERFACE_DEVICE),
- QDBusConnection::systemBus());
+ QDBusConnection::systemBus(),parent);
if (!d->connectionInterface->isValid()) {
d->valid = false;
return;
}
+ QDBusInterface devicePropertiesInterface(QLatin1String(NM_DBUS_SERVICE),
+ d->path,
+ QLatin1String("org.freedesktop.DBus.Properties"),
+ QDBusConnection::systemBus(),parent);
+
+ QList<QVariant> argumentList;
+ argumentList << QLatin1String(NM_DBUS_INTERFACE_DEVICE);
+ QDBusPendingReply<QVariantMap> propsReply
+ = devicePropertiesInterface.callWithArgumentList(QDBus::Block,QLatin1String("GetAll"),
+ argumentList);
+
+ if (!propsReply.isError()) {
+ propertyMap = propsReply.value();
+ }
+
+ QDBusConnection::systemBus().connect(QLatin1String(NM_DBUS_SERVICE),
+ d->path,
+ QLatin1String(NM_DBUS_INTERFACE_DEVICE),
+ QLatin1String("PropertiesChanged"),
+ this,SLOT(propertiesSwap(QMap<QString,QVariant>)));
d->valid = true;
}
@@ -319,35 +444,10 @@ bool QNetworkManagerInterfaceDevice::isValid()
bool QNetworkManagerInterfaceDevice::setConnections()
{
- if(!isValid() )
+ if (!isValid())
return false;
- bool allOk = true;
- delete nmDBusHelper;
- nmDBusHelper = new QNmDBusHelper(this);
- connect(nmDBusHelper,SIGNAL(pathForStateChanged(QString,quint32)),
- this, SIGNAL(stateChanged(QString,quint32)));
-
- if (QDBusConnection::systemBus().connect(QLatin1String(NM_DBUS_SERVICE),
- d->path,
- QLatin1String(NM_DBUS_INTERFACE_DEVICE),
- QLatin1String("StateChanged"),
- nmDBusHelper,SLOT(deviceStateChanged(quint32)))) {
- allOk = false;
- }
-
- connect(nmDBusHelper, SIGNAL(pathForConnectionsChanged(QStringList)),
- this,SIGNAL(connectionsChanged(QStringList)));
-
- if (QDBusConnection::systemBus().connect(QLatin1String(NM_DBUS_SERVICE),
- d->path,
- QLatin1String(NM_DBUS_INTERFACE_ACCESS_POINT),
- QLatin1String("PropertiesChanged"),
- nmDBusHelper,SLOT(slotPropertiesChanged(QMap<QString,QVariant>))) ) {
- allOk = false;
- }
-
- return allOk;
+ return true;
}
QDBusInterface *QNetworkManagerInterfaceDevice::connectionInterface() const
@@ -357,33 +457,66 @@ QDBusInterface *QNetworkManagerInterfaceDevice::connectionInterface() const
QString QNetworkManagerInterfaceDevice::udi() const
{
- return d->connectionInterface->property("Udi").toString();
+ if (propertyMap.contains("Udi"))
+ return propertyMap.value("Udi").toString();
+ return QString();
}
QString QNetworkManagerInterfaceDevice::networkInterface() const
{
- return d->connectionInterface->property("Interface").toString();
+ if (propertyMap.contains("Interface"))
+ return propertyMap.value("Interface").toString();
+ return QString();
}
quint32 QNetworkManagerInterfaceDevice::ip4Address() const
{
- return d->connectionInterface->property("Ip4Address").toUInt();
+ if (propertyMap.contains("Ip4Address"))
+ return propertyMap.value("Ip4Address").toUInt();
+ return 0;
}
quint32 QNetworkManagerInterfaceDevice::state() const
{
- return d->connectionInterface->property("State").toUInt();
+ if (propertyMap.contains("State"))
+ return propertyMap.value("State").toUInt();
+ return 0;
}
quint32 QNetworkManagerInterfaceDevice::deviceType() const
{
- return d->connectionInterface->property("DeviceType").toUInt();
+ if (propertyMap.contains("DeviceType"))
+ return propertyMap.value("DeviceType").toUInt();
+ return 0;
}
QDBusObjectPath QNetworkManagerInterfaceDevice::ip4config() const
{
- QVariant prop = d->connectionInterface->property("Ip4Config");
- return prop.value<QDBusObjectPath>();
+ if (propertyMap.contains("Ip4Config"))
+ return propertyMap.value("Ip4Config").value<QDBusObjectPath>();
+ return QDBusObjectPath();
+}
+
+void QNetworkManagerInterfaceDevice::propertiesSwap(QMap<QString,QVariant> map)
+{
+ QMapIterator<QString, QVariant> i(map);
+ while (i.hasNext()) {
+ i.next();
+ if (i.key() == QStringLiteral("AvailableConnections")) { //Device
+ const QDBusArgument &dbusArgs = i.value().value<QDBusArgument>();
+ QDBusObjectPath path;
+ QStringList paths;
+ dbusArgs.beginArray();
+ while (!dbusArgs.atEnd()) {
+ dbusArgs >> path;
+ paths << path.path();
+ }
+ dbusArgs.endArray();
+ Q_EMIT connectionsChanged(paths);
+ }
+ propertyMap.insert(i.key(),i.value());
+ }
+ Q_EMIT propertiesChanged(map);
}
class QNetworkManagerInterfaceDeviceWiredPrivate
@@ -395,7 +528,7 @@ public:
};
QNetworkManagerInterfaceDeviceWired::QNetworkManagerInterfaceDeviceWired(const QString &ifaceDevicePath, QObject *parent)
- : QObject(parent), nmDBusHelper(0)
+ : QObject(parent)
{
d = new QNetworkManagerInterfaceDeviceWiredPrivate();
d->path = ifaceDevicePath;
@@ -407,6 +540,27 @@ QNetworkManagerInterfaceDeviceWired::QNetworkManagerInterfaceDeviceWired(const Q
d->valid = false;
return;
}
+ QDBusInterface deviceWiredPropertiesInterface(QLatin1String(NM_DBUS_SERVICE),
+ d->path,
+ QLatin1String("org.freedesktop.DBus.Properties"),
+ QDBusConnection::systemBus(),parent);
+
+ QList<QVariant> argumentList;
+ argumentList << QLatin1String(NM_DBUS_INTERFACE_DEVICE_WIRED);
+ QDBusPendingReply<QVariantMap> propsReply
+ = deviceWiredPropertiesInterface.callWithArgumentList(QDBus::Block,QLatin1String("GetAll"),
+ argumentList);
+
+ if (!propsReply.isError()) {
+ propertyMap = propsReply.value();
+ }
+
+ QDBusConnection::systemBus().connect(QLatin1String(NM_DBUS_SERVICE),
+ d->path,
+ QLatin1String(NM_DBUS_INTERFACE_DEVICE_WIRED),
+ QLatin1String("PropertiesChanged"),
+ this,SLOT(propertiesSwap(QMap<QString,QVariant>)));
+
d->valid = true;
}
@@ -424,23 +578,9 @@ bool QNetworkManagerInterfaceDeviceWired::isValid()
bool QNetworkManagerInterfaceDeviceWired::setConnections()
{
- if(!isValid() )
+ if (!isValid())
return false;
-
- bool allOk = true;
-
- delete nmDBusHelper;
- nmDBusHelper = new QNmDBusHelper(this);
- connect(nmDBusHelper, SIGNAL(pathForPropertiesChanged(QString,QMap<QString,QVariant>)),
- this,SIGNAL(propertiesChanged(QString,QMap<QString,QVariant>)));
- if (!QDBusConnection::systemBus().connect(QLatin1String(NM_DBUS_SERVICE),
- d->path,
- QLatin1String(NM_DBUS_INTERFACE_DEVICE_WIRED),
- QLatin1String("PropertiesChanged"),
- nmDBusHelper,SLOT(slotPropertiesChanged(QMap<QString,QVariant>))) ) {
- allOk = false;
- }
- return allOk;
+ return true;
}
QDBusInterface *QNetworkManagerInterfaceDeviceWired::connectionInterface() const
@@ -450,17 +590,53 @@ QDBusInterface *QNetworkManagerInterfaceDeviceWired::connectionInterface() const
QString QNetworkManagerInterfaceDeviceWired::hwAddress() const
{
- return d->connectionInterface->property("HwAddress").toString();
+ if (propertyMap.contains("HwAddress"))
+ return propertyMap.value("HwAddress").toString();
+ return QString();
}
quint32 QNetworkManagerInterfaceDeviceWired::speed() const
{
- return d->connectionInterface->property("Speed").toUInt();
+ if (propertyMap.contains("Speed"))
+ return propertyMap.value("Speed").toUInt();
+ return 0;
}
bool QNetworkManagerInterfaceDeviceWired::carrier() const
{
- return d->connectionInterface->property("Carrier").toBool();
+ if (propertyMap.contains("Carrier"))
+ return propertyMap.value("Carrier").toBool();
+ return false;
+}
+
+QStringList QNetworkManagerInterfaceDeviceWired::availableConnections()
+{
+ QStringList list;
+ if (propertyMap.contains("AvailableConnections")) {
+ const QDBusArgument &dbusArgs = propertyMap.value("Carrier").value<QDBusArgument>();
+ QDBusObjectPath path;
+ dbusArgs.beginArray();
+ while (!dbusArgs.atEnd()) {
+ dbusArgs >> path;
+ list << path.path();
+ }
+ dbusArgs.endArray();
+ }
+
+ return list;
+}
+
+void QNetworkManagerInterfaceDeviceWired::propertiesSwap(QMap<QString,QVariant> map)
+{
+ QMapIterator<QString, QVariant> i(map);
+ while (i.hasNext()) {
+ i.next();
+ propertyMap.insert(i.key(),i.value());
+ if (i.key() == QStringLiteral("Carrier")) {
+ Q_EMIT carrierChanged(i.value().toBool());
+ }
+ }
+ Q_EMIT propertiesChanged(map);
}
class QNetworkManagerInterfaceDeviceWirelessPrivate
@@ -472,7 +648,7 @@ public:
};
QNetworkManagerInterfaceDeviceWireless::QNetworkManagerInterfaceDeviceWireless(const QString &ifaceDevicePath, QObject *parent)
- : QObject(parent), nmDBusHelper(0)
+ : QObject(parent)
{
d = new QNetworkManagerInterfaceDeviceWirelessPrivate();
d->path = ifaceDevicePath;
@@ -484,6 +660,43 @@ QNetworkManagerInterfaceDeviceWireless::QNetworkManagerInterfaceDeviceWireless(c
d->valid = false;
return;
}
+
+
+ QDBusPendingReply<QList <QDBusObjectPath> > nmReply
+ = d->connectionInterface->call(QLatin1String("GetAccessPoints"));
+
+ if (!nmReply.isError()) {
+ accessPointsList = nmReply.value();
+ }
+
+ QDBusInterface deviceWirelessPropertiesInterface(QLatin1String(NM_DBUS_SERVICE),
+ d->path,
+ QLatin1String("org.freedesktop.DBus.Properties"),
+ QDBusConnection::systemBus(),parent);
+
+ QList<QVariant> argumentList;
+ argumentList << QLatin1String(NM_DBUS_INTERFACE_DEVICE_WIRELESS);
+ QDBusPendingReply<QVariantMap> propsReply
+ = deviceWirelessPropertiesInterface.callWithArgumentList(QDBus::Block,QLatin1String("GetAll"),
+ argumentList);
+ if (!propsReply.isError()) {
+ propertyMap = propsReply.value();
+ }
+
+ QDBusConnection::systemBus().connect(QLatin1String(NM_DBUS_SERVICE),
+ d->path,
+ QLatin1String(NM_DBUS_INTERFACE_DEVICE_WIRELESS),
+ QLatin1String("PropertiesChanged"),
+ this,SLOT(propertiesSwap(QMap<QString,QVariant>)));
+
+ QDBusPendingReply<QList<QDBusObjectPath> > reply
+ = d->connectionInterface->asyncCall(QLatin1String("GetAccessPoints"));
+
+ QDBusPendingCallWatcher *callWatcher = new QDBusPendingCallWatcher(reply);
+ connect(callWatcher, SIGNAL(finished(QDBusPendingCallWatcher*)),
+ this, SLOT(accessPointsFinished(QDBusPendingCallWatcher*)));
+
+
d->valid = true;
}
@@ -498,29 +711,31 @@ bool QNetworkManagerInterfaceDeviceWireless::isValid()
return d->valid;
}
+void QNetworkManagerInterfaceDeviceWireless::slotAccessPointAdded(QDBusObjectPath path)
+{
+ if (path.path().length() > 2)
+ Q_EMIT accessPointAdded(path.path());
+}
+
+void QNetworkManagerInterfaceDeviceWireless::slotAccessPointRemoved(QDBusObjectPath path)
+{
+ if (path.path().length() > 2)
+ Q_EMIT accessPointRemoved(path.path());
+}
+
bool QNetworkManagerInterfaceDeviceWireless::setConnections()
{
- if(!isValid() )
+ if (!isValid())
return false;
QDBusConnection dbusConnection = QDBusConnection::systemBus();
bool allOk = true;
- delete nmDBusHelper;
- nmDBusHelper = new QNmDBusHelper(this);
- connect(nmDBusHelper, SIGNAL(pathForPropertiesChanged(QString,QMap<QString,QVariant>)),
- this,SIGNAL(propertiesChanged(QString,QMap<QString,QVariant>)));
-
- connect(nmDBusHelper, SIGNAL(pathForAccessPointAdded(QString)),
- this,SIGNAL(accessPointAdded(QString)));
-
- connect(nmDBusHelper, SIGNAL(pathForAccessPointRemoved(QString)),
- this,SIGNAL(accessPointRemoved(QString)));
if (!dbusConnection.connect(QLatin1String(NM_DBUS_SERVICE),
- d->path,
+ d->path,
QLatin1String(NM_DBUS_INTERFACE_DEVICE_WIRELESS),
QLatin1String("AccessPointAdded"),
- nmDBusHelper, SLOT(slotAccessPointAdded(QDBusObjectPath)))) {
+ this, SLOT(slotAccessPointAdded(QDBusObjectPath)))) {
allOk = false;
}
@@ -529,18 +744,10 @@ bool QNetworkManagerInterfaceDeviceWireless::setConnections()
d->path,
QLatin1String(NM_DBUS_INTERFACE_DEVICE_WIRELESS),
QLatin1String("AccessPointRemoved"),
- nmDBusHelper, SLOT(slotAccessPointRemoved(QDBusObjectPath)))) {
+ this, SLOT(slotAccessPointRemoved(QDBusObjectPath)))) {
allOk = false;
}
-
- if (!dbusConnection.connect(QLatin1String(NM_DBUS_SERVICE),
- d->path,
- QLatin1String(NM_DBUS_INTERFACE_DEVICE_WIRELESS),
- QLatin1String("PropertiesChanged"),
- nmDBusHelper,SLOT(slotPropertiesChanged(QMap<QString,QVariant>)))) {
- allOk = false;
- }
if (!dbusConnection.connect(QLatin1String(NM_DBUS_SERVICE),
d->path,
QLatin1String(NM_DBUS_INTERFACE_DEVICE_WIRELESS),
@@ -551,6 +758,19 @@ bool QNetworkManagerInterfaceDeviceWireless::setConnections()
return allOk;
}
+void QNetworkManagerInterfaceDeviceWireless::accessPointsFinished(QDBusPendingCallWatcher *watcher)
+{
+ QDBusPendingReply<QList<QDBusObjectPath> > reply(*watcher);
+ watcher->deleteLater();
+ if (!reply.isError()) {
+ accessPointsList = reply.value();
+ }
+
+ for (int i = 0; i < accessPointsList.size(); i++) {
+ Q_EMIT accessPointAdded(accessPointsList.at(i).path());
+ }
+}
+
QDBusInterface *QNetworkManagerInterfaceDeviceWireless::connectionInterface() const
{
return d->connectionInterface;
@@ -558,33 +778,48 @@ QDBusInterface *QNetworkManagerInterfaceDeviceWireless::connectionInterface() co
QList <QDBusObjectPath> QNetworkManagerInterfaceDeviceWireless::getAccessPoints()
{
- QDBusReply<QList<QDBusObjectPath> > reply = d->connectionInterface->call(QLatin1String("GetAccessPoints"));
- return reply.value();
+ if (accessPointsList.isEmpty()) {
+ qWarning() << "Using blocking call!";
+ QDBusReply<QList<QDBusObjectPath> > reply
+ = d->connectionInterface->call(QLatin1String("GetAccessPoints"));
+ accessPointsList = reply.value();
+ }
+ return accessPointsList;
}
QString QNetworkManagerInterfaceDeviceWireless::hwAddress() const
{
- return d->connectionInterface->property("HwAddress").toString();
+ if (propertyMap.contains("HwAddress"))
+ return propertyMap.value("HwAddress").toString();
+ return QString();
}
quint32 QNetworkManagerInterfaceDeviceWireless::mode() const
{
- return d->connectionInterface->property("Mode").toUInt();
+ if (propertyMap.contains("Mode"))
+ return propertyMap.value("Mode").toUInt();
+ return 0;
}
quint32 QNetworkManagerInterfaceDeviceWireless::bitrate() const
{
- return d->connectionInterface->property("Bitrate").toUInt();
+ if (propertyMap.contains("Bitrate"))
+ return propertyMap.value("Bitrate").toUInt();
+ return 0;
}
QDBusObjectPath QNetworkManagerInterfaceDeviceWireless::activeAccessPoint() const
{
- return d->connectionInterface->property("ActiveAccessPoint").value<QDBusObjectPath>();
+ if (propertyMap.contains("ActiveAccessPoint"))
+ return propertyMap.value("ActiveAccessPoint").value<QDBusObjectPath>();
+ return QDBusObjectPath();
}
quint32 QNetworkManagerInterfaceDeviceWireless::wirelessCapabilities() const
{
- return d->connectionInterface->property("WirelelessCapabilities").toUInt();
+ if (propertyMap.contains("WirelelessCapabilities"))
+ return propertyMap.value("WirelelessCapabilities").toUInt();
+ return 0;
}
void QNetworkManagerInterfaceDeviceWireless::scanIsDone()
@@ -597,6 +832,17 @@ void QNetworkManagerInterfaceDeviceWireless::requestScan()
d->connectionInterface->asyncCall(QLatin1String("RequestScan"));
}
+void QNetworkManagerInterfaceDeviceWireless::propertiesSwap(QMap<QString,QVariant> map)
+{
+ QMapIterator<QString, QVariant> i(map);
+ while (i.hasNext()) {
+ i.next();
+ propertyMap.insert(i.key(),i.value());
+ if (i.key() == QStringLiteral("ActiveAccessPoint")) { //DeviceWireless
+ Q_EMIT propertiesChanged(map);
+ }
+ }
+}
class QNetworkManagerInterfaceDeviceModemPrivate
{
@@ -607,7 +853,7 @@ public:
};
QNetworkManagerInterfaceDeviceModem::QNetworkManagerInterfaceDeviceModem(const QString &ifaceDevicePath, QObject *parent)
- : QObject(parent), nmDBusHelper(0)
+ : QObject(parent)
{
d = new QNetworkManagerInterfaceDeviceModemPrivate();
d->path = ifaceDevicePath;
@@ -619,6 +865,25 @@ QNetworkManagerInterfaceDeviceModem::QNetworkManagerInterfaceDeviceModem(const Q
d->valid = false;
return;
}
+ QDBusInterface deviceModemPropertiesInterface(QLatin1String(NM_DBUS_SERVICE),
+ d->path,
+ QLatin1String("org.freedesktop.DBus.Properties"),
+ QDBusConnection::systemBus(),parent);
+
+ QList<QVariant> argumentList;
+ argumentList << QLatin1String(NM_DBUS_INTERFACE_DEVICE_MODEM);
+ QDBusPendingReply<QVariantMap> propsReply
+ = deviceModemPropertiesInterface.callWithArgumentList(QDBus::Block,QLatin1String("GetAll"),
+ argumentList);
+ if (!propsReply.isError()) {
+ propertyMap = propsReply.value();
+ }
+
+ QDBusConnection::systemBus().connect(QLatin1String(NM_DBUS_SERVICE),
+ d->path,
+ QLatin1String(NM_DBUS_INTERFACE_DEVICE_MODEM),
+ QLatin1String("PropertiesChanged"),
+ this,SLOT(propertiesSwap(QMap<QString,QVariant>)));
d->valid = true;
}
@@ -639,20 +904,7 @@ bool QNetworkManagerInterfaceDeviceModem::setConnections()
if (!isValid() )
return false;
- bool allOk = true;
-
- delete nmDBusHelper;
- nmDBusHelper = new QNmDBusHelper(this);
- connect(nmDBusHelper, SIGNAL(pathForPropertiesChanged(QString,QMap<QString,QVariant>)),
- this,SIGNAL(propertiesChanged(QString,QMap<QString,QVariant>)));
- if (!QDBusConnection::systemBus().connect(QLatin1String(NM_DBUS_SERVICE),
- d->path,
- QLatin1String(NM_DBUS_INTERFACE_DEVICE_MODEM),
- QLatin1String("PropertiesChanged"),
- nmDBusHelper,SLOT(slotDevicePropertiesChanged(QMap<QString,QVariant>))) ) {
- allOk = false;
- }
- return allOk;
+ return true;
}
QDBusInterface *QNetworkManagerInterfaceDeviceModem::connectionInterface() const
@@ -660,14 +912,28 @@ QDBusInterface *QNetworkManagerInterfaceDeviceModem::connectionInterface() const
return d->connectionInterface;
}
-quint32 QNetworkManagerInterfaceDeviceModem::modemCapabilities() const
+QNetworkManagerInterfaceDeviceModem::ModemCapabilities QNetworkManagerInterfaceDeviceModem::modemCapabilities() const
+{
+ if (propertyMap.contains("ModemCapabilities"))
+ return static_cast<QNetworkManagerInterfaceDeviceModem::ModemCapabilities>(propertyMap.value("ModemCapabilities").toUInt());
+ return QNetworkManagerInterfaceDeviceModem::None;
+}
+
+QNetworkManagerInterfaceDeviceModem::ModemCapabilities QNetworkManagerInterfaceDeviceModem::currentCapabilities() const
{
- return d->connectionInterface->property("ModemCapabilities").toUInt();
+ if (propertyMap.contains("CurrentCapabilities"))
+ return static_cast<QNetworkManagerInterfaceDeviceModem::ModemCapabilities>(propertyMap.value("CurrentCapabilities").toUInt());
+ return QNetworkManagerInterfaceDeviceModem::None;
}
-quint32 QNetworkManagerInterfaceDeviceModem::currentCapabilities() const
+void QNetworkManagerInterfaceDeviceModem::propertiesSwap(QMap<QString,QVariant> map)
{
- return d->connectionInterface->property("CurrentCapabilities").toUInt();
+ QMapIterator<QString, QVariant> i(map);
+ while (i.hasNext()) {
+ i.next();
+ propertyMap.insert(i.key(),i.value());
+ }
+ Q_EMIT propertiesChanged(map);
}
class QNetworkManagerSettingsPrivate
@@ -691,6 +957,14 @@ QNetworkManagerSettings::QNetworkManagerSettings(const QString &settingsService,
d->valid = false;
return;
}
+
+ QDBusPendingReply<QList <QDBusObjectPath> > nmReply
+ = d->connectionInterface->call(QLatin1String("ListConnections"));
+
+ if (!nmReply.isError()) {
+ connectionsList = nmReply.value();
+ }
+
d->valid = true;
}
@@ -722,10 +996,16 @@ bool QNetworkManagerSettings::setConnections()
QList <QDBusObjectPath> QNetworkManagerSettings::listConnections()
{
- QDBusReply<QList<QDBusObjectPath> > reply = d->connectionInterface->call(QLatin1String("ListConnections"));
- return reply.value();
+ if (connectionsList.isEmpty()) {
+ qWarning() << "Using blocking call!";
+ QDBusReply<QList<QDBusObjectPath> > reply
+ = d->connectionInterface->call(QLatin1String("ListConnections"));
+ connectionsList = reply.value();
+ }
+ return connectionsList;
}
+
QString QNetworkManagerSettings::getConnectionByUuid(const QString &uuid)
{
QList<QVariant> argumentList;
@@ -751,7 +1031,7 @@ public:
};
QNetworkManagerSettingsConnection::QNetworkManagerSettingsConnection(const QString &settingsService, const QString &connectionObjectPath, QObject *parent)
- : QObject(parent), nmDBusHelper(0)
+ : QObject(parent)
{
qDBusRegisterMetaType<QNmSettingsMap>();
d = new QNetworkManagerSettingsConnectionPrivate();
@@ -766,8 +1046,12 @@ QNetworkManagerSettingsConnection::QNetworkManagerSettingsConnection(const QStri
return;
}
d->valid = true;
- QDBusReply< QNmSettingsMap > rep = d->connectionInterface->call(QLatin1String("GetSettings"));
- d->settingsMap = rep.value();
+
+ QDBusPendingReply<QNmSettingsMap> nmReply
+ = d->connectionInterface->call(QLatin1String("GetSettings"));
+ if (!nmReply.isError()) {
+ d->settingsMap = nmReply.value();
+ }
}
QNetworkManagerSettingsConnection::~QNetworkManagerSettingsConnection()
@@ -783,7 +1067,7 @@ bool QNetworkManagerSettingsConnection::isValid()
bool QNetworkManagerSettingsConnection::setConnections()
{
- if(!isValid() )
+ if (!isValid())
return false;
QDBusConnection dbusConnection = QDBusConnection::systemBus();
@@ -796,21 +1080,21 @@ bool QNetworkManagerSettingsConnection::setConnections()
allOk = false;
}
- delete nmDBusHelper;
- nmDBusHelper = new QNmDBusHelper(this);
- connect(nmDBusHelper, SIGNAL(pathForSettingsRemoved(QString)),
- this,SIGNAL(removed(QString)));
-
if (!dbusConnection.connect(d->service,
d->path,
QLatin1String(NM_DBUS_IFACE_SETTINGS_CONNECTION),
QLatin1String("Removed"),
- nmDBusHelper, SIGNAL(slotSettingsRemoved()))) {
+ this, SIGNAL(slotSettingsRemoved()))) {
allOk = false;
}
return allOk;
}
+void QNetworkManagerSettingsConnection::slotSettingsRemoved()
+{
+ Q_EMIT removed(d->path);
+}
+
QDBusInterface *QNetworkManagerSettingsConnection::connectionInterface() const
{
return d->connectionInterface;
@@ -818,8 +1102,11 @@ QDBusInterface *QNetworkManagerSettingsConnection::connectionInterface() const
QNmSettingsMap QNetworkManagerSettingsConnection::getSettings()
{
- QDBusReply< QNmSettingsMap > rep = d->connectionInterface->call(QLatin1String("GetSettings"));
- d->settingsMap = rep.value();
+ if (d->settingsMap.isEmpty()) {
+ qWarning() << "Using blocking call!";
+ QDBusReply<QNmSettingsMap> reply = d->connectionInterface->call(QLatin1String("GetSettings"));
+ d->settingsMap = reply.value();
+ }
return d->settingsMap;
}
@@ -832,6 +1119,8 @@ NMDeviceType QNetworkManagerSettingsConnection::getType()
return DEVICE_TYPE_ETHERNET;
else if (devType == QLatin1String("802-11-wireless"))
return DEVICE_TYPE_WIFI;
+ else if (devType == QLatin1String("gsm"))
+ return DEVICE_TYPE_MODEM;
else
return DEVICE_TYPE_UNKNOWN;
}
@@ -908,7 +1197,7 @@ public:
};
QNetworkManagerConnectionActive::QNetworkManagerConnectionActive(const QString &activeConnectionObjectPath, QObject *parent)
- : QObject(parent), nmDBusHelper(0)
+ : QObject(parent)
{
d = new QNetworkManagerConnectionActivePrivate();
d->path = activeConnectionObjectPath;
@@ -920,6 +1209,29 @@ QNetworkManagerConnectionActive::QNetworkManagerConnectionActive(const QString &
d->valid = false;
return;
}
+ QDBusInterface connectionActivePropertiesInterface(QLatin1String(NM_DBUS_SERVICE),
+ d->path,
+ QLatin1String("org.freedesktop.DBus.Properties"),
+ QDBusConnection::systemBus());
+
+
+ QList<QVariant> argumentList;
+ argumentList << QLatin1String(NM_DBUS_INTERFACE_ACTIVE_CONNECTION);
+ QDBusPendingReply<QVariantMap> propsReply
+ = connectionActivePropertiesInterface.callWithArgumentList(QDBus::Block,QLatin1String("GetAll"),
+ argumentList);
+
+ if (!propsReply.isError()) {
+ propertyMap = propsReply.value();
+ } else {
+ qWarning() << propsReply.error().message();
+ }
+
+ QDBusConnection::systemBus().connect(QLatin1String(NM_DBUS_SERVICE),
+ d->path,
+ QLatin1String(NM_DBUS_INTERFACE_ACTIVE_CONNECTION),
+ QLatin1String("PropertiesChanged"),
+ this,SLOT(propertiesSwap(QMap<QString,QVariant>)));
d->valid = true;
}
@@ -936,24 +1248,10 @@ bool QNetworkManagerConnectionActive::isValid()
bool QNetworkManagerConnectionActive::setConnections()
{
- if(!isValid() )
+ if (!isValid())
return false;
- bool allOk = true;
- delete nmDBusHelper;
- nmDBusHelper = new QNmDBusHelper(this);
- connect(nmDBusHelper, SIGNAL(pathForPropertiesChanged(QString,QMap<QString,QVariant>)),
- this,SIGNAL(propertiesChanged(QString,QMap<QString,QVariant>)));
-
- if (!QDBusConnection::systemBus().connect(QLatin1String(NM_DBUS_SERVICE),
- d->path,
- QLatin1String(NM_DBUS_INTERFACE_ACTIVE_CONNECTION),
- QLatin1String("PropertiesChanged"),
- nmDBusHelper,SLOT(activeConnectionPropertiesChanged(QMap<QString,QVariant>))) ) {
- allOk = false;
- }
-
- return allOk;
+ return true;
}
QDBusInterface *QNetworkManagerConnectionActive::connectionInterface() const
@@ -963,30 +1261,70 @@ QDBusInterface *QNetworkManagerConnectionActive::connectionInterface() const
QDBusObjectPath QNetworkManagerConnectionActive::connection() const
{
- QVariant prop = d->connectionInterface->property("Connection");
- return prop.value<QDBusObjectPath>();
+ if (propertyMap.contains("Connection"))
+ return propertyMap.value("Connection").value<QDBusObjectPath>();
+ return QDBusObjectPath();
}
QDBusObjectPath QNetworkManagerConnectionActive::specificObject() const
{
- QVariant prop = d->connectionInterface->property("SpecificObject");
- return prop.value<QDBusObjectPath>();
+ if (propertyMap.contains("SpecificObject"))
+ return propertyMap.value("SpecificObject").value<QDBusObjectPath>();
+ return QDBusObjectPath();
}
-QList<QDBusObjectPath> QNetworkManagerConnectionActive::devices() const
+QStringList QNetworkManagerConnectionActive::devices() const
{
- QVariant prop = d->connectionInterface->property("Devices");
- return prop.value<QList<QDBusObjectPath> >();
+ QStringList list;
+ if (propertyMap.contains("Devices")) {
+ const QDBusArgument &dbusArgs = propertyMap.value("Devices").value<QDBusArgument>();
+ QDBusObjectPath path;
+
+ dbusArgs.beginArray();
+ while (!dbusArgs.atEnd()) {
+ dbusArgs >> path;
+ list.append(path.path());
+ }
+ dbusArgs.endArray();
+ }
+ return list;
}
quint32 QNetworkManagerConnectionActive::state() const
{
- return d->connectionInterface->property("State").toUInt();
+ if (propertyMap.contains("State"))
+ return propertyMap.value("State").toUInt();
+ return 0;
}
bool QNetworkManagerConnectionActive::defaultRoute() const
{
- return d->connectionInterface->property("Default").toBool();
+ if (propertyMap.contains("Default"))
+ return propertyMap.value("Default").toBool();
+ return false;
+}
+
+bool QNetworkManagerConnectionActive::default6Route() const
+{
+ if (propertyMap.contains("Default6"))
+ return propertyMap.value("Default6").toBool();
+ return false;
+}
+
+void QNetworkManagerConnectionActive::propertiesSwap(QMap<QString,QVariant> map)
+{
+ QMapIterator<QString, QVariant> i(map);
+ while (i.hasNext()) {
+ i.next();
+ propertyMap.insert(i.key(),i.value());
+ if (i.key() == QStringLiteral("State")) {
+ quint32 state = i.value().toUInt();
+ if (state == NM_ACTIVE_CONNECTION_STATE_ACTIVATED
+ || state == NM_ACTIVE_CONNECTION_STATE_DEACTIVATED) {
+ Q_EMIT propertiesChanged(map);
+ }
+ }
+ }
}
class QNetworkManagerIp4ConfigPrivate
diff --git a/src/plugins/bearer/networkmanager/qnetworkmanagerservice.h b/src/plugins/bearer/networkmanager/qnetworkmanagerservice.h
index 11ddaf7088..e645159d71 100644
--- a/src/plugins/bearer/networkmanager/qnetworkmanagerservice.h
+++ b/src/plugins/bearer/networkmanager/qnetworkmanagerservice.h
@@ -56,7 +56,6 @@
#include <QtDBus/QDBusObjectPath>
#include <QtDBus/QDBusContext>
#include <QMap>
-#include "qnmdbushelper.h"
#ifndef QT_NO_DBUS
@@ -89,7 +88,7 @@ typedef enum
NM_ACTIVE_CONNECTION_STATE_UNKNOWN = 0,
NM_ACTIVE_CONNECTION_STATE_ACTIVATING,
NM_ACTIVE_CONNECTION_STATE_ACTIVATED,
- NM_ACTIVE_CONNECTION_STATE_DEACTIVATED
+ NM_ACTIVE_CONNECTION_STATE_DEACTIVATED = 4
} NMActiveConnectionState;
#define NM_DBUS_SERVICE "org.freedesktop.NetworkManager"
@@ -135,12 +134,23 @@ class QNetworkManagerInterface : public QObject
Q_OBJECT
public:
+ typedef enum
+ {
+ NM_STATE_UNKNOWN = 0,
+ NM_STATE_ASLEEP = 10,
+ NM_STATE_DISCONNECTED = 20,
+ NM_STATE_DISCONNECTING = 30,
+ NM_STATE_CONNECTING = 40,
+ NM_STATE_CONNECTED_LOCAL = 50,
+ NM_STATE_CONNECTED_SITE = 60,
+ NM_STATE_CONNECTED_GLOBAL = 70
+ } NMState;
QNetworkManagerInterface(QObject *parent = 0);
~QNetworkManagerInterface();
- QList <QDBusObjectPath> getDevices() const;
- void activateConnection(const QString &serviceName, QDBusObjectPath connection, QDBusObjectPath device, QDBusObjectPath specificObject);
+ QList <QDBusObjectPath> getDevices();
+ void activateConnection(QDBusObjectPath connection,QDBusObjectPath device, QDBusObjectPath specificObject);
void deactivateConnection(QDBusObjectPath connectionPath) const;
QDBusObjectPath path() const;
@@ -149,21 +159,28 @@ public:
bool wirelessEnabled() const;
bool wirelessHardwareEnabled() const;
QList <QDBusObjectPath> activeConnections() const;
- quint32 state();
+ NMState state();
+ QString version() const;
bool setConnections();
bool isValid();
Q_SIGNALS:
void deviceAdded(QDBusObjectPath);
void deviceRemoved(QDBusObjectPath);
- void propertiesChanged( const QString &, QMap<QString,QVariant>);
- void stateChanged(const QString&, quint32);
+ void propertiesChanged(QMap<QString,QVariant>);
+ void stateChanged(quint32);
void activationFinished(QDBusPendingCallWatcher*);
+ void propertiesReady();
+ void devicesListReady();
private Q_SLOTS:
+ void propertiesSwap(QMap<QString,QVariant>);
+
private:
QNetworkManagerInterfacePrivate *d;
- QNmDBusHelper *nmDBusHelper;
+ QVariantMap propertyMap;
+ QList<QDBusObjectPath> devicesPathList;
+
};
class QNetworkManagerInterfaceAccessPointPrivate;
@@ -228,11 +245,14 @@ public:
Q_SIGNALS:
void propertiesChanged(QMap <QString,QVariant>);
- void propertiesChanged( const QString &, QMap<QString,QVariant>);
+ void propertiesReady();
+
+private Q_SLOTS:
+ void propertiesSwap(QMap<QString,QVariant>);
+
private:
QNetworkManagerInterfaceAccessPointPrivate *d;
- QNmDBusHelper *nmDBusHelper;
-
+ QVariantMap propertyMap;
};
class QNetworkManagerInterfaceDevicePrivate;
@@ -258,11 +278,14 @@ public:
Q_SIGNALS:
void stateChanged(const QString &, quint32);
- void propertiesChanged(const QString &, QMap<QString,QVariant>);
+ void propertiesChanged(QMap<QString,QVariant>);
void connectionsChanged(QStringList);
+ void propertiesReady();
+private Q_SLOTS:
+ void propertiesSwap(QMap<QString,QVariant>);
private:
QNetworkManagerInterfaceDevicePrivate *d;
- QNmDBusHelper *nmDBusHelper;
+ QVariantMap propertyMap;
};
class QNetworkManagerInterfaceDeviceWiredPrivate;
@@ -282,12 +305,19 @@ public:
bool carrier() const;
bool setConnections();
bool isValid();
+ QStringList availableConnections();
Q_SIGNALS:
- void propertiesChanged( const QString &, QMap<QString,QVariant>);
+ void propertiesChanged(QMap<QString,QVariant>);
+ void propertiesReady();
+ void carrierChanged(bool);
+
+private Q_SLOTS:
+ void propertiesSwap(QMap<QString,QVariant>);
+
private:
QNetworkManagerInterfaceDeviceWiredPrivate *d;
- QNmDBusHelper *nmDBusHelper;
+ QVariantMap propertyMap;
};
class QNetworkManagerInterfaceDeviceWirelessPrivate;
@@ -325,15 +355,26 @@ public:
void requestScan();
Q_SIGNALS:
- void propertiesChanged( const QString &, QMap<QString,QVariant>);
+ void propertiesChanged(QMap<QString,QVariant>);
void accessPointAdded(const QString &);
void accessPointRemoved(const QString &);
void scanDone();
+ void propertiesReady();
+ void accessPointsReady();
+
private Q_SLOTS:
void scanIsDone();
+ void propertiesSwap(QMap<QString,QVariant>);
+
+ void slotAccessPointAdded(QDBusObjectPath);
+ void slotAccessPointRemoved(QDBusObjectPath);
+
+ void accessPointsFinished(QDBusPendingCallWatcher *watcher);
+
private:
QNetworkManagerInterfaceDeviceWirelessPrivate *d;
- QNmDBusHelper *nmDBusHelper;
+ QVariantMap propertyMap;
+ QList <QDBusObjectPath> accessPointsList;
};
class QNetworkManagerInterfaceDeviceModemPrivate;
@@ -350,6 +391,7 @@ public:
Gsm_Umts = 0x4,
Lte = 0x08
};
+ Q_DECLARE_FLAGS(ModemCapabilities, ModemCapability)
explicit QNetworkManagerInterfaceDeviceModem(const QString &ifaceDevicePath,
QObject *parent = 0);
@@ -361,16 +403,22 @@ public:
bool setConnections();
bool isValid();
- quint32 modemCapabilities() const;
- quint32 currentCapabilities() const;
+ ModemCapabilities modemCapabilities() const;
+ ModemCapabilities currentCapabilities() const;
Q_SIGNALS:
- void propertiesChanged( const QString &, QMap<QString,QVariant>);
+ void propertiesChanged(QMap<QString,QVariant>);
+ void propertiesReady();
+
+private Q_SLOTS:
+ void propertiesSwap(QMap<QString,QVariant>);
+
private:
QNetworkManagerInterfaceDeviceModemPrivate *d;
- QNmDBusHelper *nmDBusHelper;
+ QVariantMap propertyMap;
};
+Q_DECLARE_OPERATORS_FOR_FLAGS(QNetworkManagerInterfaceDeviceModem::ModemCapabilities)
class QNetworkManagerSettingsPrivate;
class QNetworkManagerSettings : public QObject
@@ -390,8 +438,10 @@ public:
Q_SIGNALS:
void newConnection(QDBusObjectPath);
+ void connectionsListReady();
private:
QNetworkManagerSettingsPrivate *d;
+ QList <QDBusObjectPath> connectionsList;
};
class QNetworkManagerSettingsConnectionPrivate;
@@ -418,12 +468,14 @@ public:
bool isValid();
Q_SIGNALS:
-
void updated();
void removed(const QString &path);
+ void settingsReady();
+
+private Q_SLOTS:
+ void slotSettingsRemoved();
private:
- QNmDBusHelper *nmDBusHelper;
QNetworkManagerSettingsConnectionPrivate *d;
};
@@ -444,22 +496,26 @@ public:
~ QNetworkManagerConnectionActive();
QDBusInterface *connectionInterface() const;
- QString serviceName() const;
QDBusObjectPath connection() const;
QDBusObjectPath specificObject() const;
- QList<QDBusObjectPath> devices() const;
+ QStringList devices() const;
quint32 state() const;
bool defaultRoute() const;
+ bool default6Route() const;
bool setConnections();
bool isValid();
Q_SIGNALS:
- void propertiesChanged(QList<QDBusObjectPath>);
- void propertiesChanged( const QString &, QMap<QString,QVariant>);
+ void propertiesChanged(QMap<QString,QVariant>);
+ void propertiesReady();
+
+private Q_SLOTS:
+ void propertiesSwap(QMap<QString,QVariant>);
+
private:
QNetworkManagerConnectionActivePrivate *d;
- QNmDBusHelper *nmDBusHelper;
+ QVariantMap propertyMap;
};
class QNetworkManagerIp4ConfigPrivate;
diff --git a/src/plugins/bearer/networkmanager/qnmdbushelper.cpp b/src/plugins/bearer/networkmanager/qnmdbushelper.cpp
deleted file mode 100644
index 0decfd78b9..0000000000
--- a/src/plugins/bearer/networkmanager/qnmdbushelper.cpp
+++ /dev/null
@@ -1,140 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the plugins of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL21$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia. For licensing terms and
-** conditions see http://qt.digia.com/licensing. For further information
-** use the contact form at http://qt.digia.com/contact-us.
-**
-** 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 or version 3 as published by the Free
-** Software Foundation and appearing in the file LICENSE.LGPLv21 and
-** LICENSE.LGPLv3 included in the packaging of this file. Please review the
-** following information to ensure the GNU Lesser General Public License
-** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Digia gives you certain additional
-** rights. These rights are described in the Digia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-// this class is for helping qdbus get stuff
-
-#include "qnmdbushelper.h"
-
-#include "qnetworkmanagerservice.h"
-
-#include <QDBusError>
-#include <QDBusInterface>
-#include <QDBusMessage>
-#include <QDBusReply>
-
-#include <QDebug>
-
-#ifndef QT_NO_DBUS
-
-QT_BEGIN_NAMESPACE
-
-QNmDBusHelper::QNmDBusHelper(QObject * parent)
- : QObject(parent)
-{
-}
-
-QNmDBusHelper::~QNmDBusHelper()
-{
-}
-
-void QNmDBusHelper::deviceStateChanged(quint32 state)
- {
- QDBusMessage msg = this->message();
- if (state == NM_DEVICE_STATE_ACTIVATED
- || state == NM_DEVICE_STATE_DISCONNECTED
- || state == NM_DEVICE_STATE_UNAVAILABLE
- || state == NM_DEVICE_STATE_FAILED) {
- emit pathForStateChanged(msg.path(), state);
- }
- }
-
-void QNmDBusHelper::slotAccessPointAdded(QDBusObjectPath path)
-{
- if (path.path().length() > 2)
- emit pathForAccessPointAdded(path.path());
-}
-
-void QNmDBusHelper::slotAccessPointRemoved(QDBusObjectPath path)
-{
- if (path.path().length() > 2)
- emit pathForAccessPointRemoved(path.path());
-}
-
-void QNmDBusHelper::slotPropertiesChanged(QMap<QString,QVariant> map)
-{
- QDBusMessage msg = this->message();
- QMapIterator<QString, QVariant> i(map);
- while (i.hasNext()) {
- i.next();
- if (i.key() == QStringLiteral("State")) {
- quint32 state = i.value().toUInt();
- if (state == NM_DEVICE_STATE_ACTIVATED
- || state == NM_DEVICE_STATE_DISCONNECTED
- || state == NM_DEVICE_STATE_UNAVAILABLE
- || state == NM_DEVICE_STATE_FAILED) {
- emit pathForPropertiesChanged(msg.path(), map);
- }
- } else if (i.key() == QStringLiteral("ActiveAccessPoint")) {
- emit pathForPropertiesChanged(msg.path(), map);
- } else if (i.key() == QStringLiteral("ActiveConnections")) {
- emit pathForPropertiesChanged(msg.path(), map);
- } else if (i.key() == QStringLiteral("AvailableConnections")) {
- const QDBusArgument &dbusArgs = i.value().value<QDBusArgument>();
- QDBusObjectPath path;
- QStringList paths;
- dbusArgs.beginArray();
- while (!dbusArgs.atEnd()) {
- dbusArgs >> path;
- paths << path.path();
- }
- dbusArgs.endArray();
- emit pathForConnectionsChanged(paths);
- }
- }
-}
-
-void QNmDBusHelper::slotSettingsRemoved()
-{
- QDBusMessage msg = this->message();
- emit pathForSettingsRemoved(msg.path());
-}
-
-void QNmDBusHelper::activeConnectionPropertiesChanged(QMap<QString,QVariant> map)
-{
- QDBusMessage msg = this->message();
- QMapIterator<QString, QVariant> i(map);
- while (i.hasNext()) {
- i.next();
- if (i.key() == QStringLiteral("State")) {
- quint32 state = i.value().toUInt();
- if (state == NM_ACTIVE_CONNECTION_STATE_ACTIVATED
- || state == NM_ACTIVE_CONNECTION_STATE_DEACTIVATED) {
- emit pathForPropertiesChanged(msg.path(), map);
- }
- }
- }
-}
-
-QT_END_NAMESPACE
-
-#endif // QT_NO_DBUS
diff --git a/src/plugins/bearer/networkmanager/qnmdbushelper.h b/src/plugins/bearer/networkmanager/qnmdbushelper.h
deleted file mode 100644
index e224af87f1..0000000000
--- a/src/plugins/bearer/networkmanager/qnmdbushelper.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the plugins of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL21$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia. For licensing terms and
-** conditions see http://qt.digia.com/licensing. For further information
-** use the contact form at http://qt.digia.com/contact-us.
-**
-** 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 or version 3 as published by the Free
-** Software Foundation and appearing in the file LICENSE.LGPLv21 and
-** LICENSE.LGPLv3 included in the packaging of this file. Please review the
-** following information to ensure the GNU Lesser General Public License
-** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Digia gives you certain additional
-** rights. These rights are described in the Digia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QNMDBUSHELPERPRIVATE_H
-#define QNMDBUSHELPERPRIVATE_H
-
-#include <QDBusObjectPath>
-#include <QDBusContext>
-#include <QMap>
-
-#ifndef QT_NO_DBUS
-
-QT_BEGIN_NAMESPACE
-
-class QNmDBusHelper: public QObject, protected QDBusContext
- {
- Q_OBJECT
- public:
- QNmDBusHelper(QObject *parent = 0);
- ~QNmDBusHelper();
-
- public slots:
- void deviceStateChanged(quint32);
- void slotAccessPointAdded(QDBusObjectPath);
- void slotAccessPointRemoved(QDBusObjectPath);
- void slotPropertiesChanged(QMap<QString,QVariant>);
- void slotSettingsRemoved();
- void activeConnectionPropertiesChanged(QMap<QString,QVariant>);
-
-Q_SIGNALS:
- void pathForStateChanged(const QString &, quint32);
- void pathForAccessPointAdded(const QString &);
- void pathForAccessPointRemoved(const QString &);
- void pathForPropertiesChanged(const QString &, QMap<QString,QVariant>);
- void pathForSettingsRemoved(const QString &);
- void pathForConnectionsChanged(const QStringList &pathsList);
-};
-
-QT_END_NAMESPACE
-
-#endif // QT_NO_DBUS
-
-#endif// QNMDBUSHELPERPRIVATE_H
diff --git a/src/plugins/bearer/qnetworksession_impl.cpp b/src/plugins/bearer/qnetworksession_impl.cpp
index 1db59fec94..c5adc98af7 100644
--- a/src/plugins/bearer/qnetworksession_impl.cpp
+++ b/src/plugins/bearer/qnetworksession_impl.cpp
@@ -366,7 +366,8 @@ void QNetworkSessionPrivateImpl::networkConfigurationsChanged()
else
updateStateFromActiveConfig();
- startTime = engine->startTime(activeConfig.identifier());
+ if (engine)
+ startTime = engine->startTime(activeConfig.identifier());
}
void QNetworkSessionPrivateImpl::configurationChanged(QNetworkConfigurationPrivatePointer config)