blob: 05f9b3ca17339626a105b4fd767af25a032fd388 [file] [log] [blame]
/****************************************************************************
**
** 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 <QObject>
#include <QList>
#include <QtDBus/QtDBus>
#include <QtDBus/QDBusConnection>
#include <QtDBus/QDBusError>
#include <QtDBus/QDBusInterface>
#include <QtDBus/QDBusMessage>
#include <QtDBus/QDBusReply>
#include <QtDBus/QDBusPendingCallWatcher>
#include <QtDBus/QDBusObjectPath>
#include <QtDBus/QDBusPendingCall>
#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<ObjectPathProperties>();
qDBusRegisterMetaType<PathPropertiesList>();
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()) {
QDBusPendingReply<PathPropertiesList> reply = call(QDBus::Block, QLatin1String("GetModems"));
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<bool>(var);
}
bool QOfonoModemInterface::isOnline()
{
QVariant var = getProperty(QStringLiteral("Online"));
return qdbus_cast<bool>(var);
}
QStringList QOfonoModemInterface::interfaces()
{
const QVariant var = getProperty(QStringLiteral("Interfaces"));
return var.toStringList();
}
QVariantMap QOfonoModemInterface::getProperties()
{
if (propertiesMap.isEmpty()) {
QDBusPendingReply<QVariantMap> reply = call(QDBus::Block, QLatin1String("GetProperties"));
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<QString>(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()) {
QDBusPendingReply<QVariantMap> reply = call(QDBus::Block, QLatin1String("GetProperties"));
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<PathPropertiesList > 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<PathPropertiesList > 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<bool>(var);
}
QString QOfonoDataConnectionManagerInterface::bearer()
{
QVariant var = getProperty(QStringLiteral("Bearer"));
return qdbus_cast<QString>(var);
}
QVariant QOfonoDataConnectionManagerInterface::getProperty(const QString &property)
{
return getProperties().value(property);
}
QVariantMap &QOfonoDataConnectionManagerInterface::getProperties()
{
if (propertiesMap.isEmpty()) {
QDBusPendingReply<QVariantMap> reply = call(QDBus::Block, QLatin1String("GetProperties"));
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()) {
QDBusPendingReply<QVariantMap> reply = call(QDBus::Block, QLatin1String("GetProperties"));
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<bool>(var);
}
QString QOfonoConnectionContextInterface::accessPointName()
{
QVariant var = getProperty(QStringLiteral("AccessPointName"));
return qdbus_cast<QString>(var);
}
QString QOfonoConnectionContextInterface::name()
{
QVariant var = getProperty(QStringLiteral("Name"));
return qdbus_cast<QString>(var);
}
QT_END_NAMESPACE
#endif // QT_NO_DBUS