summaryrefslogtreecommitdiffstats
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
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)
-rw-r--r--src/networksettings/connman/qnetworksettingsmanager_p.cpp38
-rw-r--r--src/networksettings/connman/qnetworksettingsmanager_p.h4
2 files changed, 39 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);
diff --git a/src/networksettings/connman/qnetworksettingsmanager_p.h b/src/networksettings/connman/qnetworksettingsmanager_p.h
index b889379..4ea685a 100644
--- a/src/networksettings/connman/qnetworksettingsmanager_p.h
+++ b/src/networksettings/connman/qnetworksettingsmanager_p.h
@@ -78,7 +78,9 @@ public slots:
void requestInput(const QString& service, const QString& type);
void onServicesChanged(ConnmanMapStructList changed, const QList<QDBusObjectPath> &removed);
void serviceReady();
+ void onConnmanServiceRegistered(const QString &serviceName);
private:
+ bool initialize();
void handleNewService(const QString& servicePath);
protected:
QNetworkSettingsInterfaceModel m_interfaceModel;
@@ -89,8 +91,10 @@ protected:
private:
NetConnmanManagerInterface *m_manager;
QNetworkSettingsUserAgent *m_agent;
+ QDBusServiceWatcher *m_serviceWatcher;
QString m_currentSsid;
QNetworkSettingsService *m_currentWifiConnection;
+ bool m_initialized;
};
QT_END_NAMESPACE