File indexing completed on 2024-04-28 03:59:48
0001 /* 0002 SPDX-FileCopyrightText: 2015 Jan Grulich <jgrulich@redhat.com> 0003 0004 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0005 */ 0006 0007 #include "fakemodem.h" 0008 #include "dbus/fakedbus.h" 0009 0010 #include <QDBusConnection> 0011 #include <QDBusMessage> 0012 #include <QDBusMetaType> 0013 0014 FakeModem::FakeModem(QObject *parent) 0015 : QObject(parent) 0016 , m_bearerCounter(0) 0017 , m_modemCounter(0) 0018 , m_objectManager(new ObjectManager(this)) 0019 { 0020 qDBusRegisterMetaType<ModemManager::MMVariantMapMap>(); 0021 qDBusRegisterMetaType<ModemManager::UIntList>(); 0022 qDBusRegisterMetaType<ModemManager::CurrentModesType>(); 0023 qDBusRegisterMetaType<ModemManager::SupportedModesType>(); 0024 qDBusRegisterMetaType<ModemManager::SignalQualityPair>(); 0025 qDBusRegisterMetaType<ModemManager::PortList>(); 0026 qDBusRegisterMetaType<ModemManager::UnlockRetriesMap>(); 0027 qDBusRegisterMetaType<ModemManager::Port>(); 0028 qDBusRegisterMetaType<ModemManager::LocationInformationMap>(); 0029 0030 QDBusConnection::sessionBus().registerService(QLatin1String(MMQT_DBUS_SERVICE)); 0031 QDBusConnection::sessionBus().registerObject(QLatin1String(MMQT_DBUS_PATH), 0032 this, 0033 QDBusConnection::ExportScriptableContents | QDBusConnection::ExportAdaptors); 0034 } 0035 0036 FakeModem::~FakeModem() 0037 { 0038 QDBusConnection::sessionBus().unregisterObject(QLatin1String(MMQT_DBUS_SERVICE)); 0039 QDBusConnection::sessionBus().unregisterService(QLatin1String(MMQT_DBUS_SERVICE)); 0040 } 0041 0042 void FakeModem::addModem(Modem *modem) 0043 { 0044 QString newModemPath = QStringLiteral("/org/kde/fakemodem/Modem/") + QString::number(m_modemCounter++); 0045 modem->setModemPath(newModemPath); 0046 // Start monitoring property changes 0047 modem->setEnableNotifications(true); 0048 m_modems.insert(QDBusObjectPath(newModemPath), modem); 0049 QDBusConnection::sessionBus().registerObject(newModemPath, modem, QDBusConnection::ExportScriptableContents | QDBusConnection::ExportAdaptors); 0050 0051 ModemManager::MMVariantMapMap interfaces; 0052 interfaces.insert(QLatin1String(MMQT_DBUS_INTERFACE_MODEM), modem->toMap()); 0053 0054 m_objectManager->addInterfaces(QDBusObjectPath(newModemPath), interfaces); 0055 } 0056 0057 void FakeModem::removeModem(Modem *modem) 0058 { 0059 m_modems.remove(QDBusObjectPath(modem->modemPath())); 0060 QDBusConnection::sessionBus().unregisterObject(modem->modemPath()); 0061 0062 m_objectManager->removeInterfaces(QDBusObjectPath(modem->modemPath()), {QLatin1String(MMQT_DBUS_INTERFACE_MODEM)}); 0063 } 0064 0065 void FakeModem::addBearer(Bearer *bearer) 0066 { 0067 QString newBearerPath = QStringLiteral("/org/kde/fakemodem/Bearer/") + QString::number(m_bearerCounter++); 0068 bearer->setBearerPath(newBearerPath); 0069 bearer->setEnableNotifications(true); 0070 m_bearers.insert(QDBusObjectPath(newBearerPath), bearer); 0071 QDBusConnection::sessionBus().registerObject(newBearerPath, bearer, QDBusConnection::ExportScriptableContents); 0072 Q_FOREACH (Modem *modem, m_modems.values()) { 0073 modem->addBearer(QDBusObjectPath(newBearerPath)); 0074 QVariantMap map; 0075 map.insert(QLatin1String("Bearers"), QVariant::fromValue<QList<QDBusObjectPath>>(modem->bearers())); 0076 QDBusMessage message = 0077 QDBusMessage::createSignal(modem->modemPath(), QLatin1String("org.freedesktop.DBus.Properties"), QLatin1String("PropertiesChanged")); 0078 message << QLatin1String("org.kde.fakemodem.Modem") << map << QStringList(); 0079 QDBusConnection::sessionBus().send(message); 0080 } 0081 } 0082 0083 void FakeModem::removeBearer(Bearer *bearer) 0084 { 0085 m_bearers.remove(QDBusObjectPath(bearer->bearerPath())); 0086 QDBusConnection::sessionBus().unregisterObject(bearer->bearerPath()); 0087 Q_FOREACH (Modem *modem, m_modems.values()) { 0088 modem->removeBearer(QDBusObjectPath(bearer->bearerPath())); 0089 QVariantMap map; 0090 map.insert(QLatin1String("Bearers"), QVariant::fromValue<QList<QDBusObjectPath>>(modem->bearers())); 0091 QDBusMessage message = 0092 QDBusMessage::createSignal(modem->modemPath(), QLatin1String("org.freedesktop.DBus.Properties"), QLatin1String("PropertiesChanged")); 0093 message << QLatin1String("org.kde.fakemodem.Modem") << map << QStringList(); 0094 QDBusConnection::sessionBus().send(message); 0095 } 0096 } 0097 0098 void FakeModem::addInterfaces(const QDBusObjectPath &object_path, const ModemManager::MMVariantMapMap &interfaces_and_properties) 0099 { 0100 m_objectManager->addInterfaces(object_path, interfaces_and_properties); 0101 } 0102 0103 void FakeModem::removeInterfaces(const QDBusObjectPath &object_path, const QStringList &interfaces) 0104 { 0105 m_objectManager->removeInterfaces(object_path, interfaces); 0106 } 0107 0108 void FakeModem::ScanDevices() 0109 { 0110 } 0111 0112 void FakeModem::SetLogging(const QString &level) 0113 { 0114 Q_UNUSED(level); 0115 } 0116 0117 #include "moc_fakemodem.cpp"