File indexing completed on 2025-03-16 12:58:22
0001 /* 0002 SPDX-FileCopyrightText: 2008 Will Stephenson <wstephenson@kde.org> 0003 SPDX-FileCopyrightText: 2013 Daniel Nicoletti <dantti12@gmail.com> 0004 SPDX-FileCopyrightText: 2013 Jan Grulich <jgrulich@redhat.com> 0005 0006 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0007 */ 0008 0009 #include "accesspoint_p.h" 0010 #include "manager_p.h" 0011 #include "wirelessdevice.h" 0012 0013 #include "nmdebug.h" 0014 0015 NetworkManager::AccessPointPrivate::AccessPointPrivate(const QString &path, AccessPoint *q) 0016 #ifdef NMQT_STATIC 0017 : iface(NetworkManagerPrivate::DBUS_SERVICE, path, QDBusConnection::sessionBus()) 0018 #else 0019 : iface(NetworkManagerPrivate::DBUS_SERVICE, path, QDBusConnection::systemBus()) 0020 #endif 0021 , capabilities(AccessPoint::None) 0022 , wpaFlags() 0023 , rsnFlags() 0024 , frequency(0) 0025 , maxBitRate(0) 0026 , mode(AccessPoint::Unknown) 0027 , signalStrength(0) 0028 , lastSeen(-1) 0029 , q_ptr(q) 0030 { 0031 uni = path; 0032 } 0033 0034 NetworkManager::AccessPoint::Capabilities NetworkManager::AccessPointPrivate::convertCapabilities(int caps) 0035 { 0036 NetworkManager::AccessPoint::Capabilities capFlags; 0037 if (caps & NM_802_11_AP_FLAGS_PRIVACY) { 0038 capFlags |= AccessPoint::Privacy; 0039 } 0040 0041 return capFlags; 0042 } 0043 0044 NetworkManager::AccessPoint::WpaFlags NetworkManager::AccessPointPrivate::convertWpaFlags(uint theirFlags) 0045 { 0046 return (AccessPoint::WpaFlags)theirFlags; 0047 } 0048 0049 NetworkManager::AccessPoint::AccessPoint(const QString &path, QObject *parent) 0050 : QObject(parent) 0051 , d_ptr(new AccessPointPrivate(path, this)) 0052 { 0053 Q_D(AccessPoint); 0054 0055 QDBusConnection::systemBus().connect(NetworkManagerPrivate::DBUS_SERVICE, 0056 d->uni, 0057 NetworkManagerPrivate::FDO_DBUS_PROPERTIES, 0058 QLatin1String("PropertiesChanged"), 0059 d, 0060 SLOT(dbusPropertiesChanged(QString, QVariantMap, QStringList))); 0061 0062 // Get all AccessPoint's properties at once 0063 QVariantMap initialProperties = NetworkManagerPrivate::retrieveInitialProperties(d->iface.staticInterfaceName(), path); 0064 if (!initialProperties.isEmpty()) { 0065 d->propertiesChanged(initialProperties); 0066 } 0067 } 0068 0069 NetworkManager::AccessPoint::~AccessPoint() 0070 { 0071 Q_D(AccessPoint); 0072 delete d; 0073 } 0074 0075 QString NetworkManager::AccessPoint::uni() const 0076 { 0077 Q_D(const AccessPoint); 0078 return d->uni; 0079 } 0080 0081 QString NetworkManager::AccessPoint::hardwareAddress() const 0082 { 0083 Q_D(const AccessPoint); 0084 return d->hardwareAddress; 0085 } 0086 0087 NetworkManager::AccessPoint::Capabilities NetworkManager::AccessPoint::capabilities() const 0088 { 0089 Q_D(const AccessPoint); 0090 return d->capabilities; 0091 } 0092 0093 NetworkManager::AccessPoint::WpaFlags NetworkManager::AccessPoint::wpaFlags() const 0094 { 0095 Q_D(const AccessPoint); 0096 return d->wpaFlags; 0097 } 0098 0099 NetworkManager::AccessPoint::WpaFlags NetworkManager::AccessPoint::rsnFlags() const 0100 { 0101 Q_D(const AccessPoint); 0102 return d->rsnFlags; 0103 } 0104 0105 QString NetworkManager::AccessPoint::ssid() const 0106 { 0107 Q_D(const AccessPoint); 0108 return d->ssid; 0109 } 0110 0111 QByteArray NetworkManager::AccessPoint::rawSsid() const 0112 { 0113 Q_D(const AccessPoint); 0114 return d->rawSsid; 0115 } 0116 0117 uint NetworkManager::AccessPoint::frequency() const 0118 { 0119 Q_D(const AccessPoint); 0120 return d->frequency; 0121 } 0122 0123 uint NetworkManager::AccessPoint::maxBitRate() const 0124 { 0125 Q_D(const AccessPoint); 0126 return d->maxBitRate; 0127 } 0128 0129 NetworkManager::AccessPoint::OperationMode NetworkManager::AccessPoint::mode() const 0130 { 0131 Q_D(const AccessPoint); 0132 return d->mode; 0133 } 0134 0135 int NetworkManager::AccessPoint::signalStrength() const 0136 { 0137 Q_D(const AccessPoint); 0138 return d->signalStrength; 0139 } 0140 0141 int NetworkManager::AccessPoint::lastSeen() const 0142 { 0143 Q_D(const AccessPoint); 0144 return d->lastSeen; 0145 } 0146 0147 NetworkManager::AccessPoint::OperationMode NetworkManager::AccessPoint::convertOperationMode(uint mode) 0148 { 0149 NetworkManager::AccessPoint::OperationMode ourMode = NetworkManager::AccessPoint::Unknown; 0150 switch (mode) { 0151 case NM_802_11_MODE_UNKNOWN: 0152 ourMode = NetworkManager::AccessPoint::Unknown; 0153 break; 0154 case NM_802_11_MODE_ADHOC: 0155 ourMode = NetworkManager::AccessPoint::Adhoc; 0156 break; 0157 case NM_802_11_MODE_INFRA: 0158 ourMode = NetworkManager::AccessPoint::Infra; 0159 break; 0160 case NM_802_11_MODE_AP: 0161 ourMode = NetworkManager::AccessPoint::ApMode; 0162 break; 0163 default: 0164 qCDebug(NMQT) << Q_FUNC_INFO << "Unhandled mode" << mode; 0165 } 0166 return ourMode; 0167 } 0168 0169 void NetworkManager::AccessPointPrivate::dbusPropertiesChanged(const QString &interfaceName, 0170 const QVariantMap &properties, 0171 const QStringList &invalidatedProperties) 0172 { 0173 Q_UNUSED(invalidatedProperties); 0174 if (interfaceName == QLatin1String("org.freedesktop.NetworkManager.AccessPoint")) { 0175 propertiesChanged(properties); 0176 } 0177 } 0178 0179 void NetworkManager::AccessPointPrivate::propertiesChanged(const QVariantMap &properties) 0180 { 0181 Q_Q(AccessPoint); 0182 0183 // qCDebug(NMQT) << Q_FUNC_INFO << properties; 0184 0185 QVariantMap::const_iterator it = properties.constBegin(); 0186 while (it != properties.constEnd()) { 0187 const QString property = it.key(); 0188 if (property == QLatin1String("Flags")) { 0189 capabilities = convertCapabilities(it->toUInt()); 0190 Q_EMIT q->capabilitiesChanged(capabilities); 0191 } else if (property == QLatin1String("WpaFlags")) { 0192 wpaFlags = convertWpaFlags(it->toUInt()); 0193 Q_EMIT q->wpaFlagsChanged(wpaFlags); 0194 } else if (property == QLatin1String("RsnFlags")) { 0195 rsnFlags = convertWpaFlags(it->toUInt()); 0196 Q_EMIT q->rsnFlagsChanged(rsnFlags); 0197 } else if (property == QLatin1String("Ssid")) { 0198 rawSsid = it->toByteArray(); 0199 ssid = QString::fromUtf8(rawSsid); 0200 Q_EMIT q->ssidChanged(ssid); 0201 } else if (property == QLatin1String("Frequency")) { 0202 frequency = it->toUInt(); 0203 Q_EMIT q->frequencyChanged(frequency); 0204 } else if (property == QLatin1String("HwAddress")) { 0205 hardwareAddress = it->toString(); 0206 } else if (property == QLatin1String("Mode")) { 0207 mode = q->convertOperationMode(it->toUInt()); 0208 } else if (property == QLatin1String("MaxBitrate")) { 0209 maxBitRate = it->toUInt(); 0210 Q_EMIT q->bitRateChanged(maxBitRate); 0211 } else if (property == QLatin1String("Strength")) { 0212 signalStrength = it->toInt(); 0213 Q_EMIT q->signalStrengthChanged(signalStrength); 0214 } else if (property == QLatin1String("LastSeen")) { 0215 lastSeen = it->toInt(); 0216 Q_EMIT q->lastSeenChanged(lastSeen); 0217 } else { 0218 qCDebug(NMQT) << Q_FUNC_INFO << "Unhandled property" << property; 0219 } 0220 ++it; 0221 } 0222 } 0223 0224 #include "moc_accesspoint.cpp" 0225 #include "moc_accesspoint_p.cpp"