From 2efccfeeef70ebd8a2db2ebccb3c63722ae76e1f Mon Sep 17 00:00:00 2001 From: Lorn Potter Date: Fri, 7 Dec 2012 07:41:44 +1000 Subject: Update connman bearer plugin for changed connman API. This should also remain working for previous connman Change-Id: I5f0a1947f11948b202391ba0c256067faa01ce6d Reviewed-by: Lorn Potter Reviewed-by: Robin Burchell Reviewed-by: Thiago Macieira --- .../bearer/connman/qconnmanservice_linux.cpp | 48 +++++++++++++++++++--- .../bearer/connman/qconnmanservice_linux_p.h | 13 ++++++ 2 files changed, 56 insertions(+), 5 deletions(-) (limited to 'src/plugins/bearer') diff --git a/src/plugins/bearer/connman/qconnmanservice_linux.cpp b/src/plugins/bearer/connman/qconnmanservice_linux.cpp index 46757ab021..dbfac6b438 100644 --- a/src/plugins/bearer/connman/qconnmanservice_linux.cpp +++ b/src/plugins/bearer/connman/qconnmanservice_linux.cpp @@ -57,9 +57,24 @@ #ifndef QT_NO_DBUS QT_BEGIN_NAMESPACE -static QDBusConnection dbusConnection = QDBusConnection::systemBus(); +QDBusArgument &operator<<(QDBusArgument &argument, const ConnmanMap &map) +{ + argument.beginStructure(); + argument << map.objectPath << map.propertyMap; + argument.endStructure(); + return argument; +} + +const QDBusArgument &operator>>(const QDBusArgument &argument, ConnmanMap &map) +{ + argument.beginStructure(); + argument >> map.objectPath >> map.propertyMap; + argument.endStructure(); + return argument; +} +static QDBusConnection dbusConnection = QDBusConnection::systemBus(); QConnmanManagerInterface::QConnmanManagerInterface( QObject *parent) : QDBusAbstractInterface(QLatin1String(CONNMAN_SERVICE), QLatin1String(CONNMAN_MANAGER_PATH), @@ -301,14 +316,37 @@ QStringList QConnmanManagerInterface::getProfiles() QStringList QConnmanManagerInterface::getTechnologies() { - QVariant var = getProperty("Technologies"); - return qdbus_cast(var); + QStringList list; + QDBusReply replyList = this->call(QLatin1String("GetTechnologies")); + if (replyList.isValid()) { + Q_FOREACH (ConnmanMap map, replyList.value()) { + list << map.objectPath.path(); + } + } else { + // try for older version + QVariant var = getProperty("Technologies"); + if (!var.isNull()) { + list = qdbus_cast(var); + } + } + return list; } QStringList QConnmanManagerInterface::getServices() { - QVariant var = getProperty("Services"); - return qdbus_cast(var); + QStringList list; + QDBusReply replyList = this->call(QLatin1String("GetServices")); + if (replyList.isValid()) { + Q_FOREACH (ConnmanMap map, replyList.value()) { + list << map.objectPath.path(); + } + } else { + QVariant var = getProperty("Services"); + if (!var.isNull()) { + list = qdbus_cast(var); + } + } + return list; } QString QConnmanManagerInterface::getPathForTechnology(const QString &name) diff --git a/src/plugins/bearer/connman/qconnmanservice_linux_p.h b/src/plugins/bearer/connman/qconnmanservice_linux_p.h index be2063f8e8..3ed66f4769 100644 --- a/src/plugins/bearer/connman/qconnmanservice_linux_p.h +++ b/src/plugins/bearer/connman/qconnmanservice_linux_p.h @@ -59,6 +59,7 @@ #include #include #include +#include #include #include @@ -90,11 +91,23 @@ QT_BEGIN_NAMESPACE +struct ConnmanMap { + QDBusObjectPath objectPath; + QVariantMap propertyMap; +}; + +typedef QList< ConnmanMap > ConnmanMapList; + QT_END_NAMESPACE +Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(ConnmanMap)) +Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(ConnmanMapList)) QT_BEGIN_NAMESPACE +QDBusArgument &operator<<(QDBusArgument &argument, const ConnmanMap &obj); +const QDBusArgument &operator>>(const QDBusArgument &argument, ConnmanMap &obj); + class QConnmanManagerInterface : public QDBusAbstractInterface { Q_OBJECT -- cgit v1.2.3