File indexing completed on 2024-04-28 15:33:19
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 "wirelesssetting.h" 0008 #include "wirelesssetting_p.h" 0009 0010 #include "utils.h" 0011 0012 // define the deprecated&dropped values 0013 #define NM_SETTING_WIRELESS_SEC "security" 0014 #define NM_SETTING_WIRELESS_ASSIGNED_MAC_ADDRESS "assigned-mac-address" 0015 0016 #include <QDebug> 0017 0018 NetworkManager::WirelessSettingPrivate::WirelessSettingPrivate() 0019 : name(NM_SETTING_WIRELESS_SETTING_NAME) 0020 , mode(NetworkManager::WirelessSetting::Infrastructure) 0021 , band(NetworkManager::WirelessSetting::Automatic) 0022 , channel(0) 0023 , rate(0) 0024 , txPower(0) 0025 , mtu(0) 0026 , hidden(false) 0027 , macAddressRandomization(NetworkManager::Setting::MacAddressRandomizationDefault) 0028 , powersave(NetworkManager::WirelessSetting::PowerSaveDefault) 0029 { 0030 } 0031 0032 NetworkManager::WirelessSetting::WirelessSetting() 0033 : Setting(Setting::Wireless) 0034 , d_ptr(new WirelessSettingPrivate()) 0035 { 0036 } 0037 0038 NetworkManager::WirelessSetting::WirelessSetting(const Ptr &setting) 0039 : Setting(setting) 0040 , d_ptr(new WirelessSettingPrivate) 0041 { 0042 setSsid(setting->ssid()); 0043 setMode(setting->mode()); 0044 setBand(setting->band()); 0045 setChannel(setting->channel()); 0046 setBssid(setting->bssid()); 0047 setRate(setting->rate()); 0048 setTxPower(setting->txPower()); 0049 setMacAddress(setting->macAddress()); 0050 setGenerateMacAddressMask(setting->generateMacAddressMask()); 0051 setClonedMacAddress(setting->clonedMacAddress()); 0052 setMacAddressBlacklist(setting->macAddressBlacklist()); 0053 setMacAddressRandomization(setting->macAddressRandomization()); 0054 setMtu(setting->mtu()); 0055 setSeenBssids(setting->seenBssids()); 0056 setPowerSave(setting->powerSave()); 0057 setSecurity(setting->security()); 0058 setHidden(setting->hidden()); 0059 setAssignedMacAddress(setting->assignedMacAddress()); 0060 } 0061 0062 NetworkManager::WirelessSetting::~WirelessSetting() 0063 { 0064 delete d_ptr; 0065 } 0066 0067 QString NetworkManager::WirelessSetting::name() const 0068 { 0069 Q_D(const WirelessSetting); 0070 0071 return d->name; 0072 } 0073 0074 void NetworkManager::WirelessSetting::setSsid(const QByteArray &ssid) 0075 { 0076 Q_D(WirelessSetting); 0077 0078 d->ssid = ssid; 0079 } 0080 0081 QByteArray NetworkManager::WirelessSetting::ssid() const 0082 { 0083 Q_D(const WirelessSetting); 0084 0085 return d->ssid; 0086 } 0087 0088 void NetworkManager::WirelessSetting::setMode(NetworkManager::WirelessSetting::NetworkMode mode) 0089 { 0090 Q_D(WirelessSetting); 0091 0092 d->mode = mode; 0093 } 0094 0095 NetworkManager::WirelessSetting::NetworkMode NetworkManager::WirelessSetting::mode() const 0096 { 0097 Q_D(const WirelessSetting); 0098 0099 return d->mode; 0100 } 0101 0102 void NetworkManager::WirelessSetting::setBand(NetworkManager::WirelessSetting::FrequencyBand band) 0103 { 0104 Q_D(WirelessSetting); 0105 0106 d->band = band; 0107 } 0108 0109 NetworkManager::WirelessSetting::FrequencyBand NetworkManager::WirelessSetting::band() const 0110 { 0111 Q_D(const WirelessSetting); 0112 0113 return d->band; 0114 } 0115 0116 void NetworkManager::WirelessSetting::setChannel(quint32 channel) 0117 { 0118 Q_D(WirelessSetting); 0119 0120 d->channel = channel; 0121 } 0122 0123 quint32 NetworkManager::WirelessSetting::channel() const 0124 { 0125 Q_D(const WirelessSetting); 0126 0127 return d->channel; 0128 } 0129 0130 void NetworkManager::WirelessSetting::setBssid(const QByteArray &bssid) 0131 { 0132 Q_D(WirelessSetting); 0133 0134 d->bssid = bssid; 0135 } 0136 0137 QByteArray NetworkManager::WirelessSetting::bssid() const 0138 { 0139 Q_D(const WirelessSetting); 0140 0141 return d->bssid; 0142 } 0143 0144 void NetworkManager::WirelessSetting::setRate(quint32 rate) 0145 { 0146 Q_D(WirelessSetting); 0147 0148 d->rate = rate; 0149 } 0150 0151 quint32 NetworkManager::WirelessSetting::rate() const 0152 { 0153 Q_D(const WirelessSetting); 0154 0155 return d->rate; 0156 } 0157 0158 void NetworkManager::WirelessSetting::setTxPower(quint32 power) 0159 { 0160 Q_D(WirelessSetting); 0161 0162 d->txPower = power; 0163 } 0164 0165 quint32 NetworkManager::WirelessSetting::txPower() const 0166 { 0167 Q_D(const WirelessSetting); 0168 0169 return d->txPower; 0170 } 0171 0172 void NetworkManager::WirelessSetting::setAssignedMacAddress(const QString &assignedMacAddress) 0173 { 0174 Q_D(WirelessSetting); 0175 0176 d->assignedMacAddress = assignedMacAddress; 0177 } 0178 0179 QString NetworkManager::WirelessSetting::assignedMacAddress() const 0180 { 0181 Q_D(const WirelessSetting); 0182 0183 return d->assignedMacAddress; 0184 } 0185 0186 void NetworkManager::WirelessSetting::setMacAddress(const QByteArray &address) 0187 { 0188 Q_D(WirelessSetting); 0189 0190 d->macAddress = address; 0191 } 0192 0193 QByteArray NetworkManager::WirelessSetting::macAddress() const 0194 { 0195 Q_D(const WirelessSetting); 0196 0197 return d->macAddress; 0198 } 0199 0200 void NetworkManager::WirelessSetting::setClonedMacAddress(const QByteArray &address) 0201 { 0202 Q_D(WirelessSetting); 0203 0204 d->assignedMacAddress = NetworkManager::macAddressAsString(address); 0205 } 0206 0207 QByteArray NetworkManager::WirelessSetting::clonedMacAddress() const 0208 { 0209 Q_D(const WirelessSetting); 0210 0211 return NetworkManager::macAddressFromString(d->assignedMacAddress.toUtf8()); 0212 } 0213 0214 void NetworkManager::WirelessSetting::setGenerateMacAddressMask(const QString &macAddressMask) 0215 { 0216 Q_D(WirelessSetting); 0217 0218 d->generateMacAddressMask = macAddressMask; 0219 } 0220 0221 QString NetworkManager::WirelessSetting::generateMacAddressMask() const 0222 { 0223 Q_D(const WirelessSetting); 0224 0225 return d->generateMacAddressMask; 0226 } 0227 0228 void NetworkManager::WirelessSetting::setMacAddressBlacklist(const QStringList &list) 0229 { 0230 Q_D(WirelessSetting); 0231 0232 d->macAddressBlacklist = list; 0233 } 0234 0235 QStringList NetworkManager::WirelessSetting::macAddressBlacklist() const 0236 { 0237 Q_D(const WirelessSetting); 0238 0239 return d->macAddressBlacklist; 0240 } 0241 0242 void NetworkManager::WirelessSetting::setMacAddressRandomization(NetworkManager::Setting::MacAddressRandomization randomization) 0243 { 0244 Q_D(WirelessSetting); 0245 0246 d->macAddressRandomization = randomization; 0247 } 0248 0249 NetworkManager::Setting::MacAddressRandomization NetworkManager::WirelessSetting::macAddressRandomization() const 0250 { 0251 Q_D(const WirelessSetting); 0252 0253 return d->macAddressRandomization; 0254 } 0255 0256 void NetworkManager::WirelessSetting::setMtu(quint32 mtu) 0257 { 0258 Q_D(WirelessSetting); 0259 0260 d->mtu = mtu; 0261 } 0262 0263 quint32 NetworkManager::WirelessSetting::mtu() const 0264 { 0265 Q_D(const WirelessSetting); 0266 0267 return d->mtu; 0268 } 0269 0270 void NetworkManager::WirelessSetting::setSeenBssids(const QStringList &list) 0271 { 0272 Q_D(WirelessSetting); 0273 0274 d->seenBssids = list; 0275 } 0276 0277 QStringList NetworkManager::WirelessSetting::seenBssids() const 0278 { 0279 Q_D(const WirelessSetting); 0280 0281 return d->seenBssids; 0282 } 0283 0284 void NetworkManager::WirelessSetting::setPowerSave(NetworkManager::WirelessSetting::PowerSave powersave) 0285 { 0286 Q_D(WirelessSetting); 0287 0288 d->powersave = powersave; 0289 } 0290 0291 NetworkManager::WirelessSetting::PowerSave NetworkManager::WirelessSetting::powerSave() const 0292 { 0293 Q_D(const WirelessSetting); 0294 0295 return d->powersave; 0296 } 0297 0298 void NetworkManager::WirelessSetting::setSecurity(const QString &security) 0299 { 0300 Q_D(WirelessSetting); 0301 0302 d->security = security; 0303 } 0304 0305 QString NetworkManager::WirelessSetting::security() const 0306 { 0307 Q_D(const WirelessSetting); 0308 0309 return d->security; 0310 } 0311 0312 void NetworkManager::WirelessSetting::setHidden(bool hidden) 0313 { 0314 Q_D(WirelessSetting); 0315 0316 d->hidden = hidden; 0317 } 0318 0319 bool NetworkManager::WirelessSetting::hidden() const 0320 { 0321 Q_D(const WirelessSetting); 0322 0323 return d->hidden; 0324 } 0325 0326 void NetworkManager::WirelessSetting::fromMap(const QVariantMap &setting) 0327 { 0328 if (setting.contains(QLatin1String(NM_SETTING_WIRELESS_SSID))) { 0329 setSsid(setting.value(QLatin1String(NM_SETTING_WIRELESS_SSID)).toByteArray()); 0330 } 0331 0332 if (setting.contains(QLatin1String(NM_SETTING_WIRELESS_MODE))) { 0333 const QString mode = setting.value(QLatin1String(NM_SETTING_WIRELESS_MODE)).toString(); 0334 if (mode == QLatin1String(NM_SETTING_WIRELESS_MODE_INFRA)) { 0335 setMode(Infrastructure); 0336 } else if (mode == QLatin1String(NM_SETTING_WIRELESS_MODE_ADHOC)) { 0337 setMode(Adhoc); 0338 } else if (mode == QLatin1String(NM_SETTING_WIRELESS_MODE_AP)) { 0339 setMode(Ap); 0340 } 0341 } 0342 0343 if (setting.contains(QLatin1String(NM_SETTING_WIRELESS_BAND))) { 0344 const QString band = setting.value(QLatin1String(NM_SETTING_WIRELESS_BAND)).toString(); 0345 if (band == "a") { 0346 setBand(A); 0347 } else if (band == "bg") { 0348 setBand(Bg); 0349 } 0350 } 0351 0352 if (setting.contains(QLatin1String(NM_SETTING_WIRELESS_CHANNEL))) { 0353 setChannel(setting.value(QLatin1String(NM_SETTING_WIRELESS_CHANNEL)).toUInt()); 0354 } 0355 0356 if (setting.contains(QLatin1String(NM_SETTING_WIRELESS_BSSID))) { 0357 setBssid(setting.value(QLatin1String(NM_SETTING_WIRELESS_BSSID)).toByteArray()); 0358 } 0359 0360 if (setting.contains(QLatin1String(NM_SETTING_WIRELESS_RATE))) { 0361 setRate(setting.value(QLatin1String(NM_SETTING_WIRELESS_RATE)).toUInt()); 0362 } 0363 0364 if (setting.contains(QLatin1String(NM_SETTING_WIRELESS_TX_POWER))) { 0365 setTxPower(setting.value(QLatin1String(NM_SETTING_WIRELESS_TX_POWER)).toUInt()); 0366 } 0367 0368 if (setting.contains(QLatin1String(NM_SETTING_WIRELESS_ASSIGNED_MAC_ADDRESS))) { 0369 setAssignedMacAddress(setting.value(QLatin1String(NM_SETTING_WIRELESS_ASSIGNED_MAC_ADDRESS)).toString()); 0370 } 0371 0372 if (setting.contains(QLatin1String(NM_SETTING_WIRELESS_MAC_ADDRESS))) { 0373 setMacAddress(setting.value(QLatin1String(NM_SETTING_WIRELESS_MAC_ADDRESS)).toByteArray()); 0374 } 0375 0376 if (setting.contains(QLatin1String(NM_SETTING_WIRELESS_GENERATE_MAC_ADDRESS_MASK))) { 0377 setGenerateMacAddressMask(setting.value(QLatin1String(NM_SETTING_WIRELESS_GENERATE_MAC_ADDRESS_MASK)).toString()); 0378 } 0379 0380 if (setting.contains(QLatin1String(NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS))) { 0381 setClonedMacAddress(setting.value(QLatin1String(NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS)).toByteArray()); 0382 } 0383 0384 if (setting.contains(QLatin1String(NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST))) { 0385 setMacAddressBlacklist(setting.value(QLatin1String(NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST)).toStringList()); 0386 } 0387 0388 if (setting.contains(QLatin1String(NM_SETTING_WIRELESS_MAC_ADDRESS_RANDOMIZATION))) { 0389 setMacAddressRandomization( 0390 static_cast<Setting::MacAddressRandomization>(setting.value(QLatin1String(NM_SETTING_WIRELESS_MAC_ADDRESS_RANDOMIZATION)).toUInt())); 0391 } 0392 0393 if (setting.contains(QLatin1String(NM_SETTING_WIRELESS_MTU))) { 0394 setMtu(setting.value(QLatin1String(NM_SETTING_WIRELESS_MTU)).toUInt()); 0395 } 0396 0397 if (setting.contains(QLatin1String(NM_SETTING_WIRELESS_SEEN_BSSIDS))) { 0398 setSeenBssids(setting.value(QLatin1String(NM_SETTING_WIRELESS_SEEN_BSSIDS)).toStringList()); 0399 } 0400 0401 if (setting.contains(QLatin1String(NM_SETTING_WIRELESS_POWERSAVE))) { 0402 setPowerSave(static_cast<WirelessSetting::PowerSave>(setting.value(QLatin1String(NM_SETTING_WIRELESS_POWERSAVE)).toUInt())); 0403 } 0404 0405 if (setting.contains(QLatin1String(NM_SETTING_WIRELESS_SEC))) { 0406 setSecurity(setting.value(QLatin1String(NM_SETTING_WIRELESS_SEC)).toString()); 0407 } 0408 0409 if (setting.contains(QLatin1String(NM_SETTING_WIRELESS_HIDDEN))) { 0410 setHidden(setting.value(QLatin1String(NM_SETTING_WIRELESS_HIDDEN)).toBool()); 0411 } 0412 } 0413 0414 QVariantMap NetworkManager::WirelessSetting::toMap() const 0415 { 0416 QVariantMap setting; 0417 0418 if (!ssid().isEmpty()) { 0419 setting.insert(QLatin1String(NM_SETTING_WIRELESS_SSID), ssid()); 0420 } 0421 0422 if (mode() == Infrastructure) { 0423 setting.insert(QLatin1String(NM_SETTING_WIRELESS_MODE), QLatin1String(NM_SETTING_WIRELESS_MODE_INFRA)); 0424 } else if (mode() == Adhoc) { 0425 setting.insert(QLatin1String(NM_SETTING_WIRELESS_MODE), QLatin1String(NM_SETTING_WIRELESS_MODE_ADHOC)); 0426 } else if (mode() == Ap) { 0427 setting.insert(QLatin1String(NM_SETTING_WIRELESS_MODE), QLatin1String(NM_SETTING_WIRELESS_MODE_AP)); 0428 } 0429 0430 if (band() != Automatic) { 0431 if (band() == A) { 0432 setting.insert(QLatin1String(NM_SETTING_WIRELESS_BAND), "a"); 0433 } else if (band() == Bg) { 0434 setting.insert(QLatin1String(NM_SETTING_WIRELESS_BAND), "bg"); 0435 } 0436 } 0437 0438 if (channel()) { 0439 setting.insert(QLatin1String(NM_SETTING_WIRELESS_CHANNEL), channel()); 0440 } 0441 0442 if (!bssid().isEmpty()) { 0443 setting.insert(QLatin1String(NM_SETTING_WIRELESS_BSSID), bssid()); 0444 } 0445 0446 if (rate()) { 0447 setting.insert(QLatin1String(NM_SETTING_WIRELESS_RATE), rate()); 0448 } 0449 0450 if (txPower()) { 0451 setting.insert(QLatin1String(NM_SETTING_WIRELESS_TX_POWER), txPower()); 0452 } 0453 0454 if (!assignedMacAddress().isEmpty()) { 0455 setting.insert(QLatin1String(NM_SETTING_WIRELESS_ASSIGNED_MAC_ADDRESS), assignedMacAddress()); 0456 } 0457 0458 if (!macAddress().isEmpty()) { 0459 setting.insert(QLatin1String(NM_SETTING_WIRELESS_MAC_ADDRESS), macAddress()); 0460 } 0461 0462 if (!generateMacAddressMask().isEmpty()) { 0463 setting.insert(QLatin1String(NM_SETTING_WIRELESS_GENERATE_MAC_ADDRESS_MASK), generateMacAddressMask()); 0464 } 0465 0466 if (!macAddressBlacklist().isEmpty()) { 0467 setting.insert(QLatin1String(NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST), macAddressBlacklist()); 0468 } 0469 0470 setting.insert(QLatin1String(NM_SETTING_WIRELESS_MAC_ADDRESS_RANDOMIZATION), macAddressRandomization()); 0471 0472 if (mtu()) { 0473 setting.insert(QLatin1String(NM_SETTING_WIRELESS_MTU), mtu()); 0474 } 0475 0476 if (!seenBssids().isEmpty()) { 0477 setting.insert(QLatin1String(NM_SETTING_WIRELESS_SEEN_BSSIDS), seenBssids()); 0478 } 0479 0480 setting.insert(QLatin1String(NM_SETTING_WIRELESS_POWERSAVE), powerSave()); 0481 0482 if (!security().isEmpty()) { 0483 setting.insert(QLatin1String(NM_SETTING_WIRELESS_SEC), security()); 0484 } 0485 0486 if (hidden()) { 0487 setting.insert(QLatin1String(NM_SETTING_WIRELESS_HIDDEN), hidden()); 0488 } 0489 0490 return setting; 0491 } 0492 0493 QDebug NetworkManager::operator<<(QDebug dbg, const NetworkManager::WirelessSetting &setting) 0494 { 0495 dbg.nospace() << "type: " << setting.typeAsString(setting.type()) << '\n'; 0496 dbg.nospace() << "initialized: " << !setting.isNull() << '\n'; 0497 0498 dbg.nospace() << NM_SETTING_WIRELESS_SSID << ": " << setting.ssid() << '\n'; 0499 dbg.nospace() << NM_SETTING_WIRELESS_MODE << ": " << setting.mode() << '\n'; 0500 dbg.nospace() << NM_SETTING_WIRELESS_BAND << ": " << setting.band() << '\n'; 0501 dbg.nospace() << NM_SETTING_WIRELESS_CHANNEL << ": " << setting.channel() << '\n'; 0502 dbg.nospace() << NM_SETTING_WIRELESS_BSSID << ": " << setting.bssid() << '\n'; 0503 dbg.nospace() << NM_SETTING_WIRELESS_RATE << ": " << setting.rate() << '\n'; 0504 dbg.nospace() << NM_SETTING_WIRELESS_TX_POWER << ": " << setting.txPower() << '\n'; 0505 dbg.nospace() << NM_SETTING_WIRELESS_ASSIGNED_MAC_ADDRESS << ": " << setting.assignedMacAddress() << '\n'; 0506 dbg.nospace() << NM_SETTING_WIRELESS_MAC_ADDRESS << ": " << setting.macAddress() << '\n'; 0507 dbg.nospace() << NM_SETTING_WIRELESS_GENERATE_MAC_ADDRESS_MASK << ": " << setting.generateMacAddressMask() << '\n'; 0508 dbg.nospace() << NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST << ": " << setting.macAddressBlacklist() << '\n'; 0509 dbg.nospace() << NM_SETTING_WIRELESS_MAC_ADDRESS_RANDOMIZATION << ": " << setting.macAddressRandomization() << '\n'; 0510 dbg.nospace() << NM_SETTING_WIRELESS_MTU << ": " << setting.mtu() << '\n'; 0511 dbg.nospace() << NM_SETTING_WIRELESS_SEEN_BSSIDS << ": " << setting.seenBssids() << '\n'; 0512 dbg.nospace() << NM_SETTING_WIRELESS_POWERSAVE << ": " << setting.powerSave() << '\n'; 0513 dbg.nospace() << NM_SETTING_WIRELESS_SEC << ": " << setting.security() << '\n'; 0514 dbg.nospace() << NM_SETTING_WIRELESS_HIDDEN << ": " << setting.hidden() << '\n'; 0515 0516 return dbg.maybeSpace(); 0517 }