From 0ca0ecdb32b3d7df76fe9782d04493ebe0da0a9e Mon Sep 17 00:00:00 2001 From: Lorn Potter Date: Mon, 20 Oct 2014 11:31:00 +1000 Subject: Make networkmanager bearer backend work better This fixes QNetworkConfigurations when user: - configures new AP - deletes connection configuration - switches wifi AP Change-Id: I38c543c6de7b61f49d7ac96fa05f7a6fc4fba70f Reviewed-by: Alex Blasche --- .../networkmanager/qnetworkmanagerservice.cpp | 137 +++++++++++++-------- 1 file changed, 88 insertions(+), 49 deletions(-) (limited to 'src/plugins/bearer/networkmanager/qnetworkmanagerservice.cpp') diff --git a/src/plugins/bearer/networkmanager/qnetworkmanagerservice.cpp b/src/plugins/bearer/networkmanager/qnetworkmanagerservice.cpp index d154f1187e..f249ac6100 100644 --- a/src/plugins/bearer/networkmanager/qnetworkmanagerservice.cpp +++ b/src/plugins/bearer/networkmanager/qnetworkmanagerservice.cpp @@ -322,18 +322,31 @@ bool QNetworkManagerInterfaceDevice::setConnections() if(!isValid() ) return false; - bool allOk = 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 = true; + 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))) ) { + allOk = false; } + return allOk; } @@ -414,18 +427,18 @@ bool QNetworkManagerInterfaceDeviceWired::setConnections() if(!isValid() ) return false; - bool allOk = false; + bool allOk = true; delete nmDBusHelper; nmDBusHelper = new QNmDBusHelper(this); connect(nmDBusHelper, SIGNAL(pathForPropertiesChanged(QString,QMap)), this,SIGNAL(propertiesChanged(QString,QMap))); - if (QDBusConnection::systemBus().connect(QLatin1String(NM_DBUS_SERVICE), + if (!QDBusConnection::systemBus().connect(QLatin1String(NM_DBUS_SERVICE), d->path, QLatin1String(NM_DBUS_INTERFACE_DEVICE_WIRED), QLatin1String("PropertiesChanged"), nmDBusHelper,SLOT(slotPropertiesChanged(QMap))) ) { - allOk = true; + allOk = false; } return allOk; } @@ -491,44 +504,50 @@ bool QNetworkManagerInterfaceDeviceWireless::setConnections() return false; QDBusConnection dbusConnection = QDBusConnection::systemBus(); - bool allOk = false; + bool allOk = true; delete nmDBusHelper; nmDBusHelper = new QNmDBusHelper(this); connect(nmDBusHelper, SIGNAL(pathForPropertiesChanged(QString,QMap)), this,SIGNAL(propertiesChanged(QString,QMap))); - connect(nmDBusHelper, SIGNAL(pathForAccessPointAdded(QString,QDBusObjectPath)), - this,SIGNAL(accessPointAdded(QString,QDBusObjectPath))); + connect(nmDBusHelper, SIGNAL(pathForAccessPointAdded(QString)), + this,SIGNAL(accessPointAdded(QString))); - connect(nmDBusHelper, SIGNAL(pathForAccessPointRemoved(QString,QDBusObjectPath)), - this,SIGNAL(accessPointRemoved(QString,QDBusObjectPath))); + connect(nmDBusHelper, SIGNAL(pathForAccessPointRemoved(QString)), + this,SIGNAL(accessPointRemoved(QString))); - if (dbusConnection.connect(QLatin1String(NM_DBUS_SERVICE), + if (!dbusConnection.connect(QLatin1String(NM_DBUS_SERVICE), d->path, QLatin1String(NM_DBUS_INTERFACE_DEVICE_WIRELESS), QLatin1String("AccessPointAdded"), nmDBusHelper, SLOT(slotAccessPointAdded(QDBusObjectPath)))) { - allOk = true; + allOk = false; } - if (dbusConnection.connect(QLatin1String(NM_DBUS_SERVICE), + if (!dbusConnection.connect(QLatin1String(NM_DBUS_SERVICE), d->path, QLatin1String(NM_DBUS_INTERFACE_DEVICE_WIRELESS), QLatin1String("AccessPointRemoved"), nmDBusHelper, SLOT(slotAccessPointRemoved(QDBusObjectPath)))) { - allOk = true; + allOk = false; } - if (dbusConnection.connect(QLatin1String(NM_DBUS_SERVICE), + if (!dbusConnection.connect(QLatin1String(NM_DBUS_SERVICE), d->path, QLatin1String(NM_DBUS_INTERFACE_DEVICE_WIRELESS), QLatin1String("PropertiesChanged"), nmDBusHelper,SLOT(slotPropertiesChanged(QMap)))) { - allOk = true; + allOk = false; + } + if (!dbusConnection.connect(QLatin1String(NM_DBUS_SERVICE), + d->path, + QLatin1String(NM_DBUS_INTERFACE_DEVICE_WIRELESS), + QLatin1String("ScanDone"), + this, SLOT(scanIsDone()))) { + allOk = false; } - return allOk; } @@ -568,6 +587,17 @@ quint32 QNetworkManagerInterfaceDeviceWireless::wirelessCapabilities() const return d->connectionInterface->property("WirelelessCapabilities").toUInt(); } +void QNetworkManagerInterfaceDeviceWireless::scanIsDone() +{ + Q_EMIT scanDone(); +} + +void QNetworkManagerInterfaceDeviceWireless::requestScan() +{ + d->connectionInterface->asyncCall(QLatin1String("RequestScan")); +} + + class QNetworkManagerInterfaceDeviceModemPrivate { public: @@ -609,18 +639,18 @@ bool QNetworkManagerInterfaceDeviceModem::setConnections() if (!isValid() ) return false; - bool allOk = false; + bool allOk = true; delete nmDBusHelper; nmDBusHelper = new QNmDBusHelper(this); connect(nmDBusHelper, SIGNAL(pathForPropertiesChanged(QString,QMap)), this,SIGNAL(propertiesChanged(QString,QMap))); - if (QDBusConnection::systemBus().connect(QLatin1String(NM_DBUS_SERVICE), + if (!QDBusConnection::systemBus().connect(QLatin1String(NM_DBUS_SERVICE), d->path, QLatin1String(NM_DBUS_INTERFACE_DEVICE_MODEM), QLatin1String("PropertiesChanged"), nmDBusHelper,SLOT(slotDevicePropertiesChanged(QMap))) ) { - allOk = true; + allOk = false; } return allOk; } @@ -640,9 +670,6 @@ quint32 QNetworkManagerInterfaceDeviceModem::currentCapabilities() const return d->connectionInterface->property("CurrentCapabilities").toUInt(); } - - - class QNetworkManagerSettingsPrivate { public: @@ -680,12 +707,14 @@ bool QNetworkManagerSettings::isValid() bool QNetworkManagerSettings::setConnections() { - bool allOk = false; + bool allOk = true; - if (QDBusConnection::systemBus().connect(d->path, QLatin1String(NM_DBUS_PATH_SETTINGS), - QLatin1String(NM_DBUS_IFACE_SETTINGS), QLatin1String("NewConnection"), - this, SIGNAL(newConnection(QDBusObjectPath)))) { - allOk = true; + if (!QDBusConnection::systemBus().connect(d->path, + QLatin1String(NM_DBUS_PATH_SETTINGS), + QLatin1String(NM_DBUS_IFACE_SETTINGS), + QLatin1String("NewConnection"), + this, SIGNAL(newConnection(QDBusObjectPath)))) { + allOk = false; } return allOk; @@ -697,6 +726,14 @@ QList QNetworkManagerSettings::listConnections() return reply.value(); } +QString QNetworkManagerSettings::getConnectionByUuid(const QString &uuid) +{ + QList argumentList; + argumentList << QVariant::fromValue(uuid); + QDBusReply reply = d->connectionInterface->callWithArgumentList(QDBus::Block,QLatin1String("GetConnectionByUuid"), argumentList); + return reply.value().path(); +} + QDBusInterface *QNetworkManagerSettings::connectionInterface() const { return d->connectionInterface; @@ -750,13 +787,13 @@ bool QNetworkManagerSettingsConnection::setConnections() return false; QDBusConnection dbusConnection = QDBusConnection::systemBus(); - bool allOk = false; - if (dbusConnection.connect(d->service, d->path, - QLatin1String(NM_DBUS_IFACE_SETTINGS_CONNECTION), QLatin1String("Updated"), - this, SIGNAL(updated(QNmSettingsMap)))) { - allOk = true; - } else { - QDBusError error = dbusConnection.lastError(); + bool allOk = true; + if (!dbusConnection.connect(d->service, + d->path, + QLatin1String(NM_DBUS_IFACE_SETTINGS_CONNECTION), + QLatin1String("Updated"), + this, SIGNAL(updated()))) { + allOk = false; } delete nmDBusHelper; @@ -764,12 +801,13 @@ bool QNetworkManagerSettingsConnection::setConnections() 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()))) { - allOk = true; + if (!dbusConnection.connect(d->service, + d->path, + QLatin1String(NM_DBUS_IFACE_SETTINGS_CONNECTION), + QLatin1String("Removed"), + nmDBusHelper, SIGNAL(slotSettingsRemoved()))) { + allOk = false; } - return allOk; } @@ -791,9 +829,9 @@ NMDeviceType QNetworkManagerSettingsConnection::getType() d->settingsMap.value(QLatin1String("connection")).value(QLatin1String("type")).toString(); if (devType == QLatin1String("802-3-ethernet")) - return DEVICE_TYPE_802_3_ETHERNET; + return DEVICE_TYPE_ETHERNET; else if (devType == QLatin1String("802-11-wireless")) - return DEVICE_TYPE_802_11_WIRELESS; + return DEVICE_TYPE_WIFI; else return DEVICE_TYPE_UNKNOWN; } @@ -840,10 +878,10 @@ QString QNetworkManagerSettingsConnection::getMacAddress() { NMDeviceType type = getType(); - if (type == DEVICE_TYPE_802_3_ETHERNET) { + if (type == DEVICE_TYPE_ETHERNET) { return d->settingsMap.value(QLatin1String("802-3-ethernet")) .value(QLatin1String("mac-address")).toString(); - } else if (type == DEVICE_TYPE_802_11_WIRELESS) { + } else if (type == DEVICE_TYPE_WIFI) { return d->settingsMap.value(QLatin1String("802-11-wireless")) .value(QLatin1String("mac-address")).toString(); } else { @@ -853,7 +891,7 @@ QString QNetworkManagerSettingsConnection::getMacAddress() QStringList QNetworkManagerSettingsConnection::getSeenBssids() { - if (getType() == DEVICE_TYPE_802_11_WIRELESS) { + if (getType() == DEVICE_TYPE_WIFI) { return d->settingsMap.value(QLatin1String("802-11-wireless")) .value(QLatin1String("seen-bssids")).toStringList(); } else { @@ -901,17 +939,18 @@ bool QNetworkManagerConnectionActive::setConnections() if(!isValid() ) return false; - bool allOk = false; + bool allOk = true; delete nmDBusHelper; nmDBusHelper = new QNmDBusHelper(this); connect(nmDBusHelper, SIGNAL(pathForPropertiesChanged(QString,QMap)), this,SIGNAL(propertiesChanged(QString,QMap))); - if (QDBusConnection::systemBus().connect(QLatin1String(NM_DBUS_SERVICE), + + if (!QDBusConnection::systemBus().connect(QLatin1String(NM_DBUS_SERVICE), d->path, QLatin1String(NM_DBUS_INTERFACE_ACTIVE_CONNECTION), QLatin1String("PropertiesChanged"), - nmDBusHelper,SLOT(slotPropertiesChanged(QMap))) ) { - allOk = true; + nmDBusHelper,SLOT(activeConnectionPropertiesChanged(QMap))) ) { + allOk = false; } return allOk; -- cgit v1.2.3