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 | |