File indexing completed on 2024-04-21 04:00:00

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 "adslsetting.h"
0008 #include "adslsetting_p.h"
0009 #include <manager.h>
0010 
0011 #include <QDebug>
0012 
0013 NetworkManager::AdslSettingPrivate::AdslSettingPrivate()
0014     : name(NM_SETTING_ADSL_SETTING_NAME)
0015     , passwordFlags(Setting::None)
0016     , protocol(AdslSetting::UnknownProtocol)
0017     , encapsulation(AdslSetting::UnknownEncapsulation)
0018     , vpi(0)
0019     , vci(0)
0020 {
0021 }
0022 
0023 NetworkManager::AdslSetting::AdslSetting()
0024     : Setting(Setting::Adsl)
0025     , d_ptr(new AdslSettingPrivate())
0026 {
0027 }
0028 
0029 NetworkManager::AdslSetting::AdslSetting(const AdslSetting::Ptr &other)
0030     : Setting(other)
0031     , d_ptr(new AdslSettingPrivate())
0032 {
0033     setUsername(other->username());
0034     setPassword(other->password());
0035     setProtocol(other->protocol());
0036     setPasswordFlags(other->passwordFlags());
0037     setProtocol(other->protocol());
0038     setEncapsulation(other->encapsulation());
0039     setVpi(other->vpi());
0040     setVci(other->vci());
0041 }
0042 
0043 NetworkManager::AdslSetting::~AdslSetting()
0044 {
0045     delete d_ptr;
0046 }
0047 
0048 QString NetworkManager::AdslSetting::name() const
0049 {
0050     Q_D(const AdslSetting);
0051 
0052     return d->name;
0053 }
0054 
0055 void NetworkManager::AdslSetting::setUsername(const QString &username)
0056 {
0057     Q_D(AdslSetting);
0058 
0059     d->username = username;
0060 }
0061 
0062 QString NetworkManager::AdslSetting::username() const
0063 {
0064     Q_D(const AdslSetting);
0065 
0066     return d->username;
0067 }
0068 
0069 void NetworkManager::AdslSetting::setPassword(const QString &password)
0070 {
0071     Q_D(AdslSetting);
0072 
0073     d->password = password;
0074 }
0075 
0076 QString NetworkManager::AdslSetting::password() const
0077 {
0078     Q_D(const AdslSetting);
0079 
0080     return d->password;
0081 }
0082 
0083 void NetworkManager::AdslSetting::setPasswordFlags(NetworkManager::Setting::SecretFlags flags)
0084 {
0085     Q_D(AdslSetting);
0086 
0087     d->passwordFlags = flags;
0088 }
0089 
0090 NetworkManager::Setting::SecretFlags NetworkManager::AdslSetting::passwordFlags() const
0091 {
0092     Q_D(const AdslSetting);
0093 
0094     return d->passwordFlags;
0095 }
0096 
0097 void NetworkManager::AdslSetting::setProtocol(NetworkManager::AdslSetting::Protocol protocol)
0098 {
0099     Q_D(AdslSetting);
0100 
0101     d->protocol = protocol;
0102 }
0103 
0104 NetworkManager::AdslSetting::Protocol NetworkManager::AdslSetting::protocol() const
0105 {
0106     Q_D(const AdslSetting);
0107 
0108     return d->protocol;
0109 }
0110 
0111 void NetworkManager::AdslSetting::setEncapsulation(NetworkManager::AdslSetting::Encapsulation encapsulation)
0112 {
0113     Q_D(AdslSetting);
0114 
0115     d->encapsulation = encapsulation;
0116 }
0117 
0118 NetworkManager::AdslSetting::Encapsulation NetworkManager::AdslSetting::encapsulation() const
0119 {
0120     Q_D(const AdslSetting);
0121 
0122     return d->encapsulation;
0123 }
0124 
0125 void NetworkManager::AdslSetting::setVpi(quint32 vpi)
0126 {
0127     Q_D(AdslSetting);
0128 
0129     d->vpi = vpi;
0130 }
0131 
0132 quint32 NetworkManager::AdslSetting::vpi() const
0133 {
0134     Q_D(const AdslSetting);
0135 
0136     return d->vpi;
0137 }
0138 
0139 void NetworkManager::AdslSetting::setVci(quint32 vci)
0140 {
0141     Q_D(AdslSetting);
0142 
0143     d->vci = vci;
0144 }
0145 
0146 quint32 NetworkManager::AdslSetting::vci() const
0147 {
0148     Q_D(const AdslSetting);
0149 
0150     return d->vci;
0151 }
0152 
0153 QStringList NetworkManager::AdslSetting::needSecrets(bool requestNew) const
0154 {
0155     QStringList secrets;
0156 
0157     if ((password().isEmpty() || requestNew) && !passwordFlags().testFlag(NotRequired)) {
0158         secrets << QLatin1String(NM_SETTING_ADSL_PASSWORD);
0159     }
0160 
0161     return secrets;
0162 }
0163 
0164 void NetworkManager::AdslSetting::fromMap(const QVariantMap &setting)
0165 {
0166     if (setting.contains(QLatin1String(NM_SETTING_ADSL_USERNAME))) {
0167         setUsername(setting.value(QLatin1String(NM_SETTING_ADSL_USERNAME)).toString());
0168     }
0169 
0170     if (setting.contains(QLatin1String(NM_SETTING_ADSL_PASSWORD))) {
0171         setPassword(setting.value(QLatin1String(NM_SETTING_ADSL_PASSWORD)).toString());
0172     }
0173 
0174     if (setting.contains(QLatin1String(NM_SETTING_ADSL_PASSWORD_FLAGS))) {
0175         setPasswordFlags((Setting::SecretFlags)setting.value(QLatin1String(NM_SETTING_ADSL_PASSWORD_FLAGS)).toInt());
0176     }
0177 
0178     if (setting.contains(QLatin1String(NM_SETTING_ADSL_PROTOCOL))) {
0179         const QString protocol = setting.value(QLatin1String(NM_SETTING_ADSL_PROTOCOL)).toString();
0180 
0181         if (protocol == QLatin1String(NM_SETTING_ADSL_PROTOCOL_PPPOA)) {
0182             setProtocol(Pppoa);
0183         } else if (protocol == QLatin1String(NM_SETTING_ADSL_PROTOCOL_PPPOE)) {
0184             setProtocol(Pppoe);
0185         } else if (protocol == QLatin1String(NM_SETTING_ADSL_PROTOCOL_IPOATM)) {
0186             setProtocol(Ipoatm);
0187         }
0188     }
0189 
0190     if (setting.contains(QLatin1String(NM_SETTING_ADSL_ENCAPSULATION))) {
0191         const QString encapsulation = setting.value(QLatin1String(NM_SETTING_ADSL_ENCAPSULATION)).toString();
0192 
0193         if (encapsulation == QLatin1String(NM_SETTING_ADSL_ENCAPSULATION_VCMUX)) {
0194             setEncapsulation(Vcmux);
0195         } else if (encapsulation == QLatin1String(NM_SETTING_ADSL_ENCAPSULATION_LLC)) {
0196             setEncapsulation(Llc);
0197         }
0198     }
0199 
0200     if (setting.contains(QLatin1String(NM_SETTING_ADSL_VPI))) {
0201         setVpi(setting.value(QLatin1String(NM_SETTING_ADSL_VPI)).toUInt());
0202     }
0203 
0204     if (setting.contains(QLatin1String(NM_SETTING_ADSL_VCI))) {
0205         setVci(setting.value(QLatin1String(NM_SETTING_ADSL_VCI)).toUInt());
0206     }
0207 }
0208 
0209 QVariantMap NetworkManager::AdslSetting::toMap() const
0210 {
0211     QVariantMap setting;
0212 
0213     if (!username().isEmpty()) {
0214         setting.insert(QLatin1String(NM_SETTING_ADSL_USERNAME), username());
0215     }
0216 
0217     if (!password().isEmpty()) {
0218         setting.insert(QLatin1String(NM_SETTING_ADSL_PASSWORD), password());
0219     }
0220 
0221     if (passwordFlags() != None) {
0222         setting.insert(QLatin1String(NM_SETTING_ADSL_PASSWORD_FLAGS), (int)passwordFlags());
0223     }
0224 
0225     switch (protocol()) {
0226     case Pppoa:
0227         setting.insert(QLatin1String(NM_SETTING_ADSL_PROTOCOL), QLatin1String(NM_SETTING_ADSL_PROTOCOL_PPPOA));
0228         break;
0229     case Pppoe:
0230         setting.insert(QLatin1String(NM_SETTING_ADSL_PROTOCOL), QLatin1String(NM_SETTING_ADSL_PROTOCOL_PPPOE));
0231         break;
0232     case Ipoatm:
0233         setting.insert(QLatin1String(NM_SETTING_ADSL_PROTOCOL), QLatin1String(NM_SETTING_ADSL_PROTOCOL_IPOATM));
0234         break;
0235     case UnknownProtocol:
0236         break;
0237     }
0238 
0239     switch (encapsulation()) {
0240     case Vcmux:
0241         setting.insert(QLatin1String(NM_SETTING_ADSL_ENCAPSULATION), QLatin1String(NM_SETTING_ADSL_ENCAPSULATION_VCMUX));
0242         break;
0243     case Llc:
0244         setting.insert(QLatin1String(NM_SETTING_ADSL_ENCAPSULATION), QLatin1String(NM_SETTING_ADSL_ENCAPSULATION_LLC));
0245         break;
0246     case UnknownEncapsulation:
0247         break;
0248     }
0249 
0250     if (vpi()) {
0251         setting.insert(QLatin1String(NM_SETTING_ADSL_VPI), vpi());
0252     }
0253 
0254     if (vci()) {
0255         setting.insert(QLatin1String(NM_SETTING_ADSL_VCI), vci());
0256     }
0257 
0258     return setting;
0259 }
0260 
0261 QDebug NetworkManager::operator<<(QDebug dbg, const NetworkManager::AdslSetting &setting)
0262 {
0263     dbg.nospace() << "type: " << setting.typeAsString(setting.type()) << '\n';
0264     dbg.nospace() << "initialized: " << !setting.isNull() << '\n';
0265 
0266     dbg.nospace() << NM_SETTING_ADSL_USERNAME << ": " << setting.username() << '\n';
0267     dbg.nospace() << NM_SETTING_ADSL_PASSWORD << ": " << setting.password() << '\n';
0268     dbg.nospace() << NM_SETTING_ADSL_PASSWORD_FLAGS << ": " << setting.passwordFlags() << '\n';
0269     dbg.nospace() << NM_SETTING_ADSL_PROTOCOL << ": " << setting.protocol() << '\n';
0270     dbg.nospace() << NM_SETTING_ADSL_ENCAPSULATION << ": " << setting.encapsulation() << '\n';
0271     dbg.nospace() << NM_SETTING_ADSL_VPI << ": " << setting.vpi() << '\n';
0272     dbg.nospace() << NM_SETTING_ADSL_VCI << ": " << setting.vci() << '\n';
0273 
0274     return dbg.maybeSpace();
0275 }