/**************************************************************************** ** ** Copyright (C) 2016 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 3 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL3 included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 3 requirements ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 2.0 or (at your option) the GNU General ** Public license version 3 or any later version approved by the KDE Free ** Qt Foundation. The licenses are as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-2.0.html and ** https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include "qofonoservice_linux_p.h" #ifndef QT_NO_DBUS QDBusArgument &operator<<(QDBusArgument &argument, const ObjectPathProperties &item) { argument.beginStructure(); argument << item.path << item.properties; argument.endStructure(); return argument; } const QDBusArgument &operator>>(const QDBusArgument &argument, ObjectPathProperties &item) { argument.beginStructure(); argument >> item.path >> item.properties; argument.endStructure(); return argument; } QT_BEGIN_NAMESPACE QOfonoManagerInterface::QOfonoManagerInterface( QObject *parent) : QDBusAbstractInterface(QLatin1String(OFONO_SERVICE), QLatin1String(OFONO_MANAGER_PATH), OFONO_MANAGER_INTERFACE, QDBusConnection::systemBus(), parent) { qDBusRegisterMetaType(); qDBusRegisterMetaType(); QDBusConnection::systemBus().connect(QLatin1String(OFONO_SERVICE), QLatin1String(OFONO_MANAGER_PATH), QLatin1String(OFONO_MANAGER_INTERFACE), QLatin1String("ModemAdded"), this,SLOT(modemAdded(QDBusObjectPath, QVariantMap))); QDBusConnection::systemBus().connect(QLatin1String(OFONO_SERVICE), QLatin1String(OFONO_MANAGER_PATH), QLatin1String(OFONO_MANAGER_INTERFACE), QLatin1String("ModemRemoved"), this,SLOT(modemRemoved(QDBusObjectPath))); } QOfonoManagerInterface::~QOfonoManagerInterface() { } QStringList QOfonoManagerInterface::getModems() { if (modemList.isEmpty()) { QList argumentList; QDBusPendingReply reply = callWithArgumentList(QDBus::Block, QLatin1String("GetModems"), argumentList); reply.waitForFinished(); if (!reply.isError()) { const auto modems = reply.value(); for (const ObjectPathProperties &modem : modems) modemList << modem.path.path(); } } return modemList; } QString QOfonoManagerInterface::currentModem() { const QStringList modems = getModems(); for (const QString &modem : modems) { QOfonoModemInterface device(modem); if (device.isPowered() && device.isOnline() && device.interfaces().contains(QLatin1String("org.ofono.NetworkRegistration"))) return modem; } return QString(); } void QOfonoManagerInterface::modemAdded(const QDBusObjectPath &path, const QVariantMap &/*var*/) { if (!modemList.contains(path.path())) { modemList << path.path(); Q_EMIT modemChanged(); } } void QOfonoManagerInterface::modemRemoved(const QDBusObjectPath &path) { if (modemList.contains(path.path())) { modemList.removeOne(path.path()); Q_EMIT modemChanged(); } } QOfonoModemInterface::QOfonoModemInterface(const QString &dbusPathName, QObject *parent) : QDBusAbstractInterface(QLatin1String(OFONO_SERVICE), dbusPathName, OFONO_MODEM_INTERFACE, QDBusConnection::systemBus(), parent) { QDBusConnection::systemBus().connect(QLatin1String(OFONO_SERVICE), path(), OFONO_MODEM_INTERFACE, QLatin1String("PropertyChanged"), this,SLOT(propertyChanged(QString,QDBusVariant))); } QOfonoModemInterface::~QOfonoModemInterface() { } void QOfonoModemInterface::propertyChanged(const QString &name,const QDBusVariant &value) { propertiesMap[name] = value.variant(); } bool QOfonoModemInterface::isPowered() { QVariant var = getProperty(QStringLiteral("Powered")); return qdbus_cast(var); } bool QOfonoModemInterface::isOnline() { QVariant var = getProperty(QStringLiteral("Online")); return qdbus_cast(var); } QStringList QOfonoModemInterface::interfaces() { const QVariant var = getProperty(QStringLiteral("Interfaces")); return var.toStringList(); } QVariantMap QOfonoModemInterface::getProperties() { if (propertiesMap.isEmpty()) { QList argumentList; QDBusPendingReply reply = callWithArgumentList(QDBus::Block, QLatin1String("GetProperties"), argumentList); if (!reply.isError()) { propertiesMap = reply.value(); } } return propertiesMap; } QVariant QOfonoModemInterface::getProperty(const QString &property) { QVariant var; QVariantMap map = getProperties(); if (map.contains(property)) var = map.value(property); return var; } QOfonoNetworkRegistrationInterface::QOfonoNetworkRegistrationInterface(const QString &dbusPathName, QObject *parent) : QDBusAbstractInterface(QLatin1String(OFONO_SERVICE), dbusPathName, OFONO_NETWORK_REGISTRATION_INTERFACE, QDBusConnection::systemBus(), parent) { } QOfonoNetworkRegistrationInterface::~QOfonoNetworkRegistrationInterface() { } QString QOfonoNetworkRegistrationInterface::getTechnology() { QVariant var = getProperty(QStringLiteral("Technology")); return qdbus_cast(var); } QVariant QOfonoNetworkRegistrationInterface::getProperty(const QString &property) { QVariant var; QVariantMap map = getProperties(); if (map.contains(property)) var = map.value(property); return var; } QVariantMap QOfonoNetworkRegistrationInterface::getProperties() { if (propertiesMap.isEmpty()) { QList argumentList; QDBusPendingReply reply = callWithArgumentList(QDBus::Block, QLatin1String("GetProperties"), argumentList); reply.waitForFinished(); if (!reply.isError()) { propertiesMap = reply.value(); } } return propertiesMap; } QOfonoDataConnectionManagerInterface::QOfonoDataConnectionManagerInterface(const QString &dbusPathName, QObject *parent) : QDBusAbstractInterface(QLatin1String(OFONO_SERVICE), dbusPathName, OFONO_DATA_CONNECTION_MANAGER_INTERFACE, QDBusConnection::systemBus(), parent) { QDBusConnection::systemBus().connect(QLatin1String(OFONO_SERVICE), path(), QLatin1String(OFONO_MODEM_INTERFACE), QLatin1String("PropertyChanged"), this,SLOT(propertyChanged(QString,QDBusVariant))); } QOfonoDataConnectionManagerInterface::~QOfonoDataConnectionManagerInterface() { } QStringList QOfonoDataConnectionManagerInterface::contexts() { if (contextList.isEmpty()) { QDBusPendingReply reply = call(QLatin1String("GetContexts")); reply.waitForFinished(); if (!reply.isError()) { const auto contexts = reply.value(); for (const ObjectPathProperties &context : contexts) contextList << context.path.path(); } } return contextList; } PathPropertiesList QOfonoDataConnectionManagerInterface::contextsWithProperties() { if (contextListProperties.isEmpty()) { QDBusPendingReply reply = call(QLatin1String("GetContexts")); reply.waitForFinished(); if (!reply.isError()) { contextListProperties = reply.value(); } } return contextListProperties; } bool QOfonoDataConnectionManagerInterface::roamingAllowed() { QVariant var = getProperty(QStringLiteral("RoamingAllowed")); return qdbus_cast(var); } QString QOfonoDataConnectionManagerInterface::bearer() { QVariant var = getProperty(QStringLiteral("Bearer")); return qdbus_cast(var); } QVariant QOfonoDataConnectionManagerInterface::getProperty(const QString &property) { return getProperties().value(property); } QVariantMap &QOfonoDataConnectionManagerInterface::getProperties() { if (propertiesMap.isEmpty()) { QList argumentList; QDBusPendingReply reply = callWithArgumentList(QDBus::Block, QLatin1String("GetProperties"), argumentList); if (!reply.isError()) { propertiesMap = reply.value(); } } return propertiesMap; } void QOfonoDataConnectionManagerInterface::propertyChanged(const QString &name, const QDBusVariant &value) { propertiesMap[name] = value.variant(); if (name == QLatin1String("RoamingAllowed")) Q_EMIT roamingAllowedChanged(value.variant().toBool()); } QOfonoConnectionContextInterface::QOfonoConnectionContextInterface(const QString &dbusPathName, QObject *parent) : QDBusAbstractInterface(QLatin1String(OFONO_SERVICE), dbusPathName, OFONO_CONNECTION_CONTEXT_INTERFACE, QDBusConnection::systemBus(), parent) { QDBusConnection::systemBus().connect(QLatin1String(OFONO_SERVICE), path(), QLatin1String(OFONO_MODEM_INTERFACE), QLatin1String("PropertyChanged"), this,SLOT(propertyChanged(QString,QDBusVariant))); } QOfonoConnectionContextInterface::~QOfonoConnectionContextInterface() { } QVariantMap QOfonoConnectionContextInterface::getProperties() { if (propertiesMap.isEmpty()) { QList argumentList; QDBusPendingReply reply = callWithArgumentList(QDBus::Block, QLatin1String("GetProperties"), argumentList); if (!reply.isError()) { propertiesMap = reply.value(); } } return propertiesMap; } void QOfonoConnectionContextInterface::propertyChanged(const QString &name, const QDBusVariant &value) { propertiesMap[name] = value.variant(); } QVariant QOfonoConnectionContextInterface::getProperty(const QString &property) { QVariant var; QVariantMap map = getProperties(); if (map.contains(property)) var = map.value(property); return var; } bool QOfonoConnectionContextInterface::active() { QVariant var = getProperty(QStringLiteral("Active")); return qdbus_cast(var); } QString QOfonoConnectionContextInterface::accessPointName() { QVariant var = getProperty(QStringLiteral("AccessPointName")); return qdbus_cast(var); } QString QOfonoConnectionContextInterface::name() { QVariant var = getProperty(QStringLiteral("Name")); return qdbus_cast(var); } QT_END_NAMESPACE #endif // QT_NO_DBUS