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

0001 /*
0002     SPDX-FileCopyrightText: 2008, 2011 Will Stephenson <wstephenson@kde.org>
0003     SPDX-FileCopyrightText: 2010-2011 Lamarque Souza <lamarque@kde.org>
0004     SPDX-FileCopyrightText: 2013 Lukas Tinkl <ltinkl@redhat.com>
0005     SPDX-FileCopyrightText: 2013-2015 Jan Grulich <jgrulich@redhat.com>
0006 
0007     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0008 */
0009 
0010 #include "sim.h"
0011 #include "mmdebug_p.h"
0012 #include "sim_p.h"
0013 #ifdef MMQT_STATIC
0014 #include "dbus/fakedbus.h"
0015 #else
0016 #include "dbus/dbus.h"
0017 #endif
0018 
0019 ModemManager::SimPrivate::SimPrivate(const QString &path, Sim *q)
0020 #ifdef MMQT_STATIC
0021     : simIface(QLatin1String(MMQT_DBUS_SERVICE), path, QDBusConnection::sessionBus())
0022 #else
0023     : simIface(QLatin1String(MMQT_DBUS_SERVICE), path, QDBusConnection::systemBus())
0024 #endif
0025     , uni(path)
0026     , q_ptr(q)
0027 {
0028     if (simIface.isValid()) {
0029         active = simIface.active();
0030         simIdentifier = simIface.simIdentifier();
0031         imsi = simIface.imsi();
0032         eid = simIface.eid();
0033         operatorIdentifier = simIface.operatorIdentifier();
0034         operatorName = simIface.operatorName();
0035         emergencyNumbers = simIface.emergencyNumbers();
0036         preferredNetworks = simIface.preferredNetworks();
0037 #if MM_CHECK_VERSION(1, 20, 0)
0038         gid1 = simIface.gid1();
0039         gid2 = simIface.gid2();
0040         simType = (MMSimType)simIface.simType();
0041         esimStatus = (MMSimEsimStatus)simIface.esimStatus();
0042         removability = (MMSimRemovability)simIface.removability();
0043 #endif
0044     }
0045 }
0046 
0047 ModemManager::Sim::Sim(const QString &path, QObject *parent)
0048     : QObject(parent)
0049     , d_ptr(new SimPrivate(path, this))
0050 {
0051     Q_D(Sim);
0052 #ifdef MMQT_STATIC
0053     QDBusConnection::sessionBus().connect(QLatin1String(MMQT_DBUS_SERVICE),
0054                                           path,
0055                                           QLatin1String(DBUS_INTERFACE_PROPS),
0056                                           QStringLiteral("PropertiesChanged"),
0057                                           d,
0058                                           SLOT(onPropertiesChanged(QString, QVariantMap, QStringList)));
0059 #else
0060     QDBusConnection::systemBus().connect(QLatin1String(MMQT_DBUS_SERVICE),
0061                                          path,
0062                                          QLatin1String(DBUS_INTERFACE_PROPS),
0063                                          QStringLiteral("PropertiesChanged"),
0064                                          d,
0065                                          SLOT(onPropertiesChanged(QString, QVariantMap, QStringList)));
0066 #endif
0067 }
0068 
0069 ModemManager::Sim::~Sim()
0070 {
0071     delete d_ptr;
0072 }
0073 
0074 bool ModemManager::Sim::active() const
0075 {
0076     Q_D(const Sim);
0077     return d->active;
0078 }
0079 
0080 QString ModemManager::Sim::simIdentifier() const
0081 {
0082     Q_D(const Sim);
0083     return d->simIdentifier;
0084 }
0085 
0086 QString ModemManager::Sim::imsi() const
0087 {
0088     Q_D(const Sim);
0089     return d->imsi;
0090 }
0091 
0092 QString ModemManager::Sim::eid() const
0093 {
0094     Q_D(const Sim);
0095     return d->eid;
0096 }
0097 
0098 QString ModemManager::Sim::operatorIdentifier() const
0099 {
0100     Q_D(const Sim);
0101     return d->operatorIdentifier;
0102 }
0103 
0104 QString ModemManager::Sim::operatorName() const
0105 {
0106     Q_D(const Sim);
0107     return d->operatorName;
0108 }
0109 
0110 QStringList ModemManager::Sim::emergencyNumbers() const
0111 {
0112     Q_D(const Sim);
0113     return d->emergencyNumbers;
0114 }
0115 
0116 QVariantMap ModemManager::Sim::preferredNetworks() const
0117 {
0118     Q_D(const Sim);
0119     return d->preferredNetworks;
0120 }
0121 
0122 #if MM_CHECK_VERSION(1, 20, 0)
0123 QByteArray ModemManager::Sim::gid1() const
0124 {
0125     Q_D(const Sim);
0126     return d->gid1;
0127 }
0128 
0129 QByteArray ModemManager::Sim::gid2() const
0130 {
0131     Q_D(const Sim);
0132     return d->gid2;
0133 }
0134 
0135 MMSimType ModemManager::Sim::simType() const
0136 {
0137     Q_D(const Sim);
0138     return d->simType;
0139 }
0140 
0141 MMSimEsimStatus ModemManager::Sim::esimStatus() const
0142 {
0143     Q_D(const Sim);
0144     return d->esimStatus;
0145 }
0146 
0147 MMSimRemovability ModemManager::Sim::removability() const
0148 {
0149     Q_D(const Sim);
0150     return d->removability;
0151 }
0152 #endif
0153 
0154 QDBusPendingReply<> ModemManager::Sim::sendPuk(const QString &puk, const QString &pin)
0155 {
0156     Q_D(Sim);
0157     return d->simIface.SendPuk(puk, pin);
0158 }
0159 
0160 QDBusPendingReply<> ModemManager::Sim::sendPin(const QString &pin)
0161 {
0162     Q_D(Sim);
0163     return d->simIface.SendPin(pin);
0164 }
0165 
0166 QDBusPendingReply<> ModemManager::Sim::enablePin(const QString &pin, bool enabled)
0167 {
0168     Q_D(Sim);
0169     return d->simIface.EnablePin(pin, enabled);
0170 }
0171 
0172 QDBusPendingReply<> ModemManager::Sim::changePin(const QString &oldPin, const QString &newPin)
0173 {
0174     Q_D(Sim);
0175     return d->simIface.ChangePin(oldPin, newPin);
0176 }
0177 
0178 QDBusPendingReply<> ModemManager::Sim::setPreferredNetworks(QVariantMap preferredNetworks)
0179 {
0180     Q_D(Sim);
0181     return d->simIface.SetPreferredNetworks(preferredNetworks);
0182 }
0183 
0184 QString ModemManager::Sim::uni() const
0185 {
0186     Q_D(const Sim);
0187     return d->uni;
0188 }
0189 
0190 void ModemManager::Sim::setTimeout(int timeout)
0191 {
0192     Q_D(Sim);
0193     d->simIface.setTimeout(timeout);
0194 }
0195 
0196 int ModemManager::Sim::timeout() const
0197 {
0198     Q_D(const Sim);
0199     return d->simIface.timeout();
0200 }
0201 
0202 void ModemManager::SimPrivate::onPropertiesChanged(const QString &interface, const QVariantMap &properties, const QStringList &invalidatedProps)
0203 {
0204     Q_Q(Sim);
0205     Q_UNUSED(invalidatedProps);
0206     qCDebug(MMQT) << interface << properties.keys();
0207 
0208     if (interface == QLatin1String(MMQT_DBUS_INTERFACE_SIM)) {
0209         QVariantMap::const_iterator it = properties.constFind(QLatin1String(MM_SIM_PROPERTY_ACTIVE));
0210         if (it != properties.constEnd()) {
0211             active = it->toBool();
0212             Q_EMIT q->activeChanged(active);
0213         }
0214         it = properties.constFind(QLatin1String(MM_SIM_PROPERTY_SIMIDENTIFIER));
0215         if (it != properties.constEnd()) {
0216             simIdentifier = it->toString();
0217             Q_EMIT q->simIdentifierChanged(simIdentifier);
0218         }
0219         it = properties.constFind(QLatin1String(MM_SIM_PROPERTY_IMSI));
0220         if (it != properties.constEnd()) {
0221             imsi = it->toString();
0222             Q_EMIT q->imsiChanged(imsi);
0223         }
0224         it = properties.constFind(QLatin1String(MM_SIM_PROPERTY_EID));
0225         if (it != properties.constEnd()) {
0226             eid = it->toString();
0227             Q_EMIT q->eidChanged(eid);
0228         }
0229         it = properties.constFind(QLatin1String(MM_SIM_PROPERTY_OPERATORIDENTIFIER));
0230         if (it != properties.constEnd()) {
0231             operatorIdentifier = it->toString();
0232             Q_EMIT q->operatorIdentifierChanged(operatorIdentifier);
0233         }
0234         it = properties.constFind(QLatin1String(MM_SIM_PROPERTY_OPERATORNAME));
0235         if (it != properties.constEnd()) {
0236             operatorName = it->toString();
0237             Q_EMIT q->operatorNameChanged(operatorName);
0238         }
0239         it = properties.constFind(QLatin1String(MM_SIM_PROPERTY_EMERGENCYNUMBERS));
0240         if (it != properties.constEnd()) {
0241             emergencyNumbers = it->toStringList();
0242             Q_EMIT q->emergencyNumbersChanged(emergencyNumbers);
0243         }
0244         it = properties.constFind(QLatin1String(MM_SIM_PROPERTY_PREFERREDNETWORKS));
0245         if (it != properties.constEnd()) {
0246             preferredNetworks = it->toMap();
0247             Q_EMIT q->preferredNetworksChanged(preferredNetworks);
0248         }
0249 #if MM_CHECK_VERSION(1, 20, 0)
0250         it = properties.constFind(QLatin1String(MM_SIM_PROPERTY_GID1));
0251         if (it != properties.constEnd()) {
0252             gid1 = it->toByteArray();
0253             Q_EMIT q->gid1Changed(gid1);
0254         }
0255         it = properties.constFind(QLatin1String(MM_SIM_PROPERTY_GID2));
0256         if (it != properties.constEnd()) {
0257             gid2 = it->toByteArray();
0258             Q_EMIT q->gid1Changed(gid2);
0259         }
0260         it = properties.constFind(QLatin1String(MM_SIM_PROPERTY_SIMTYPE));
0261         if (it != properties.constEnd()) {
0262             simType = (MMSimType)it->toUInt();
0263             Q_EMIT q->simTypeChanged(simType);
0264         }
0265         it = properties.constFind(QLatin1String(MM_SIM_PROPERTY_ESIMSTATUS));
0266         if (it != properties.constEnd()) {
0267             esimStatus = (MMSimEsimStatus)it->toUInt();
0268             Q_EMIT q->esimStatusChanged(esimStatus);
0269         }
0270         it = properties.constFind(QLatin1String(MM_SIM_PROPERTY_REMOVABILITY));
0271         if (it != properties.constEnd()) {
0272             removability = (MMSimRemovability)it->toUInt();
0273             Q_EMIT q->removabilityChanged(removability);
0274         }
0275 #endif
0276     }
0277 }
0278 
0279 #include "moc_sim.cpp"
0280 #include "moc_sim_p.cpp"