Ticket #46536: QtBearer-networkmanager-make-sure-to-set-flag-Active.patch
File QtBearer-networkmanager-make-sure-to-set-flag-Active.patch, 22.6 KB (added by RJVB (René Bertin), 10 years ago) |
---|
-
qtbase/src/plugins/bearer/linux_common/qofonoservice_linux.cpp
From dedb8c1c928edbbb4408a0c5889353b142b20d1c Mon Sep 17 00:00:00 2001 From: Lorn Potter <lorn.potter@gmail.com> Date: Thu, 13 Nov 2014 13:06:49 +1000 Subject: [PATCH] QtBearer networkmanager make sure to set flag Active Also, no need to create objects to get properties, when the properties can be had for free. Make plugin more robust to network-manager or ofono crashes Change-Id: Ibadb46bd51aa27f130f8d245e8c50aa7bff5f9c8 --- .../bearer/linux_common/qofonoservice_linux.cpp | 12 + .../bearer/linux_common/qofonoservice_linux_p.h | 2 + src/plugins/bearer/networkmanager/main.cpp | 5 +- .../networkmanager/qnetworkmanagerengine.cpp | 310 ++++++++++++++------- .../bearer/networkmanager/qnetworkmanagerengine.h | 13 + .../networkmanager/qnetworkmanagerservice.cpp | 22 ++ .../bearer/networkmanager/qnetworkmanagerservice.h | 2 + 7 files changed, 263 insertions(+), 103 deletions(-)
269 269 return contextList; 270 270 } 271 271 272 PathPropertiesList QOfonoDataConnectionManagerInterface::contextsWithProperties() 273 { 274 if (contextListProperties.isEmpty()) { 275 QDBusPendingReply<PathPropertiesList > reply = call(QLatin1String("GetContexts")); 276 reply.waitForFinished(); 277 if (!reply.isError()) { 278 contextListProperties = reply.value(); 279 } 280 } 281 return contextListProperties; 282 } 283 272 284 bool QOfonoDataConnectionManagerInterface::roamingAllowed() 273 285 { 274 286 QVariant var = getProperty(QStringLiteral("RoamingAllowed")); -
qtbase/src/plugins/bearer/linux_common/qofonoservice_linux_p.h
153 153 ~QOfonoDataConnectionManagerInterface(); 154 154 155 155 QStringList contexts(); 156 PathPropertiesList contextsWithProperties(); 156 157 bool roamingAllowed(); 157 158 QVariant getProperty(const QString &); 158 159 QString bearer(); … … 162 163 QVariantMap getProperties(); 163 164 QVariantMap propertiesMap; 164 165 QStringList contextList; 166 PathPropertiesList contextListProperties; 165 167 private slots: 166 168 void propertyChanged(const QString &, const QDBusVariant &value); 167 169 }; -
qtbase/src/plugins/bearer/networkmanager/main.cpp
66 66 { 67 67 if (key == QLatin1String("networkmanager")) { 68 68 QNetworkManagerEngine *engine = new QNetworkManagerEngine; 69 if (engine->networkManagerAvailable()) 70 return engine; 71 else 72 delete engine; 69 return engine; 73 70 } 74 71 75 72 return 0; -
qtbase/src/plugins/bearer/networkmanager/qnetworkmanagerengine.cpp
56 56 57 57 QNetworkManagerEngine::QNetworkManagerEngine(QObject *parent) 58 58 : QBearerEngineImpl(parent), 59 managerInterface(new QNetworkManagerInterface(this)), 60 systemSettings(new QNetworkManagerSettings(NM_DBUS_SERVICE, this)), 61 ofonoManager(new QOfonoManagerInterface(this)) 59 managerInterface(NULL), 60 systemSettings(NULL), 61 ofonoManager(NULL), 62 nmAvailable(false) 62 63 { 63 64 if (!managerInterface->isValid())65 return;66 67 64 qDBusRegisterMetaType<QNmSettingsMap>(); 68 65 69 connect(managerInterface, SIGNAL(deviceAdded(QDBusObjectPath)), 70 this, SLOT(deviceAdded(QDBusObjectPath))); 71 connect(managerInterface, SIGNAL(deviceRemoved(QDBusObjectPath)), 72 this, SLOT(deviceRemoved(QDBusObjectPath))); 73 connect(managerInterface, SIGNAL(activationFinished(QDBusPendingCallWatcher*)), 74 this, SLOT(activationFinished(QDBusPendingCallWatcher*))); 75 connect(managerInterface, SIGNAL(propertiesChanged(QMap<QString,QVariant>)), 76 this, SLOT(interfacePropertiesChanged(QMap<QString,QVariant>))); 77 managerInterface->setConnections(); 66 nmWatcher = new QDBusServiceWatcher(NM_DBUS_SERVICE,QDBusConnection::systemBus(), 67 QDBusServiceWatcher::WatchForRegistration | 68 QDBusServiceWatcher::WatchForUnregistration, this); 69 connect(nmWatcher, SIGNAL(serviceRegistered(QString)), 70 this, SLOT(nmRegistered(QString))); 71 connect(nmWatcher, SIGNAL(serviceUnregistered(QString)), 72 this, SLOT(nmUnRegistered(QString))); 73 74 ofonoWatcher = new QDBusServiceWatcher("org.ofono",QDBusConnection::systemBus(), 75 QDBusServiceWatcher::WatchForRegistration | 76 QDBusServiceWatcher::WatchForUnregistration, this); 77 connect(ofonoWatcher, SIGNAL(serviceRegistered(QString)), 78 this, SLOT(ofonoRegistered(QString))); 79 connect(ofonoWatcher, SIGNAL(serviceUnregistered(QString)), 80 this, SLOT(ofonoUnRegistered(QString))); 78 81 79 connect(systemSettings, SIGNAL(newConnection(QDBusObjectPath)), 80 this, SLOT(newConnection(QDBusObjectPath))); 81 systemSettings->setConnections(); 82 if (QDBusConnection::systemBus().interface()->isServiceRegistered("org.ofono")) 83 ofonoRegistered(); 84 85 if (QDBusConnection::systemBus().interface()->isServiceRegistered(NM_DBUS_SERVICE)) 86 nmRegistered(); 82 87 } 83 88 84 89 QNetworkManagerEngine::~QNetworkManagerEngine() … … 105 110 106 111 void QNetworkManagerEngine::initialize() 107 112 { 108 QMutexLocker locker(&mutex); 113 if (nmAvailable) 114 setupConfigurations(); 115 } 109 116 110 if (ofonoManager->isValid()) { 111 Q_FOREACH (const QString &modem, ofonoManager->getModems()) { 112 QOfonoDataConnectionManagerInterface *ofonoContextManager 113 = new QOfonoDataConnectionManagerInterface(modem,this); 114 ofonoContextManagers.insert(modem, ofonoContextManager); 115 } 116 } 117 void QNetworkManagerEngine::setupConfigurations() 118 { 119 QMutexLocker locker(&mutex); 117 120 // Get active connections. 118 121 foreach (const QDBusObjectPath &acPath, managerInterface->activeConnections()) { 119 122 … … 151 154 152 155 bool QNetworkManagerEngine::networkManagerAvailable() const 153 156 { 154 return managerInterface->isValid();157 return nmAvailable; 155 158 } 156 159 157 160 QString QNetworkManagerEngine::getInterfaceFromId(const QString &settingsPath) … … 180 183 const QString settingsPath = connection->connectionInterface()->path(); 181 184 QString specificPath = configuredAccessPoints.key(settingsPath); 182 185 186 if (isConnectionActive(settingsPath)) 187 return; 188 183 189 QHashIterator<QString, QNetworkManagerInterfaceDevice*> i(interfaceDevices); 184 190 while (i.hasNext()) { 185 191 i.next(); … … 229 235 230 236 void QNetworkManagerEngine::requestUpdate() 231 237 { 232 if (managerInterface ->wirelessEnabled()) {238 if (managerInterface && managerInterface->wirelessEnabled()) { 233 239 QHashIterator<QString, QNetworkManagerInterfaceDeviceWireless *> i(wirelessDevices); 234 240 while (i.hasNext()) { 235 241 i.next(); … … 282 288 if (ptr) { 283 289 ptr->mutex.lock(); 284 290 if (activeConnection->state() == NM_ACTIVE_CONNECTION_STATE_ACTIVATED && 285 ptr->state != QNetworkConfiguration::Active) { 286 ptr->state = QNetworkConfiguration::Active; 291 (ptr->state & QNetworkConfiguration::Active) != QNetworkConfiguration::Active) { 292 293 ptr->state |= QNetworkConfiguration::Active; 287 294 288 295 if (activeConnectionsList.value(id) && activeConnectionsList.value(id)->defaultRoute() 289 296 && managerInterface->state() < QNetworkManagerInterface::NM_STATE_CONNECTED_GLOBAL) { … … 339 346 340 347 QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.value(id); 341 348 if (ptr) { 342 ptr->mutex.lock(); 343 if (properties.value("State").toUInt() == NM_ACTIVE_CONNECTION_STATE_ACTIVATED) { 344 QStringList devices = activeConnection->devices(); 345 if (!devices.isEmpty()) { 346 QNetworkManagerInterfaceDevice device(devices.at(0),this); 347 connectionInterfaces.insert(id,device.networkInterface()); 348 } 349 350 ptr->state |= QNetworkConfiguration::Active; 351 ptr->mutex.unlock(); 352 353 locker.unlock(); 354 emit configurationChanged(ptr); 355 locker.relock(); 356 } else { 357 connectionInterfaces.remove(id); 358 ptr->mutex.unlock(); 349 if (properties.contains(QStringLiteral("State"))) { 350 ptr->mutex.lock(); 351 if (properties.value("State").toUInt() == NM_ACTIVE_CONNECTION_STATE_ACTIVATED) { 352 QStringList devices = activeConnection->devices(); 353 if (!devices.isEmpty()) { 354 QNetworkManagerInterfaceDevice device(devices.at(0),this); 355 connectionInterfaces.insert(id,device.networkInterface()); 356 } 357 358 ptr->state |= QNetworkConfiguration::Active; 359 ptr->mutex.unlock(); 360 361 locker.unlock(); 362 emit configurationChanged(ptr); 363 locker.relock(); 364 } else { 365 connectionInterfaces.remove(id); 366 ptr->mutex.unlock(); 367 } 359 368 } 360 369 } 361 370 } … … 403 412 connect(wirelessDevice,SIGNAL(scanDone()),this,SLOT(scanFinished())); 404 413 wirelessDevice->setConnections(); 405 414 406 foreach (const QDBusObjectPath &apPath, wirelessDevice->getAccessPoints())407 newAccessPoint(apPath.path());408 409 415 wirelessDevices.insert(path.path(), wirelessDevice); 410 416 } 411 417 … … 518 524 parseConnection(settingsPath, connection->getSettings()); 519 525 520 526 // Check if connection is active. 521 QHashIterator<QString, QNetworkManagerConnectionActive*> i(activeConnectionsList); 522 while (i.hasNext()) { 523 i.next(); 524 if (i.value()->connection().path() == settingsPath) { 525 cpPriv->state |= QNetworkConfiguration::Active; 526 break; 527 } 528 } 527 if (isConnectionActive(settingsPath)) 528 cpPriv->state |= QNetworkConfiguration::Active; 529 529 530 if (deviceType == DEVICE_TYPE_ETHERNET) { 530 531 QHashIterator<QString, QNetworkManagerInterfaceDevice*> i(interfaceDevices); 531 532 while (i.hasNext()) { … … 539 540 } 540 541 } 541 542 } 543 542 544 QNetworkConfigurationPrivatePointer ptr(cpPriv); 543 545 accessPointConfigurations.insert(ptr->id, ptr); 544 546 locker.unlock(); 545 547 emit configurationAdded(ptr); 546 548 } 547 549 550 bool QNetworkManagerEngine::isConnectionActive(const QString &settingsPath) 551 { 552 QHashIterator<QString, QNetworkManagerConnectionActive*> i(activeConnectionsList); 553 while (i.hasNext()) { 554 i.next(); 555 if (i.value()->connection().path() == settingsPath) { 556 if (i.value()->state() == NM_ACTIVE_CONNECTION_STATE_ACTIVATING 557 || i.value()->state() == NM_ACTIVE_CONNECTION_STATE_ACTIVATED) { 558 return true; 559 } else { 560 break; 561 } 562 } 563 } 564 565 QNetworkManagerSettingsConnection *settingsConnection = connectionFromId(settingsPath); 566 if (settingsConnection->getType() == DEVICE_TYPE_MODEM) { 567 return isActiveContext(settingsConnection->connectionInterface()->path()); 568 } 569 570 return false; 571 } 572 548 573 void QNetworkManagerEngine::removeConnection(const QString &path) 549 574 { 550 575 QMutexLocker locker(&mutex); … … 652 677 void QNetworkManagerEngine::newAccessPoint(const QString &path) 653 678 { 654 679 QMutexLocker locker(&mutex); 655 656 680 QNetworkManagerInterfaceAccessPoint *accessPoint = 657 681 new QNetworkManagerInterfaceAccessPoint(path,this); 658 682 … … 683 707 ptr->mutex.lock(); 684 708 QNetworkConfiguration::StateFlags flag = QNetworkConfiguration::Defined; 685 709 ptr->state = (flag | QNetworkConfiguration::Discovered); 710 711 if (isConnectionActive(settingsPath)) 712 ptr->state = (flag | QNetworkConfiguration::Active); 686 713 ptr->mutex.unlock(); 687 714 688 715 locker.unlock(); … … 762 789 QMutexLocker locker(&mutex); 763 790 QNetworkConfigurationPrivate *cpPriv = new QNetworkConfigurationPrivate; 764 791 cpPriv->name = map.value("connection").value("id").toString(); 765 766 792 cpPriv->isValid = true; 767 793 cpPriv->id = settingsPath; 768 794 cpPriv->type = QNetworkConfiguration::InternetAccessPoint; … … 811 837 } 812 838 } else if (connectionType == QLatin1String("gsm")) { 813 839 814 const QString contextPath = map.value("connection").value("id").toString(); 815 cpPriv->name = contextName(contextPath); 816 cpPriv->bearerType = currentBearerType(contextPath); 817 818 if (map.value("connection").contains("timestamp")) { 819 cpPriv->state |= QNetworkConfiguration::Discovered; 840 const QString connectionPath = map.value("connection").value("id").toString(); 841 cpPriv->name = contextName(connectionPath); 842 cpPriv->bearerType = currentBearerType(connectionPath); 843 844 if (ofonoManager && ofonoManager->isValid()) { 845 const QString contextPart = connectionPath.section('/', -1); 846 QHashIterator<QString, QOfonoDataConnectionManagerInterface*> i(ofonoContextManagers); 847 while (i.hasNext()) { 848 i.next(); 849 const QString path = i.key() +"/"+contextPart; 850 if (isActiveContext(path)) { 851 cpPriv->state |= QNetworkConfiguration::Active; 852 break; 853 } 854 } 820 855 } 821 856 } 822 857 823 858 return cpPriv; 824 859 } 825 860 861 bool QNetworkManagerEngine::isActiveContext(const QString &contextPath) 862 { 863 if (ofonoManager && ofonoManager->isValid()) { 864 const QString contextPart = contextPath.section('/', -1); 865 QHashIterator<QString, QOfonoDataConnectionManagerInterface*> i(ofonoContextManagers); 866 while (i.hasNext()) { 867 i.next(); 868 PathPropertiesList list = i.value()->contextsWithProperties(); 869 for (int i = 0; i < list.size(); ++i) { 870 if (list.at(i).path.path().contains(contextPart)) { 871 return list.at(i).properties.value(QStringLiteral("Active")).toBool(); 872 873 } 874 } 875 } 876 } 877 return false; 878 } 879 826 880 QNetworkManagerSettingsConnection *QNetworkManagerEngine::connectionFromId(const QString &id) const 827 881 { 828 882 for (int i = 0; i < connections.count(); ++i) { … … 967 1021 968 1022 QNetworkConfiguration::BearerType QNetworkManagerEngine::currentBearerType(const QString &id) 969 1023 { 970 if (ofonoManager->isValid()) { 971 QString contextPart = id.section('/', -1); 1024 QString contextPart = id.section('/', -1); 1025 QHashIterator<QString, QOfonoDataConnectionManagerInterface*> i(ofonoContextManagers); 1026 while (i.hasNext()) { 1027 i.next(); 1028 QString contextPath = i.key() +"/"+contextPart; 972 1029 973 QHashIterator<QString, QOfonoDataConnectionManagerInterface*> i(ofonoContextManagers); 974 while (i.hasNext()) { 975 i.next(); 976 QString contextPath = i.key() +"/"+contextPart; 977 if (i.value()->contexts().contains(contextPath)) { 1030 if (i.value()->contexts().contains(contextPath)) { 978 1031 979 980 if (bearer == QStringLiteral("gsm")) { 981 return QNetworkConfiguration::Bearer2G;982 } else if (bearer == QStringLiteral("edge")) {983 return QNetworkConfiguration::Bearer2G;984 } else if (bearer == QStringLiteral("umts")) {985 return QNetworkConfiguration::BearerWCDMA;986 } else if (bearer == QStringLiteral("hspa")987 || bearer == QStringLiteral("hsdpa")988 || bearer == QStringLiteral("hsupa")) {989 return QNetworkConfiguration::BearerHSPA;990 } else if (bearer == QStringLiteral("lte")) {991 return QNetworkConfiguration::BearerLTE;992 }1032 QString bearer = i.value()->bearer(); 1033 1034 if (bearer == QStringLiteral("gsm")) { 1035 return QNetworkConfiguration::Bearer2G; 1036 } else if (bearer == QStringLiteral("edge")) { 1037 return QNetworkConfiguration::Bearer2G; 1038 } else if (bearer == QStringLiteral("umts")) { 1039 return QNetworkConfiguration::BearerWCDMA; 1040 } else if (bearer == QStringLiteral("hspa") 1041 || bearer == QStringLiteral("hsdpa") 1042 || bearer == QStringLiteral("hsupa")) { 1043 return QNetworkConfiguration::BearerHSPA; 1044 } else if (bearer == QStringLiteral("lte")) { 1045 return QNetworkConfiguration::BearerLTE; 993 1046 } 994 1047 } 995 1048 } 1049 996 1050 return QNetworkConfiguration::BearerUnknown; 997 1051 } 998 1052 999 1053 QString QNetworkManagerEngine::contextName(const QString &path) 1000 1054 { 1001 if (ofonoManager->isValid()) { 1002 QString contextPart = path.section('/', -1); 1003 QHashIterator<QString, QOfonoDataConnectionManagerInterface*> i(ofonoContextManagers); 1004 while (i.hasNext()) { 1005 i.next(); 1006 Q_FOREACH (const QString &oContext, i.value()->contexts()) { 1007 if (oContext.contains(contextPart)) { 1008 QOfonoConnectionContextInterface contextInterface(oContext,this); 1009 return contextInterface.name(); 1010 } 1055 QString contextPart = path.section('/', -1); 1056 QHashIterator<QString, QOfonoDataConnectionManagerInterface*> i(ofonoContextManagers); 1057 while (i.hasNext()) { 1058 i.next(); 1059 PathPropertiesList list = i.value()->contextsWithProperties(); 1060 for (int i = 0; i < list.size(); ++i) { 1061 if (list.at(i).path.path().contains(contextPart)) { 1062 return list.at(i).properties.value(QStringLiteral("Name")).toString(); 1011 1063 } 1012 1064 } 1013 1065 } 1014 1066 return path; 1015 1067 } 1016 1068 1069 void QNetworkManagerEngine::nmRegistered(const QString &) 1070 { 1071 if (ofonoManager) { 1072 delete ofonoManager; 1073 ofonoManager = NULL; 1074 } 1075 managerInterface = new QNetworkManagerInterface(this); 1076 systemSettings = new QNetworkManagerSettings(NM_DBUS_SERVICE, this); 1077 1078 connect(managerInterface, SIGNAL(deviceAdded(QDBusObjectPath)), 1079 this, SLOT(deviceAdded(QDBusObjectPath))); 1080 connect(managerInterface, SIGNAL(deviceRemoved(QDBusObjectPath)), 1081 this, SLOT(deviceRemoved(QDBusObjectPath))); 1082 connect(managerInterface, SIGNAL(activationFinished(QDBusPendingCallWatcher*)), 1083 this, SLOT(activationFinished(QDBusPendingCallWatcher*))); 1084 connect(managerInterface, SIGNAL(propertiesChanged(QMap<QString,QVariant>)), 1085 this, SLOT(interfacePropertiesChanged(QMap<QString,QVariant>))); 1086 managerInterface->setConnections(); 1087 1088 connect(systemSettings, SIGNAL(newConnection(QDBusObjectPath)), 1089 this, SLOT(newConnection(QDBusObjectPath))); 1090 systemSettings->setConnections(); 1091 nmAvailable = true; 1092 1093 setupConfigurations(); 1094 } 1095 1096 void QNetworkManagerEngine::nmUnRegistered(const QString &) 1097 { 1098 if (systemSettings) { 1099 delete systemSettings; 1100 systemSettings = NULL; 1101 } 1102 if (managerInterface) { 1103 delete managerInterface; 1104 managerInterface = NULL; 1105 } 1106 } 1107 1108 void QNetworkManagerEngine::ofonoRegistered(const QString &) 1109 { 1110 if (ofonoManager) { 1111 delete ofonoManager; 1112 ofonoManager = NULL; 1113 } 1114 ofonoManager = new QOfonoManagerInterface(this); 1115 if (ofonoManager && ofonoManager->isValid()) { 1116 Q_FOREACH (const QString &modem, ofonoManager->getModems()) { 1117 QOfonoDataConnectionManagerInterface *ofonoContextManager 1118 = new QOfonoDataConnectionManagerInterface(modem,this); 1119 ofonoContextManagers.insert(modem, ofonoContextManager); 1120 } 1121 } 1122 } 1123 1124 void QNetworkManagerEngine::ofonoUnRegistered(const QString &) 1125 { 1126 ofonoContextManagers.clear(); 1127 } 1128 1017 1129 QT_END_NAMESPACE 1018 1130 1019 1131 #endif // QT_NO_DBUS -
qtbase/src/plugins/bearer/networkmanager/qnetworkmanagerengine.h
109 109 110 110 void wiredCarrierChanged(bool); 111 111 112 void nmRegistered(const QString &serviceName = QString()); 113 void nmUnRegistered(const QString &serviceName = QString()); 114 115 void ofonoRegistered(const QString &serviceName = QString()); 116 void ofonoUnRegistered(const QString &serviceName = QString()); 117 112 118 private: 113 119 QNetworkConfigurationPrivate *parseConnection(const QString &settingsPath, 114 120 const QNmSettingsMap &map); … … 132 138 QNetworkConfiguration::BearerType currentBearerType(const QString &id); 133 139 QString contextName(const QString &path); 134 140 141 bool isConnectionActive(const QString &settingsPath); 142 QDBusServiceWatcher *ofonoWatcher; 143 QDBusServiceWatcher *nmWatcher; 144 145 bool isActiveContext(const QString &contextPath); 146 bool nmAvailable; 147 void setupConfigurations(); 135 148 }; 136 149 137 150 QT_END_NAMESPACE -
qtbase/src/plugins/bearer/networkmanager/qnetworkmanagerservice.cpp
688 688 QLatin1String(NM_DBUS_INTERFACE_DEVICE_WIRELESS), 689 689 QLatin1String("PropertiesChanged"), 690 690 this,SLOT(propertiesSwap(QMap<QString,QVariant>))); 691 692 QDBusPendingReply<QList<QDBusObjectPath> > reply 693 = d->connectionInterface->asyncCall(QLatin1String("GetAccessPoints")); 694 695 QDBusPendingCallWatcher *callWatcher = new QDBusPendingCallWatcher(reply); 696 connect(callWatcher, SIGNAL(finished(QDBusPendingCallWatcher*)), 697 this, SLOT(accessPointsFinished(QDBusPendingCallWatcher*))); 698 699 691 700 d->valid = true; 692 701 } 693 702 … … 749 758 return allOk; 750 759 } 751 760 761 void QNetworkManagerInterfaceDeviceWireless::accessPointsFinished(QDBusPendingCallWatcher *watcher) 762 { 763 QDBusPendingReply<QList<QDBusObjectPath> > reply(*watcher); 764 watcher->deleteLater(); 765 if (!reply.isError()) { 766 accessPointsList = reply.value(); 767 } 768 769 for (int i = 0; i < accessPointsList.size(); i++) { 770 Q_EMIT accessPointAdded(accessPointsList.at(i).path()); 771 } 772 } 773 752 774 QDBusInterface *QNetworkManagerInterfaceDeviceWireless::connectionInterface() const 753 775 { 754 776 return d->connectionInterface; -
qtbase/src/plugins/bearer/networkmanager/qnetworkmanagerservice.h
369 369 void slotAccessPointAdded(QDBusObjectPath); 370 370 void slotAccessPointRemoved(QDBusObjectPath); 371 371 372 void accessPointsFinished(QDBusPendingCallWatcher *watcher); 373 372 374 private: 373 375 QNetworkManagerInterfaceDeviceWirelessPrivate *d; 374 376 QVariantMap propertyMap;