File indexing completed on 2024-04-21 03:59:51

0001 /*
0002     SPDX-FileCopyrightText: 2014 Lukas Tinkl <ltinkl@redhat.com>
0003     SPDX-FileCopyrightText: 2015 Jan Grulich <jgrulich@redhat.com>
0004 
0005     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0006 */
0007 
0008 #include "modemoma.h"
0009 #include "mmdebug_p.h"
0010 #include "modemoma_p.h"
0011 #ifdef MMQT_STATIC
0012 #include "dbus/fakedbus.h"
0013 #else
0014 #include "dbus/dbus.h"
0015 #endif
0016 
0017 ModemManager::ModemOmaPrivate::ModemOmaPrivate(const QString &path, ModemOma *q)
0018     : InterfacePrivate(path, q)
0019 #ifdef MMQT_STATIC
0020     , omaIface(QLatin1String(MMQT_DBUS_SERVICE), path, QDBusConnection::sessionBus())
0021 #else
0022     , omaIface(QLatin1String(MMQT_DBUS_SERVICE), path, QDBusConnection::systemBus())
0023 #endif
0024     , q_ptr(q)
0025 {
0026     if (omaIface.isValid()) {
0027         features = (ModemOma::Features)omaIface.features();
0028         pendingNetworkInitiatedSessions = omaIface.pendingNetworkInitiatedSessions();
0029         sessionType = (MMOmaSessionType)omaIface.sessionType();
0030         sessionState = (MMOmaSessionState)omaIface.sessionState();
0031     }
0032 }
0033 
0034 ModemManager::ModemOma::ModemOma(const QString &path, QObject *parent)
0035     : Interface(*new ModemOmaPrivate(path, this), parent)
0036 {
0037     Q_D(ModemOma);
0038 
0039     qRegisterMetaType<QFlags<MMOmaFeature>>();
0040     qRegisterMetaType<MMOmaSessionType>();
0041     qRegisterMetaType<MMOmaSessionState>();
0042     qRegisterMetaType<MMOmaSessionStateFailedReason>();
0043 
0044     connect(&d->omaIface, &OrgFreedesktopModemManager1ModemOmaInterface::SessionStateChanged, d, &ModemOmaPrivate::onSessionStateChanged);
0045 #ifdef MMQT_STATIC
0046     QDBusConnection::sessionBus().connect(QLatin1String(MMQT_DBUS_SERVICE),
0047                                           d->uni,
0048                                           QLatin1String(DBUS_INTERFACE_PROPS),
0049                                           QStringLiteral("PropertiesChanged"),
0050                                           d,
0051                                           SLOT(onPropertiesChanged(QString, QVariantMap, QStringList)));
0052 #else
0053     QDBusConnection::systemBus().connect(QLatin1String(MMQT_DBUS_SERVICE),
0054                                          d->uni,
0055                                          QLatin1String(DBUS_INTERFACE_PROPS),
0056                                          QStringLiteral("PropertiesChanged"),
0057                                          d,
0058                                          SLOT(onPropertiesChanged(QString, QVariantMap, QStringList)));
0059 #endif
0060 }
0061 
0062 ModemManager::ModemOma::~ModemOma()
0063 {
0064 }
0065 
0066 ModemManager::ModemOma::Features ModemManager::ModemOma::features() const
0067 {
0068     Q_D(const ModemOma);
0069 
0070     return d->features;
0071 }
0072 
0073 ModemManager::OmaSessionTypes ModemManager::ModemOma::pendingNetworkInitiatedSessions() const
0074 {
0075     Q_D(const ModemOma);
0076     return d->pendingNetworkInitiatedSessions;
0077 }
0078 
0079 MMOmaSessionType ModemManager::ModemOma::sessionType() const
0080 {
0081     Q_D(const ModemOma);
0082     return d->sessionType;
0083 }
0084 
0085 MMOmaSessionState ModemManager::ModemOma::sessionState() const
0086 {
0087     Q_D(const ModemOma);
0088     return d->sessionState;
0089 }
0090 
0091 QDBusPendingReply<void> ModemManager::ModemOma::setup(Features features)
0092 {
0093     Q_D(ModemOma);
0094     return d->omaIface.Setup((uint)features);
0095 }
0096 
0097 QDBusPendingReply<void> ModemManager::ModemOma::startClientInitiatedSession(MMOmaSessionType sessionType)
0098 {
0099     Q_D(ModemOma);
0100     return d->omaIface.StartClientInitiatedSession((uint)sessionType);
0101 }
0102 
0103 QDBusPendingReply<void> ModemManager::ModemOma::acceptNetworkInitiatedSession(uint sessionId, bool accept)
0104 {
0105     Q_D(ModemOma);
0106     return d->omaIface.AcceptNetworkInitiatedSession(sessionId, accept);
0107 }
0108 
0109 QDBusPendingReply<void> ModemManager::ModemOma::cancelSession()
0110 {
0111     Q_D(ModemOma);
0112     return d->omaIface.CancelSession();
0113 }
0114 
0115 void ModemManager::ModemOma::setTimeout(int timeout)
0116 {
0117     Q_D(ModemOma);
0118     d->omaIface.setTimeout(timeout);
0119 }
0120 
0121 int ModemManager::ModemOma::timeout() const
0122 {
0123     Q_D(const ModemOma);
0124     return d->omaIface.timeout();
0125 }
0126 
0127 void ModemManager::ModemOmaPrivate::onSessionStateChanged(int oldState, int newState, uint failedReason)
0128 {
0129     Q_Q(ModemOma);
0130     sessionState = (MMOmaSessionState)newState;
0131     Q_EMIT q->sessionStateChanged((MMOmaSessionState)oldState, (MMOmaSessionState)newState, (MMOmaSessionStateFailedReason)failedReason);
0132 }
0133 void ModemManager::ModemOmaPrivate::onPropertiesChanged(const QString &interface, const QVariantMap &properties, const QStringList &invalidatedProps)
0134 {
0135     Q_Q(ModemOma);
0136     Q_UNUSED(invalidatedProps);
0137     qCDebug(MMQT) << interface << properties.keys();
0138 
0139     if (interface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_OMA)) {
0140         QVariantMap::const_iterator it = properties.constFind(QLatin1String(MM_MODEM_OMA_PROPERTY_FEATURES));
0141         if (it != properties.constEnd()) {
0142             features = (ModemOma::Features)it->toUInt();
0143             Q_EMIT q->featuresChanged(features);
0144         }
0145         it = properties.constFind(QLatin1String(MM_MODEM_OMA_PROPERTY_PENDINGNETWORKINITIATEDSESSIONS));
0146         if (it != properties.constEnd()) {
0147             pendingNetworkInitiatedSessions = qdbus_cast<OmaSessionTypes>(*it);
0148             Q_EMIT q->pendingNetworkInitiatedSessionsChanged(pendingNetworkInitiatedSessions);
0149         }
0150         it = properties.constFind(QLatin1String(MM_MODEM_OMA_PROPERTY_SESSIONTYPE));
0151         if (it != properties.constEnd()) {
0152             sessionType = (MMOmaSessionType)it->toUInt();
0153             Q_EMIT q->sessionTypeChanged(sessionType);
0154         }
0155         it = properties.constFind(QLatin1String(MM_MODEM_OMA_PROPERTY_SESSIONSTATE));
0156         if (it != properties.constEnd()) {
0157             // Should be handled by sessionStateChanged() signal
0158         }
0159     }
0160 }
0161 
0162 #include "moc_modemoma.cpp"