| 1 | /* |
| 2 | SPDX-FileCopyrightText: 2008 Will Stephenson <wstephenson@kde.org> |
| 3 | SPDX-FileCopyrightText: 2013 Daniel Nicoletti <dantti12@gmail.com> |
| 4 | SPDX-FileCopyrightText: 2013 Jan Grulich <jgrulich@redhat.com> |
| 5 | |
| 6 | SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL |
| 7 | */ |
| 8 | |
| 9 | #include "accesspoint_p.h" |
| 10 | #include "manager_p.h" |
| 11 | #include "wirelessdevice.h" |
| 12 | |
| 13 | #include "nmdebug.h" |
| 14 | |
| 15 | NetworkManager::AccessPointPrivate::AccessPointPrivate(const QString &path, AccessPoint *q) |
| 16 | #ifdef NMQT_STATIC |
| 17 | : iface(NetworkManagerPrivate::DBUS_SERVICE, path, QDBusConnection::sessionBus()) |
| 18 | #else |
| 19 | : iface(NetworkManagerPrivate::DBUS_SERVICE, path, QDBusConnection::systemBus()) |
| 20 | #endif |
| 21 | , capabilities(AccessPoint::None) |
| 22 | , wpaFlags() |
| 23 | , rsnFlags() |
| 24 | , frequency(0) |
| 25 | , maxBitRate(0) |
| 26 | , mode(AccessPoint::Unknown) |
| 27 | , signalStrength(0) |
| 28 | , lastSeen(-1) |
| 29 | , bandwidth(0) |
| 30 | , q_ptr(q) |
| 31 | { |
| 32 | uni = path; |
| 33 | } |
| 34 | |
| 35 | NetworkManager::AccessPoint::Capabilities NetworkManager::AccessPointPrivate::convertCapabilities(int caps) |
| 36 | { |
| 37 | NetworkManager::AccessPoint::Capabilities capFlags; |
| 38 | if (caps & NM_802_11_AP_FLAGS_PRIVACY) { |
| 39 | capFlags |= AccessPoint::Privacy; |
| 40 | } |
| 41 | |
| 42 | return capFlags; |
| 43 | } |
| 44 | |
| 45 | NetworkManager::AccessPoint::WpaFlags NetworkManager::AccessPointPrivate::convertWpaFlags(uint theirFlags) |
| 46 | { |
| 47 | return (AccessPoint::WpaFlags)theirFlags; |
| 48 | } |
| 49 | |
| 50 | NetworkManager::AccessPoint::AccessPoint(const QString &path, QObject *parent) |
| 51 | : QObject(parent) |
| 52 | , d_ptr(new AccessPointPrivate(path, this)) |
| 53 | { |
| 54 | Q_D(AccessPoint); |
| 55 | |
| 56 | QDBusConnection::systemBus().connect(service: NetworkManagerPrivate::DBUS_SERVICE, |
| 57 | path: d->uni, |
| 58 | interface: NetworkManagerPrivate::FDO_DBUS_PROPERTIES, |
| 59 | name: QLatin1String("PropertiesChanged" ), |
| 60 | receiver: d, |
| 61 | SLOT(dbusPropertiesChanged(QString, QVariantMap, QStringList))); |
| 62 | |
| 63 | // Get all AccessPoint's properties at once |
| 64 | QVariantMap initialProperties = NetworkManagerPrivate::retrieveInitialProperties(interfaceName: d->iface.staticInterfaceName(), path); |
| 65 | if (!initialProperties.isEmpty()) { |
| 66 | d->propertiesChanged(properties: initialProperties); |
| 67 | } |
| 68 | } |
| 69 | |
| 70 | NetworkManager::AccessPoint::~AccessPoint() |
| 71 | { |
| 72 | Q_D(AccessPoint); |
| 73 | delete d; |
| 74 | } |
| 75 | |
| 76 | QString NetworkManager::AccessPoint::uni() const |
| 77 | { |
| 78 | Q_D(const AccessPoint); |
| 79 | return d->uni; |
| 80 | } |
| 81 | |
| 82 | QString NetworkManager::AccessPoint::hardwareAddress() const |
| 83 | { |
| 84 | Q_D(const AccessPoint); |
| 85 | return d->hardwareAddress; |
| 86 | } |
| 87 | |
| 88 | NetworkManager::AccessPoint::Capabilities NetworkManager::AccessPoint::capabilities() const |
| 89 | { |
| 90 | Q_D(const AccessPoint); |
| 91 | return d->capabilities; |
| 92 | } |
| 93 | |
| 94 | NetworkManager::AccessPoint::WpaFlags NetworkManager::AccessPoint::wpaFlags() const |
| 95 | { |
| 96 | Q_D(const AccessPoint); |
| 97 | return d->wpaFlags; |
| 98 | } |
| 99 | |
| 100 | NetworkManager::AccessPoint::WpaFlags NetworkManager::AccessPoint::rsnFlags() const |
| 101 | { |
| 102 | Q_D(const AccessPoint); |
| 103 | return d->rsnFlags; |
| 104 | } |
| 105 | |
| 106 | QString NetworkManager::AccessPoint::ssid() const |
| 107 | { |
| 108 | Q_D(const AccessPoint); |
| 109 | return d->ssid; |
| 110 | } |
| 111 | |
| 112 | QByteArray NetworkManager::AccessPoint::rawSsid() const |
| 113 | { |
| 114 | Q_D(const AccessPoint); |
| 115 | return d->rawSsid; |
| 116 | } |
| 117 | |
| 118 | uint NetworkManager::AccessPoint::frequency() const |
| 119 | { |
| 120 | Q_D(const AccessPoint); |
| 121 | return d->frequency; |
| 122 | } |
| 123 | |
| 124 | uint NetworkManager::AccessPoint::maxBitRate() const |
| 125 | { |
| 126 | Q_D(const AccessPoint); |
| 127 | return d->maxBitRate; |
| 128 | } |
| 129 | |
| 130 | NetworkManager::AccessPoint::OperationMode NetworkManager::AccessPoint::mode() const |
| 131 | { |
| 132 | Q_D(const AccessPoint); |
| 133 | return d->mode; |
| 134 | } |
| 135 | |
| 136 | int NetworkManager::AccessPoint::signalStrength() const |
| 137 | { |
| 138 | Q_D(const AccessPoint); |
| 139 | return d->signalStrength; |
| 140 | } |
| 141 | |
| 142 | int NetworkManager::AccessPoint::lastSeen() const |
| 143 | { |
| 144 | Q_D(const AccessPoint); |
| 145 | return d->lastSeen; |
| 146 | } |
| 147 | |
| 148 | uint NetworkManager::AccessPoint::bandwidth() const |
| 149 | { |
| 150 | Q_D(const AccessPoint); |
| 151 | return d->bandwidth; |
| 152 | } |
| 153 | |
| 154 | NetworkManager::AccessPoint::OperationMode NetworkManager::AccessPoint::convertOperationMode(uint mode) |
| 155 | { |
| 156 | NetworkManager::AccessPoint::OperationMode ourMode = NetworkManager::AccessPoint::Unknown; |
| 157 | switch (mode) { |
| 158 | case NM_802_11_MODE_UNKNOWN: |
| 159 | ourMode = NetworkManager::AccessPoint::Unknown; |
| 160 | break; |
| 161 | case NM_802_11_MODE_ADHOC: |
| 162 | ourMode = NetworkManager::AccessPoint::Adhoc; |
| 163 | break; |
| 164 | case NM_802_11_MODE_INFRA: |
| 165 | ourMode = NetworkManager::AccessPoint::Infra; |
| 166 | break; |
| 167 | case NM_802_11_MODE_AP: |
| 168 | ourMode = NetworkManager::AccessPoint::ApMode; |
| 169 | break; |
| 170 | default: |
| 171 | qCDebug(NMQT) << Q_FUNC_INFO << "Unhandled mode" << mode; |
| 172 | } |
| 173 | return ourMode; |
| 174 | } |
| 175 | |
| 176 | void NetworkManager::AccessPointPrivate::dbusPropertiesChanged(const QString &interfaceName, |
| 177 | const QVariantMap &properties, |
| 178 | const QStringList &invalidatedProperties) |
| 179 | { |
| 180 | Q_UNUSED(invalidatedProperties); |
| 181 | if (interfaceName == QLatin1String("org.freedesktop.NetworkManager.AccessPoint" )) { |
| 182 | propertiesChanged(properties); |
| 183 | } |
| 184 | } |
| 185 | |
| 186 | void NetworkManager::AccessPointPrivate::propertiesChanged(const QVariantMap &properties) |
| 187 | { |
| 188 | Q_Q(AccessPoint); |
| 189 | |
| 190 | // qCDebug(NMQT) << Q_FUNC_INFO << properties; |
| 191 | |
| 192 | QVariantMap::const_iterator it = properties.constBegin(); |
| 193 | while (it != properties.constEnd()) { |
| 194 | const QString property = it.key(); |
| 195 | if (property == QLatin1String("Flags" )) { |
| 196 | capabilities = convertCapabilities(caps: it->toUInt()); |
| 197 | Q_EMIT q->capabilitiesChanged(caps: capabilities); |
| 198 | } else if (property == QLatin1String("WpaFlags" )) { |
| 199 | wpaFlags = convertWpaFlags(theirFlags: it->toUInt()); |
| 200 | Q_EMIT q->wpaFlagsChanged(flags: wpaFlags); |
| 201 | } else if (property == QLatin1String("RsnFlags" )) { |
| 202 | rsnFlags = convertWpaFlags(theirFlags: it->toUInt()); |
| 203 | Q_EMIT q->rsnFlagsChanged(flags: rsnFlags); |
| 204 | } else if (property == QLatin1String("Ssid" )) { |
| 205 | rawSsid = it->toByteArray(); |
| 206 | ssid = QString::fromUtf8(ba: rawSsid); |
| 207 | Q_EMIT q->ssidChanged(ssid); |
| 208 | } else if (property == QLatin1String("Frequency" )) { |
| 209 | frequency = it->toUInt(); |
| 210 | Q_EMIT q->frequencyChanged(frequency); |
| 211 | } else if (property == QLatin1String("HwAddress" )) { |
| 212 | hardwareAddress = it->toString(); |
| 213 | } else if (property == QLatin1String("Mode" )) { |
| 214 | mode = q->convertOperationMode(mode: it->toUInt()); |
| 215 | } else if (property == QLatin1String("MaxBitrate" )) { |
| 216 | maxBitRate = it->toUInt(); |
| 217 | Q_EMIT q->bitRateChanged(bitrate: maxBitRate); |
| 218 | } else if (property == QLatin1String("Strength" )) { |
| 219 | signalStrength = it->toInt(); |
| 220 | Q_EMIT q->signalStrengthChanged(strength: signalStrength); |
| 221 | } else if (property == QLatin1String("LastSeen" )) { |
| 222 | lastSeen = it->toInt(); |
| 223 | Q_EMIT q->lastSeenChanged(lastSeen); |
| 224 | } else if (property == QLatin1String("Bandwidth" )) { |
| 225 | bandwidth = it->toUInt(); |
| 226 | Q_EMIT q->bandwidthChanged(bandwidth); |
| 227 | } else { |
| 228 | qCDebug(NMQT) << Q_FUNC_INFO << "Unhandled property" << property; |
| 229 | } |
| 230 | ++it; |
| 231 | } |
| 232 | } |
| 233 | |
| 234 | #include "moc_accesspoint.cpp" |
| 235 | #include "moc_accesspoint_p.cpp" |
| 236 | |