1
From f217a8096b3c6188dd1d1520d854f330dbb17264 Mon Sep 17 00:00:00 2001
2
From: Lorn Potter <lorn.potter@gmail.com>
3
Date: Thu, 13 Nov 2014 13:06:49 +1000
4
Subject: [PATCH] QtBearer networkmanager make sure to set flag Active
6
Also, no need to create objects to get properties, when the properties
9
Make plugin more robust to network-manager or ofono crashes
11
Change-Id: Ibadb46bd51aa27f130f8d245e8c50aa7bff5f9c8
12
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
13
Reviewed-by: Timo Jyrinki <timo.jyrinki@canonical.com>
15
.../bearer/linux_common/qofonoservice_linux.cpp | 12 +
16
.../bearer/linux_common/qofonoservice_linux_p.h | 2 +
17
src/plugins/bearer/networkmanager/main.cpp | 5 +-
18
.../networkmanager/qnetworkmanagerengine.cpp | 310 ++++++++++++++-------
19
.../bearer/networkmanager/qnetworkmanagerengine.h | 13 +
20
.../networkmanager/qnetworkmanagerservice.cpp | 22 ++
21
.../bearer/networkmanager/qnetworkmanagerservice.h | 2 +
22
7 files changed, 263 insertions(+), 103 deletions(-)
24
diff --git a/src/plugins/bearer/linux_common/qofonoservice_linux.cpp b/src/plugins/bearer/linux_common/qofonoservice_linux.cpp
25
index b2e2131..abbfd44 100644
26
--- a/src/plugins/bearer/linux_common/qofonoservice_linux.cpp
27
+++ b/src/plugins/bearer/linux_common/qofonoservice_linux.cpp
28
@@ -269,6 +269,18 @@ QStringList QOfonoDataConnectionManagerInterface::contexts()
32
+PathPropertiesList QOfonoDataConnectionManagerInterface::contextsWithProperties()
34
+ if (contextListProperties.isEmpty()) {
35
+ QDBusPendingReply<PathPropertiesList > reply = call(QLatin1String("GetContexts"));
36
+ reply.waitForFinished();
37
+ if (!reply.isError()) {
38
+ contextListProperties = reply.value();
41
+ return contextListProperties;
44
bool QOfonoDataConnectionManagerInterface::roamingAllowed()
46
QVariant var = getProperty(QStringLiteral("RoamingAllowed"));
47
diff --git a/src/plugins/bearer/linux_common/qofonoservice_linux_p.h b/src/plugins/bearer/linux_common/qofonoservice_linux_p.h
48
index 0ed00d9..3b97e06 100644
49
--- a/src/plugins/bearer/linux_common/qofonoservice_linux_p.h
50
+++ b/src/plugins/bearer/linux_common/qofonoservice_linux_p.h
51
@@ -153,6 +153,7 @@ public:
52
~QOfonoDataConnectionManagerInterface();
54
QStringList contexts();
55
+ PathPropertiesList contextsWithProperties();
56
bool roamingAllowed();
57
QVariant getProperty(const QString &);
59
@@ -162,6 +163,7 @@ private:
60
QVariantMap getProperties();
61
QVariantMap propertiesMap;
62
QStringList contextList;
63
+ PathPropertiesList contextListProperties;
65
void propertyChanged(const QString &, const QDBusVariant &value);
67
diff --git a/src/plugins/bearer/networkmanager/main.cpp b/src/plugins/bearer/networkmanager/main.cpp
68
index f416bb4..3576ddc 100644
69
--- a/src/plugins/bearer/networkmanager/main.cpp
70
+++ b/src/plugins/bearer/networkmanager/main.cpp
71
@@ -66,10 +66,7 @@ QBearerEngine *QNetworkManagerEnginePlugin::create(const QString &key) const
73
if (key == QLatin1String("networkmanager")) {
74
QNetworkManagerEngine *engine = new QNetworkManagerEngine;
75
- if (engine->networkManagerAvailable())
83
diff --git a/src/plugins/bearer/networkmanager/qnetworkmanagerengine.cpp b/src/plugins/bearer/networkmanager/qnetworkmanagerengine.cpp
84
index a8244f0..f0977b4 100644
85
--- a/src/plugins/bearer/networkmanager/qnetworkmanagerengine.cpp
86
+++ b/src/plugins/bearer/networkmanager/qnetworkmanagerengine.cpp
87
@@ -56,29 +56,34 @@ QT_BEGIN_NAMESPACE
89
QNetworkManagerEngine::QNetworkManagerEngine(QObject *parent)
90
: QBearerEngineImpl(parent),
91
- managerInterface(new QNetworkManagerInterface(this)),
92
- systemSettings(new QNetworkManagerSettings(NM_DBUS_SERVICE, this)),
93
- ofonoManager(new QOfonoManagerInterface(this))
94
+ managerInterface(NULL),
95
+ systemSettings(NULL),
100
- if (!managerInterface->isValid())
103
qDBusRegisterMetaType<QNmSettingsMap>();
105
- connect(managerInterface, SIGNAL(deviceAdded(QDBusObjectPath)),
106
- this, SLOT(deviceAdded(QDBusObjectPath)));
107
- connect(managerInterface, SIGNAL(deviceRemoved(QDBusObjectPath)),
108
- this, SLOT(deviceRemoved(QDBusObjectPath)));
109
- connect(managerInterface, SIGNAL(activationFinished(QDBusPendingCallWatcher*)),
110
- this, SLOT(activationFinished(QDBusPendingCallWatcher*)));
111
- connect(managerInterface, SIGNAL(propertiesChanged(QMap<QString,QVariant>)),
112
- this, SLOT(interfacePropertiesChanged(QMap<QString,QVariant>)));
113
- managerInterface->setConnections();
115
- connect(systemSettings, SIGNAL(newConnection(QDBusObjectPath)),
116
- this, SLOT(newConnection(QDBusObjectPath)));
117
- systemSettings->setConnections();
118
+ nmWatcher = new QDBusServiceWatcher(NM_DBUS_SERVICE,QDBusConnection::systemBus(),
119
+ QDBusServiceWatcher::WatchForRegistration |
120
+ QDBusServiceWatcher::WatchForUnregistration, this);
121
+ connect(nmWatcher, SIGNAL(serviceRegistered(QString)),
122
+ this, SLOT(nmRegistered(QString)));
123
+ connect(nmWatcher, SIGNAL(serviceUnregistered(QString)),
124
+ this, SLOT(nmUnRegistered(QString)));
126
+ ofonoWatcher = new QDBusServiceWatcher("org.ofono",QDBusConnection::systemBus(),
127
+ QDBusServiceWatcher::WatchForRegistration |
128
+ QDBusServiceWatcher::WatchForUnregistration, this);
129
+ connect(ofonoWatcher, SIGNAL(serviceRegistered(QString)),
130
+ this, SLOT(ofonoRegistered(QString)));
131
+ connect(ofonoWatcher, SIGNAL(serviceUnregistered(QString)),
132
+ this, SLOT(ofonoUnRegistered(QString)));
134
+ if (QDBusConnection::systemBus().interface()->isServiceRegistered("org.ofono"))
137
+ if (QDBusConnection::systemBus().interface()->isServiceRegistered(NM_DBUS_SERVICE))
141
QNetworkManagerEngine::~QNetworkManagerEngine()
142
@@ -105,15 +110,13 @@ QNetworkManagerEngine::~QNetworkManagerEngine()
144
void QNetworkManagerEngine::initialize()
146
- QMutexLocker locker(&mutex);
148
+ setupConfigurations();
151
- if (ofonoManager->isValid()) {
152
- Q_FOREACH (const QString &modem, ofonoManager->getModems()) {
153
- QOfonoDataConnectionManagerInterface *ofonoContextManager
154
- = new QOfonoDataConnectionManagerInterface(modem,this);
155
- ofonoContextManagers.insert(modem, ofonoContextManager);
158
+void QNetworkManagerEngine::setupConfigurations()
160
+ QMutexLocker locker(&mutex);
161
// Get active connections.
162
foreach (const QDBusObjectPath &acPath, managerInterface->activeConnections()) {
164
@@ -151,7 +154,7 @@ void QNetworkManagerEngine::initialize()
166
bool QNetworkManagerEngine::networkManagerAvailable() const
168
- return managerInterface->isValid();
169
+ return nmAvailable;
172
QString QNetworkManagerEngine::getInterfaceFromId(const QString &settingsPath)
173
@@ -180,6 +183,9 @@ void QNetworkManagerEngine::connectToId(const QString &id)
174
const QString settingsPath = connection->connectionInterface()->path();
175
QString specificPath = configuredAccessPoints.key(settingsPath);
177
+ if (isConnectionActive(settingsPath))
180
QHashIterator<QString, QNetworkManagerInterfaceDevice*> i(interfaceDevices);
181
while (i.hasNext()) {
183
@@ -229,7 +235,7 @@ void QNetworkManagerEngine::disconnectFromId(const QString &id)
185
void QNetworkManagerEngine::requestUpdate()
187
- if (managerInterface->wirelessEnabled()) {
188
+ if (managerInterface && managerInterface->wirelessEnabled()) {
189
QHashIterator<QString, QNetworkManagerInterfaceDeviceWireless *> i(wirelessDevices);
190
while (i.hasNext()) {
192
@@ -282,8 +288,9 @@ void QNetworkManagerEngine::interfacePropertiesChanged(const QMap<QString, QVari
195
if (activeConnection->state() == NM_ACTIVE_CONNECTION_STATE_ACTIVATED &&
196
- ptr->state != QNetworkConfiguration::Active) {
197
- ptr->state = QNetworkConfiguration::Active;
198
+ (ptr->state & QNetworkConfiguration::Active) != QNetworkConfiguration::Active) {
200
+ ptr->state |= QNetworkConfiguration::Active;
202
if (activeConnectionsList.value(id) && activeConnectionsList.value(id)->defaultRoute()
203
&& managerInterface->state() < QNetworkManagerInterface::NM_STATE_CONNECTED_GLOBAL) {
204
@@ -339,23 +346,25 @@ void QNetworkManagerEngine::activeConnectionPropertiesChanged(const QMap<QString
206
QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.value(id);
209
- if (properties.value("State").toUInt() == NM_ACTIVE_CONNECTION_STATE_ACTIVATED) {
210
- QStringList devices = activeConnection->devices();
211
- if (!devices.isEmpty()) {
212
- QNetworkManagerInterfaceDevice device(devices.at(0),this);
213
- connectionInterfaces.insert(id,device.networkInterface());
215
+ if (properties.contains(QStringLiteral("State"))) {
217
+ if (properties.value("State").toUInt() == NM_ACTIVE_CONNECTION_STATE_ACTIVATED) {
218
+ QStringList devices = activeConnection->devices();
219
+ if (!devices.isEmpty()) {
220
+ QNetworkManagerInterfaceDevice device(devices.at(0),this);
221
+ connectionInterfaces.insert(id,device.networkInterface());
224
- ptr->state |= QNetworkConfiguration::Active;
225
- ptr->mutex.unlock();
226
+ ptr->state |= QNetworkConfiguration::Active;
227
+ ptr->mutex.unlock();
230
- emit configurationChanged(ptr);
233
- connectionInterfaces.remove(id);
234
- ptr->mutex.unlock();
236
+ emit configurationChanged(ptr);
239
+ connectionInterfaces.remove(id);
240
+ ptr->mutex.unlock();
245
@@ -403,9 +412,6 @@ void QNetworkManagerEngine::deviceAdded(const QDBusObjectPath &path)
246
connect(wirelessDevice,SIGNAL(scanDone()),this,SLOT(scanFinished()));
247
wirelessDevice->setConnections();
249
- foreach (const QDBusObjectPath &apPath, wirelessDevice->getAccessPoints())
250
- newAccessPoint(apPath.path());
252
wirelessDevices.insert(path.path(), wirelessDevice);
255
@@ -518,14 +524,9 @@ void QNetworkManagerEngine::newConnection(const QDBusObjectPath &path,
256
parseConnection(settingsPath, connection->getSettings());
258
// Check if connection is active.
259
- QHashIterator<QString, QNetworkManagerConnectionActive*> i(activeConnectionsList);
260
- while (i.hasNext()) {
262
- if (i.value()->connection().path() == settingsPath) {
263
- cpPriv->state |= QNetworkConfiguration::Active;
267
+ if (isConnectionActive(settingsPath))
268
+ cpPriv->state |= QNetworkConfiguration::Active;
270
if (deviceType == DEVICE_TYPE_ETHERNET) {
271
QHashIterator<QString, QNetworkManagerInterfaceDevice*> i(interfaceDevices);
272
while (i.hasNext()) {
273
@@ -539,12 +540,36 @@ void QNetworkManagerEngine::newConnection(const QDBusObjectPath &path,
278
QNetworkConfigurationPrivatePointer ptr(cpPriv);
279
accessPointConfigurations.insert(ptr->id, ptr);
281
emit configurationAdded(ptr);
284
+bool QNetworkManagerEngine::isConnectionActive(const QString &settingsPath)
286
+ QHashIterator<QString, QNetworkManagerConnectionActive*> i(activeConnectionsList);
287
+ while (i.hasNext()) {
289
+ if (i.value()->connection().path() == settingsPath) {
290
+ if (i.value()->state() == NM_ACTIVE_CONNECTION_STATE_ACTIVATING
291
+ || i.value()->state() == NM_ACTIVE_CONNECTION_STATE_ACTIVATED) {
299
+ QNetworkManagerSettingsConnection *settingsConnection = connectionFromId(settingsPath);
300
+ if (settingsConnection->getType() == DEVICE_TYPE_MODEM) {
301
+ return isActiveContext(settingsConnection->connectionInterface()->path());
307
void QNetworkManagerEngine::removeConnection(const QString &path)
309
QMutexLocker locker(&mutex);
310
@@ -652,7 +677,6 @@ void QNetworkManagerEngine::activationFinished(QDBusPendingCallWatcher *watcher)
311
void QNetworkManagerEngine::newAccessPoint(const QString &path)
313
QMutexLocker locker(&mutex);
315
QNetworkManagerInterfaceAccessPoint *accessPoint =
316
new QNetworkManagerInterfaceAccessPoint(path,this);
318
@@ -683,6 +707,9 @@ void QNetworkManagerEngine::newAccessPoint(const QString &path)
320
QNetworkConfiguration::StateFlags flag = QNetworkConfiguration::Defined;
321
ptr->state = (flag | QNetworkConfiguration::Discovered);
323
+ if (isConnectionActive(settingsPath))
324
+ ptr->state = (flag | QNetworkConfiguration::Active);
328
@@ -762,7 +789,6 @@ QNetworkConfigurationPrivate *QNetworkManagerEngine::parseConnection(const QStri
329
QMutexLocker locker(&mutex);
330
QNetworkConfigurationPrivate *cpPriv = new QNetworkConfigurationPrivate;
331
cpPriv->name = map.value("connection").value("id").toString();
333
cpPriv->isValid = true;
334
cpPriv->id = settingsPath;
335
cpPriv->type = QNetworkConfiguration::InternetAccessPoint;
336
@@ -811,18 +837,46 @@ QNetworkConfigurationPrivate *QNetworkManagerEngine::parseConnection(const QStri
338
} else if (connectionType == QLatin1String("gsm")) {
340
- const QString contextPath = map.value("connection").value("id").toString();
341
- cpPriv->name = contextName(contextPath);
342
- cpPriv->bearerType = currentBearerType(contextPath);
344
- if (map.value("connection").contains("timestamp")) {
345
- cpPriv->state |= QNetworkConfiguration::Discovered;
346
+ const QString connectionPath = map.value("connection").value("id").toString();
347
+ cpPriv->name = contextName(connectionPath);
348
+ cpPriv->bearerType = currentBearerType(connectionPath);
350
+ if (ofonoManager && ofonoManager->isValid()) {
351
+ const QString contextPart = connectionPath.section('/', -1);
352
+ QHashIterator<QString, QOfonoDataConnectionManagerInterface*> i(ofonoContextManagers);
353
+ while (i.hasNext()) {
355
+ const QString path = i.key() +"/"+contextPart;
356
+ if (isActiveContext(path)) {
357
+ cpPriv->state |= QNetworkConfiguration::Active;
367
+bool QNetworkManagerEngine::isActiveContext(const QString &contextPath)
369
+ if (ofonoManager && ofonoManager->isValid()) {
370
+ const QString contextPart = contextPath.section('/', -1);
371
+ QHashIterator<QString, QOfonoDataConnectionManagerInterface*> i(ofonoContextManagers);
372
+ while (i.hasNext()) {
374
+ PathPropertiesList list = i.value()->contextsWithProperties();
375
+ for (int i = 0; i < list.size(); ++i) {
376
+ if (list.at(i).path.path().contains(contextPart)) {
377
+ return list.at(i).properties.value(QStringLiteral("Active")).toBool();
386
QNetworkManagerSettingsConnection *QNetworkManagerEngine::connectionFromId(const QString &id) const
388
for (int i = 0; i < connections.count(); ++i) {
389
@@ -967,53 +1021,111 @@ QNetworkConfigurationPrivatePointer QNetworkManagerEngine::defaultConfiguration(
391
QNetworkConfiguration::BearerType QNetworkManagerEngine::currentBearerType(const QString &id)
393
- if (ofonoManager->isValid()) {
394
- QString contextPart = id.section('/', -1);
396
- QHashIterator<QString, QOfonoDataConnectionManagerInterface*> i(ofonoContextManagers);
397
- while (i.hasNext()) {
399
- QString contextPath = i.key() +"/"+contextPart;
400
- if (i.value()->contexts().contains(contextPath)) {
402
- QString bearer = i.value()->bearer();
403
- if (bearer == QStringLiteral("gsm")) {
404
- return QNetworkConfiguration::Bearer2G;
405
- } else if (bearer == QStringLiteral("edge")) {
406
- return QNetworkConfiguration::Bearer2G;
407
- } else if (bearer == QStringLiteral("umts")) {
408
- return QNetworkConfiguration::BearerWCDMA;
409
- } else if (bearer == QStringLiteral("hspa")
410
- || bearer == QStringLiteral("hsdpa")
411
- || bearer == QStringLiteral("hsupa")) {
412
- return QNetworkConfiguration::BearerHSPA;
413
- } else if (bearer == QStringLiteral("lte")) {
414
- return QNetworkConfiguration::BearerLTE;
416
+ QString contextPart = id.section('/', -1);
417
+ QHashIterator<QString, QOfonoDataConnectionManagerInterface*> i(ofonoContextManagers);
418
+ while (i.hasNext()) {
420
+ QString contextPath = i.key() +"/"+contextPart;
422
+ if (i.value()->contexts().contains(contextPath)) {
424
+ QString bearer = i.value()->bearer();
426
+ if (bearer == QStringLiteral("gsm")) {
427
+ return QNetworkConfiguration::Bearer2G;
428
+ } else if (bearer == QStringLiteral("edge")) {
429
+ return QNetworkConfiguration::Bearer2G;
430
+ } else if (bearer == QStringLiteral("umts")) {
431
+ return QNetworkConfiguration::BearerWCDMA;
432
+ } else if (bearer == QStringLiteral("hspa")
433
+ || bearer == QStringLiteral("hsdpa")
434
+ || bearer == QStringLiteral("hsupa")) {
435
+ return QNetworkConfiguration::BearerHSPA;
436
+ } else if (bearer == QStringLiteral("lte")) {
437
+ return QNetworkConfiguration::BearerLTE;
442
return QNetworkConfiguration::BearerUnknown;
445
QString QNetworkManagerEngine::contextName(const QString &path)
447
- if (ofonoManager->isValid()) {
448
- QString contextPart = path.section('/', -1);
449
- QHashIterator<QString, QOfonoDataConnectionManagerInterface*> i(ofonoContextManagers);
450
- while (i.hasNext()) {
452
- Q_FOREACH (const QString &oContext, i.value()->contexts()) {
453
- if (oContext.contains(contextPart)) {
454
- QOfonoConnectionContextInterface contextInterface(oContext,this);
455
- return contextInterface.name();
457
+ QString contextPart = path.section('/', -1);
458
+ QHashIterator<QString, QOfonoDataConnectionManagerInterface*> i(ofonoContextManagers);
459
+ while (i.hasNext()) {
461
+ PathPropertiesList list = i.value()->contextsWithProperties();
462
+ for (int i = 0; i < list.size(); ++i) {
463
+ if (list.at(i).path.path().contains(contextPart)) {
464
+ return list.at(i).properties.value(QStringLiteral("Name")).toString();
471
+void QNetworkManagerEngine::nmRegistered(const QString &)
473
+ if (ofonoManager) {
474
+ delete ofonoManager;
475
+ ofonoManager = NULL;
477
+ managerInterface = new QNetworkManagerInterface(this);
478
+ systemSettings = new QNetworkManagerSettings(NM_DBUS_SERVICE, this);
480
+ connect(managerInterface, SIGNAL(deviceAdded(QDBusObjectPath)),
481
+ this, SLOT(deviceAdded(QDBusObjectPath)));
482
+ connect(managerInterface, SIGNAL(deviceRemoved(QDBusObjectPath)),
483
+ this, SLOT(deviceRemoved(QDBusObjectPath)));
484
+ connect(managerInterface, SIGNAL(activationFinished(QDBusPendingCallWatcher*)),
485
+ this, SLOT(activationFinished(QDBusPendingCallWatcher*)));
486
+ connect(managerInterface, SIGNAL(propertiesChanged(QMap<QString,QVariant>)),
487
+ this, SLOT(interfacePropertiesChanged(QMap<QString,QVariant>)));
488
+ managerInterface->setConnections();
490
+ connect(systemSettings, SIGNAL(newConnection(QDBusObjectPath)),
491
+ this, SLOT(newConnection(QDBusObjectPath)));
492
+ systemSettings->setConnections();
493
+ nmAvailable = true;
495
+ setupConfigurations();
498
+void QNetworkManagerEngine::nmUnRegistered(const QString &)
500
+ if (systemSettings) {
501
+ delete systemSettings;
502
+ systemSettings = NULL;
504
+ if (managerInterface) {
505
+ delete managerInterface;
506
+ managerInterface = NULL;
510
+void QNetworkManagerEngine::ofonoRegistered(const QString &)
512
+ if (ofonoManager) {
513
+ delete ofonoManager;
514
+ ofonoManager = NULL;
516
+ ofonoManager = new QOfonoManagerInterface(this);
517
+ if (ofonoManager && ofonoManager->isValid()) {
518
+ Q_FOREACH (const QString &modem, ofonoManager->getModems()) {
519
+ QOfonoDataConnectionManagerInterface *ofonoContextManager
520
+ = new QOfonoDataConnectionManagerInterface(modem,this);
521
+ ofonoContextManagers.insert(modem, ofonoContextManager);
526
+void QNetworkManagerEngine::ofonoUnRegistered(const QString &)
528
+ ofonoContextManagers.clear();
534
diff --git a/src/plugins/bearer/networkmanager/qnetworkmanagerengine.h b/src/plugins/bearer/networkmanager/qnetworkmanagerengine.h
535
index 671ed80..da6af14 100644
536
--- a/src/plugins/bearer/networkmanager/qnetworkmanagerengine.h
537
+++ b/src/plugins/bearer/networkmanager/qnetworkmanagerengine.h
538
@@ -109,6 +109,12 @@ private Q_SLOTS:
540
void wiredCarrierChanged(bool);
542
+ void nmRegistered(const QString &serviceName = QString());
543
+ void nmUnRegistered(const QString &serviceName = QString());
545
+ void ofonoRegistered(const QString &serviceName = QString());
546
+ void ofonoUnRegistered(const QString &serviceName = QString());
549
QNetworkConfigurationPrivate *parseConnection(const QString &settingsPath,
550
const QNmSettingsMap &map);
551
@@ -132,6 +138,13 @@ private:
552
QNetworkConfiguration::BearerType currentBearerType(const QString &id);
553
QString contextName(const QString &path);
555
+ bool isConnectionActive(const QString &settingsPath);
556
+ QDBusServiceWatcher *ofonoWatcher;
557
+ QDBusServiceWatcher *nmWatcher;
559
+ bool isActiveContext(const QString &contextPath);
561
+ void setupConfigurations();
565
diff --git a/src/plugins/bearer/networkmanager/qnetworkmanagerservice.cpp b/src/plugins/bearer/networkmanager/qnetworkmanagerservice.cpp
566
index dc3b71e..fad94f0 100644
567
--- a/src/plugins/bearer/networkmanager/qnetworkmanagerservice.cpp
568
+++ b/src/plugins/bearer/networkmanager/qnetworkmanagerservice.cpp
569
@@ -688,6 +688,15 @@ QNetworkManagerInterfaceDeviceWireless::QNetworkManagerInterfaceDeviceWireless(c
570
QLatin1String(NM_DBUS_INTERFACE_DEVICE_WIRELESS),
571
QLatin1String("PropertiesChanged"),
572
this,SLOT(propertiesSwap(QMap<QString,QVariant>)));
574
+ QDBusPendingReply<QList<QDBusObjectPath> > reply
575
+ = d->connectionInterface->asyncCall(QLatin1String("GetAccessPoints"));
577
+ QDBusPendingCallWatcher *callWatcher = new QDBusPendingCallWatcher(reply);
578
+ connect(callWatcher, SIGNAL(finished(QDBusPendingCallWatcher*)),
579
+ this, SLOT(accessPointsFinished(QDBusPendingCallWatcher*)));
585
@@ -749,6 +758,19 @@ bool QNetworkManagerInterfaceDeviceWireless::setConnections()
589
+void QNetworkManagerInterfaceDeviceWireless::accessPointsFinished(QDBusPendingCallWatcher *watcher)
591
+ QDBusPendingReply<QList<QDBusObjectPath> > reply(*watcher);
592
+ watcher->deleteLater();
593
+ if (!reply.isError()) {
594
+ accessPointsList = reply.value();
597
+ for (int i = 0; i < accessPointsList.size(); i++) {
598
+ Q_EMIT accessPointAdded(accessPointsList.at(i).path());
602
QDBusInterface *QNetworkManagerInterfaceDeviceWireless::connectionInterface() const
604
return d->connectionInterface;
605
diff --git a/src/plugins/bearer/networkmanager/qnetworkmanagerservice.h b/src/plugins/bearer/networkmanager/qnetworkmanagerservice.h
606
index da909c4..e645159 100644
607
--- a/src/plugins/bearer/networkmanager/qnetworkmanagerservice.h
608
+++ b/src/plugins/bearer/networkmanager/qnetworkmanagerservice.h
609
@@ -369,6 +369,8 @@ private Q_SLOTS:
610
void slotAccessPointAdded(QDBusObjectPath);
611
void slotAccessPointRemoved(QDBusObjectPath);
613
+ void accessPointsFinished(QDBusPendingCallWatcher *watcher);
616
QNetworkManagerInterfaceDeviceWirelessPrivate *d;
617
QVariantMap propertyMap;