summaryrefslogtreecommitdiffstats
path: root/src/networksettings/connman/qnetworksettingsmanager_p.cpp
diff options
context:
space:
mode:
authorPasi Petäjäjärvi <pasi.petajajarvi@qt.io>2018-08-22 15:30:28 +0300
committerPasi Petäjäjärvi <pasi.petajajarvi@qt.io>2018-08-24 11:33:54 +0000
commit127d46999676ec672d861e6ac5f8dfc06c812208 (patch)
treed19b00cdec02deb1bc2acb6ed14e70a978c40a7e /src/networksettings/connman/qnetworksettingsmanager_p.cpp
parent3b535a4210714537f6b2b303f0c519377533de07 (diff)
Fix connman connection initialization after it is available
Currently if connman service is not up and running, we never try again to initialize connection to it and request network information. * Requires at least d-bus daemon to be running Change-Id: I70b0358ee255174edce8d578517e9df091206ceb Reviewed-by: Teemu Holappa <teemu.holappa@qt.io> (cherry picked from commit 9034db2caa91a686fb8e783b13f3ad5723285bc8)
Diffstat (limited to 'src/networksettings/connman/qnetworksettingsmanager_p.cpp')
-rw-r--r--src/networksettings/connman/qnetworksettingsmanager_p.cpp38
1 files changed, 35 insertions, 3 deletions
diff --git a/src/networksettings/connman/qnetworksettingsmanager_p.cpp b/src/networksettings/connman/qnetworksettingsmanager_p.cpp
index e2b0281..5d2b359 100644
--- a/src/networksettings/connman/qnetworksettingsmanager_p.cpp
+++ b/src/networksettings/connman/qnetworksettingsmanager_p.cpp
@@ -36,6 +36,8 @@
QT_BEGIN_NAMESPACE
+const QString ConnManServiceName(QStringLiteral("net.connman"));
+
QNetworkSettingsManagerPrivate::QNetworkSettingsManagerPrivate(QNetworkSettingsManager *parent)
:QObject(parent)
,q_ptr(parent)
@@ -44,7 +46,9 @@ QNetworkSettingsManagerPrivate::QNetworkSettingsManagerPrivate(QNetworkSettingsM
, m_serviceFilter(Q_NULLPTR)
, m_manager(Q_NULLPTR)
, m_agent(Q_NULLPTR)
+ , m_serviceWatcher(Q_NULLPTR)
, m_currentWifiConnection(Q_NULLPTR)
+ , m_initialized(false)
{
qDBusRegisterMetaType<ConnmanMapStruct>();
qDBusRegisterMetaType<ConnmanMapStructList>();
@@ -55,7 +59,25 @@ QNetworkSettingsManagerPrivate::QNetworkSettingsManagerPrivate(QNetworkSettingsM
m_serviceModel = new QNetworkSettingsServiceModel(this);
m_serviceFilter = new QNetworkSettingsServiceFilter(this);
m_serviceFilter->setSourceModel(m_serviceModel);
- m_manager = new NetConnmanManagerInterface(QStringLiteral("net.connman"), QStringLiteral("/"),
+
+ QDBusConnectionInterface* bus = QDBusConnection::systemBus().interface();
+ if (bus->isServiceRegistered(ConnManServiceName)) {
+ if (!initialize())
+ qWarning("Failed to initialize connman connection");
+ } else {
+ m_serviceWatcher = new QDBusServiceWatcher(this);
+ m_serviceWatcher->setConnection(QDBusConnection::systemBus());
+ m_serviceWatcher->setWatchedServices(QStringList({ConnManServiceName}));
+ connect(m_serviceWatcher, &QDBusServiceWatcher::serviceRegistered, this, &QNetworkSettingsManagerPrivate::onConnmanServiceRegistered);
+ }
+}
+
+bool QNetworkSettingsManagerPrivate::initialize()
+{
+ if (m_initialized && m_manager)
+ return m_initialized;
+
+ m_manager = new NetConnmanManagerInterface(ConnManServiceName, QStringLiteral("/"),
QDBusConnection::systemBus(), this);
if (m_manager->isValid()) {
@@ -73,11 +95,13 @@ QNetworkSettingsManagerPrivate::QNetworkSettingsManagerPrivate(QNetworkSettingsM
connect(m_manager, &NetConnmanManagerInterface::ServicesChanged, this, &QNetworkSettingsManagerPrivate::onServicesChanged);
m_manager->RegisterAgent(QDBusObjectPath(AgentPath));
- }
- else {
+ m_initialized = true;
+ } else {
delete m_manager;
m_manager = NULL;
+ m_initialized = false;
}
+ return m_initialized;
}
void QNetworkSettingsManagerPrivate::requestInput(const QString& service, const QString& type)
@@ -124,6 +148,14 @@ void QNetworkSettingsManagerPrivate::tryNextConnection()
}
}
+void QNetworkSettingsManagerPrivate::onConnmanServiceRegistered(const QString &serviceName)
+{
+ if (serviceName == ConnManServiceName) {
+ if (!initialize())
+ qWarning("Failed to initialize connman connection");
+ }
+}
+
void QNetworkSettingsManagerPrivate::getServicesFinished(QDBusPendingCallWatcher *watcher)
{
Q_Q(QNetworkSettingsManager);