File indexing completed on 2024-04-14 03:57:34

0001 /*
0002     SPDX-FileCopyrightText: 2012-2013 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 "gsmsetting.h"
0008 #include "gsmsetting_p.h"
0009 
0010 #define NM_SETTING_GSM_NETWORK_TYPE "network-type"
0011 #define NM_SETTING_GSM_ALLOWED_BANDS "allowed-bands"
0012 
0013 #include <QDebug>
0014 
0015 NetworkManager::GsmSettingPrivate::GsmSettingPrivate()
0016     : name(NM_SETTING_GSM_SETTING_NAME)
0017     , passwordFlags(NetworkManager::GsmSetting::None)
0018     , networkType(NetworkManager::GsmSetting::Any)
0019     , pinFlags(NetworkManager::GsmSetting::None)
0020     , allowedBand(1)
0021     , homeOnly(false)
0022 {
0023 }
0024 
0025 NetworkManager::GsmSetting::GsmSetting()
0026     : Setting(Setting::Gsm)
0027     , d_ptr(new GsmSettingPrivate())
0028 {
0029 }
0030 
0031 NetworkManager::GsmSetting::GsmSetting(const Ptr &other)
0032     : Setting(other)
0033     , d_ptr(new GsmSettingPrivate())
0034 {
0035     setNumber(other->number());
0036     setUsername(other->username());
0037     setPassword(other->password());
0038     setPasswordFlags(other->passwordFlags());
0039     setApn(other->apn());
0040     setNetworkId(other->networkId());
0041     setNetworkType(other->networkType());
0042     setPin(other->pin());
0043     setPinFlags(other->pinFlags());
0044     setAllowedBand(other->allowedBand());
0045     setHomeOnly(other->homeOnly());
0046     setDeviceId(other->deviceId());
0047     setSimId(other->simId());
0048     setSimOperatorId(other->simOperatorId());
0049 }
0050 
0051 NetworkManager::GsmSetting::~GsmSetting()
0052 {
0053     delete d_ptr;
0054 }
0055 
0056 QString NetworkManager::GsmSetting::name() const
0057 {
0058     Q_D(const GsmSetting);
0059 
0060     return d->name;
0061 }
0062 
0063 void NetworkManager::GsmSetting::setNumber(const QString &number)
0064 {
0065     Q_D(GsmSetting);
0066 
0067     d->number = number;
0068 }
0069 
0070 QString NetworkManager::GsmSetting::number() const
0071 {
0072     Q_D(const GsmSetting);
0073 
0074     return d->number;
0075 }
0076 
0077 void NetworkManager::GsmSetting::setUsername(const QString &username)
0078 {
0079     Q_D(GsmSetting);
0080 
0081     d->username = username;
0082 }
0083 
0084 QString NetworkManager::GsmSetting::username() const
0085 {
0086     Q_D(const GsmSetting);
0087 
0088     return d->username;
0089 }
0090 
0091 void NetworkManager::GsmSetting::setPassword(const QString &password)
0092 {
0093     Q_D(GsmSetting);
0094 
0095     d->password = password;
0096 }
0097 
0098 QString NetworkManager::GsmSetting::password() const
0099 {
0100     Q_D(const GsmSetting);
0101 
0102     return d->password;
0103 }
0104 
0105 void NetworkManager::GsmSetting::setPasswordFlags(GsmSetting::SecretFlags flags)
0106 {
0107     Q_D(GsmSetting);
0108 
0109     d->passwordFlags = flags;
0110 }
0111 
0112 NetworkManager::GsmSetting::SecretFlags NetworkManager::GsmSetting::passwordFlags() const
0113 {
0114     Q_D(const GsmSetting);
0115 
0116     return d->passwordFlags;
0117 }
0118 
0119 void NetworkManager::GsmSetting::setApn(const QString &apn)
0120 {
0121     Q_D(GsmSetting);
0122 
0123     d->apn = apn;
0124 }
0125 
0126 QString NetworkManager::GsmSetting::apn() const
0127 {
0128     Q_D(const GsmSetting);
0129 
0130     return d->apn;
0131 }
0132 
0133 void NetworkManager::GsmSetting::setNetworkId(const QString &id)
0134 {
0135     Q_D(GsmSetting);
0136 
0137     d->networkId = id;
0138 }
0139 
0140 QString NetworkManager::GsmSetting::networkId() const
0141 {
0142     Q_D(const GsmSetting);
0143 
0144     return d->networkId;
0145 }
0146 
0147 void NetworkManager::GsmSetting::setNetworkType(NetworkType type)
0148 {
0149     Q_D(GsmSetting);
0150 
0151     d->networkType = type;
0152 }
0153 
0154 NetworkManager::GsmSetting::NetworkType NetworkManager::GsmSetting::networkType() const
0155 {
0156     Q_D(const GsmSetting);
0157 
0158     return d->networkType;
0159 }
0160 
0161 void NetworkManager::GsmSetting::setPin(const QString &pin)
0162 {
0163     Q_D(GsmSetting);
0164 
0165     d->pin = pin;
0166 }
0167 
0168 QString NetworkManager::GsmSetting::pin() const
0169 {
0170     Q_D(const GsmSetting);
0171 
0172     return d->pin;
0173 }
0174 
0175 void NetworkManager::GsmSetting::setPinFlags(GsmSetting::SecretFlags flags)
0176 {
0177     Q_D(GsmSetting);
0178 
0179     d->pinFlags = flags;
0180 }
0181 
0182 NetworkManager::GsmSetting::SecretFlags NetworkManager::GsmSetting::pinFlags() const
0183 {
0184     Q_D(const GsmSetting);
0185 
0186     return d->pinFlags;
0187 }
0188 
0189 void NetworkManager::GsmSetting::setAllowedBand(quint32 band)
0190 {
0191     Q_D(GsmSetting);
0192 
0193     d->allowedBand = band;
0194 }
0195 
0196 quint32 NetworkManager::GsmSetting::allowedBand() const
0197 {
0198     Q_D(const GsmSetting);
0199 
0200     return d->allowedBand;
0201 }
0202 
0203 void NetworkManager::GsmSetting::setHomeOnly(bool homeOnly)
0204 {
0205     Q_D(GsmSetting);
0206 
0207     d->homeOnly = homeOnly;
0208 }
0209 
0210 bool NetworkManager::GsmSetting::homeOnly() const
0211 {
0212     Q_D(const GsmSetting);
0213 
0214     return d->homeOnly;
0215 }
0216 
0217 void NetworkManager::GsmSetting::setDeviceId(const QString &id)
0218 {
0219     Q_D(GsmSetting);
0220 
0221     d->deviceId = id;
0222 }
0223 
0224 QString NetworkManager::GsmSetting::deviceId() const
0225 {
0226     Q_D(const GsmSetting);
0227 
0228     return d->deviceId;
0229 }
0230 
0231 void NetworkManager::GsmSetting::setSimId(const QString &id)
0232 {
0233     Q_D(GsmSetting);
0234 
0235     d->simId = id;
0236 }
0237 
0238 QString NetworkManager::GsmSetting::simId() const
0239 {
0240     Q_D(const GsmSetting);
0241 
0242     return d->simId;
0243 }
0244 
0245 void NetworkManager::GsmSetting::setSimOperatorId(const QString &id)
0246 {
0247     Q_D(GsmSetting);
0248 
0249     d->simOperatorId = id;
0250 }
0251 
0252 QString NetworkManager::GsmSetting::simOperatorId() const
0253 {
0254     Q_D(const GsmSetting);
0255 
0256     return d->simOperatorId;
0257 }
0258 
0259 void NetworkManager::GsmSetting::secretsFromMap(const QVariantMap &secrets)
0260 {
0261     if (secrets.contains(QLatin1String(NM_SETTING_GSM_PASSWORD))) {
0262         setPassword(secrets.value(QLatin1String(NM_SETTING_GSM_PASSWORD)).toString());
0263     }
0264 
0265     if (secrets.contains(QLatin1String(NM_SETTING_GSM_PIN))) {
0266         setPin(secrets.value(QLatin1String(NM_SETTING_GSM_PIN)).toString());
0267     }
0268 }
0269 
0270 QVariantMap NetworkManager::GsmSetting::secretsToMap() const
0271 {
0272     QVariantMap secrets;
0273 
0274     if (!password().isEmpty()) {
0275         secrets.insert(QLatin1String(NM_SETTING_GSM_PASSWORD), password());
0276     }
0277 
0278     if (!pin().isEmpty()) {
0279         secrets.insert(QLatin1String(NM_SETTING_GSM_PIN), pin());
0280     }
0281 
0282     return secrets;
0283 }
0284 
0285 QStringList NetworkManager::GsmSetting::needSecrets(bool requestNew) const
0286 {
0287     QStringList list;
0288 
0289     if ((password().isEmpty() || requestNew) && !passwordFlags().testFlag(NotRequired)) {
0290         list << QLatin1String(NM_SETTING_GSM_PASSWORD);
0291     }
0292 
0293     if ((pin().isEmpty() || requestNew) && !pinFlags().testFlag(NotRequired)) {
0294         list << QLatin1String(NM_SETTING_GSM_PIN);
0295     }
0296 
0297     return list;
0298 }
0299 
0300 void NetworkManager::GsmSetting::fromMap(const QVariantMap &setting)
0301 {
0302     if (setting.contains(QLatin1String(NM_SETTING_GSM_NUMBER))) {
0303         setNumber(setting.value(QLatin1String(NM_SETTING_GSM_NUMBER)).toString());
0304     }
0305 
0306     if (setting.contains(QLatin1String(NM_SETTING_GSM_USERNAME))) {
0307         setUsername(setting.value(QLatin1String(NM_SETTING_GSM_USERNAME)).toString());
0308     }
0309 
0310     // Secrets
0311     if (setting.contains(QLatin1String(NM_SETTING_GSM_PASSWORD))) {
0312         setPassword(setting.value(QLatin1String(NM_SETTING_GSM_PASSWORD)).toString());
0313     }
0314 
0315     if (setting.contains(QLatin1String(NM_SETTING_GSM_PASSWORD_FLAGS))) {
0316         setPasswordFlags((SecretFlags)setting.value(QLatin1String(NM_SETTING_GSM_PASSWORD_FLAGS)).toInt());
0317     }
0318 
0319     if (setting.contains(QLatin1String(NM_SETTING_GSM_APN))) {
0320         setApn(setting.value(QLatin1String(NM_SETTING_GSM_APN)).toString());
0321     }
0322 
0323     if (setting.contains(QLatin1String(NM_SETTING_GSM_NETWORK_ID))) {
0324         setNetworkId(setting.value(QLatin1String(NM_SETTING_GSM_NETWORK_ID)).toString());
0325     }
0326 
0327     if (setting.contains(QLatin1String(NM_SETTING_GSM_NETWORK_TYPE))) {
0328         setNetworkType((NetworkType)setting.value(QLatin1String(NM_SETTING_GSM_NETWORK_TYPE)).toInt());
0329     }
0330 
0331     // Secrets
0332     if (setting.contains(QLatin1String(NM_SETTING_GSM_PIN))) {
0333         setPin(setting.value(QLatin1String(NM_SETTING_GSM_PIN)).toString());
0334     }
0335 
0336     if (setting.contains(QLatin1String(NM_SETTING_GSM_PIN_FLAGS))) {
0337         setPinFlags((SecretFlags)setting.value(QLatin1String(NM_SETTING_GSM_PIN_FLAGS)).toInt());
0338     }
0339 
0340     if (setting.contains(QLatin1String(NM_SETTING_GSM_ALLOWED_BANDS))) {
0341         setAllowedBand(setting.value(QLatin1String(NM_SETTING_GSM_ALLOWED_BANDS)).toUInt());
0342     }
0343 
0344     if (setting.contains(QLatin1String(NM_SETTING_GSM_HOME_ONLY))) {
0345         setHomeOnly(setting.value(QLatin1String(NM_SETTING_GSM_HOME_ONLY)).toBool());
0346     }
0347 
0348     if (setting.contains(QLatin1String(NM_SETTING_GSM_DEVICE_ID))) {
0349         setDeviceId(setting.value(QLatin1String(NM_SETTING_GSM_DEVICE_ID)).toString());
0350     }
0351 
0352     if (setting.contains(QLatin1String(NM_SETTING_GSM_SIM_ID))) {
0353         setSimId(setting.value(QLatin1String(NM_SETTING_GSM_SIM_ID)).toString());
0354     }
0355 
0356     if (setting.contains(QLatin1String(NM_SETTING_GSM_SIM_OPERATOR_ID))) {
0357         setSimOperatorId(setting.value(QLatin1String(NM_SETTING_GSM_SIM_OPERATOR_ID)).toString());
0358     }
0359 }
0360 
0361 QVariantMap NetworkManager::GsmSetting::toMap() const
0362 {
0363     QVariantMap setting;
0364 
0365     if (!number().isEmpty()) {
0366         setting.insert(QLatin1String(NM_SETTING_GSM_NUMBER), number());
0367     }
0368 
0369     if (!username().isEmpty()) {
0370         setting.insert(QLatin1String(NM_SETTING_GSM_USERNAME), username());
0371     }
0372 
0373     // Secrets
0374     if (!password().isEmpty()) {
0375         setting.insert(QLatin1String(NM_SETTING_GSM_PASSWORD), password());
0376     }
0377 
0378     setting.insert(QLatin1String(NM_SETTING_GSM_PASSWORD_FLAGS), (int)passwordFlags());
0379 
0380     if (!apn().isEmpty()) {
0381         setting.insert(QLatin1String(NM_SETTING_GSM_APN), apn());
0382     }
0383 
0384     if (!networkId().isEmpty()) {
0385         setting.insert(QLatin1String(NM_SETTING_GSM_NETWORK_ID), networkId());
0386     }
0387 
0388     if (networkType() != -1) {
0389         setting.insert(QLatin1String(NM_SETTING_GSM_NETWORK_TYPE), networkType());
0390     }
0391     // Secrets
0392     if (!pin().isEmpty()) {
0393         setting.insert(QLatin1String(NM_SETTING_GSM_PIN), pin());
0394     }
0395 
0396     setting.insert(QLatin1String(NM_SETTING_GSM_PIN_FLAGS), (int)pinFlags());
0397 
0398     if (allowedBand() != 1) {
0399         setting.insert(QLatin1String(NM_SETTING_GSM_ALLOWED_BANDS), allowedBand());
0400     }
0401     if (homeOnly()) {
0402         setting.insert(QLatin1String(NM_SETTING_GSM_HOME_ONLY), homeOnly());
0403     }
0404 
0405     if (!deviceId().isEmpty()) {
0406         setting.insert(QLatin1String(NM_SETTING_GSM_DEVICE_ID), deviceId());
0407     }
0408 
0409     if (!simId().isEmpty()) {
0410         setting.insert(QLatin1String(NM_SETTING_GSM_SIM_ID), simId());
0411     }
0412 
0413     if (!simOperatorId().isEmpty()) {
0414         setting.insert(QLatin1String(NM_SETTING_GSM_SIM_OPERATOR_ID), simOperatorId());
0415     }
0416 
0417     return setting;
0418 }
0419 
0420 QDebug NetworkManager::operator<<(QDebug dbg, const NetworkManager::GsmSetting &setting)
0421 {
0422     dbg.nospace() << "type: " << setting.typeAsString(setting.type()) << '\n';
0423     dbg.nospace() << "initialized: " << !setting.isNull() << '\n';
0424 
0425     dbg.nospace() << NM_SETTING_GSM_NUMBER << ": " << setting.number() << '\n';
0426     dbg.nospace() << NM_SETTING_GSM_USERNAME << ": " << setting.username() << '\n';
0427     dbg.nospace() << NM_SETTING_GSM_PASSWORD << ": " << setting.password() << '\n';
0428     dbg.nospace() << NM_SETTING_GSM_PASSWORD_FLAGS << ": " << setting.passwordFlags() << '\n';
0429     dbg.nospace() << NM_SETTING_GSM_APN << ": " << setting.apn() << '\n';
0430     dbg.nospace() << NM_SETTING_GSM_NETWORK_ID << ": " << setting.networkId() << '\n';
0431     dbg.nospace() << NM_SETTING_GSM_NETWORK_TYPE << ": " << setting.networkType() << '\n';
0432     dbg.nospace() << NM_SETTING_GSM_ALLOWED_BANDS << ": " << setting.allowedBand() << '\n';
0433     dbg.nospace() << NM_SETTING_GSM_PIN << ": " << setting.pin() << '\n';
0434     dbg.nospace() << NM_SETTING_GSM_PIN_FLAGS << ": " << setting.pinFlags() << '\n';
0435     dbg.nospace() << NM_SETTING_GSM_HOME_ONLY << ": " << setting.homeOnly() << '\n';
0436     dbg.nospace() << NM_SETTING_GSM_DEVICE_ID << ": " << setting.deviceId() << '\n';
0437     dbg.nospace() << NM_SETTING_GSM_SIM_ID << ": " << setting.simId() << '\n';
0438     dbg.nospace() << NM_SETTING_GSM_SIM_OPERATOR_ID << ": " << setting.simOperatorId() << '\n';
0439 
0440     return dbg.maybeSpace();
0441 }