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
15NetworkManager::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
35NetworkManager::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
45NetworkManager::AccessPoint::WpaFlags NetworkManager::AccessPointPrivate::convertWpaFlags(uint theirFlags)
46{
47 return (AccessPoint::WpaFlags)theirFlags;
48}
49
50NetworkManager::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
70NetworkManager::AccessPoint::~AccessPoint()
71{
72 Q_D(AccessPoint);
73 delete d;
74}
75
76QString NetworkManager::AccessPoint::uni() const
77{
78 Q_D(const AccessPoint);
79 return d->uni;
80}
81
82QString NetworkManager::AccessPoint::hardwareAddress() const
83{
84 Q_D(const AccessPoint);
85 return d->hardwareAddress;
86}
87
88NetworkManager::AccessPoint::Capabilities NetworkManager::AccessPoint::capabilities() const
89{
90 Q_D(const AccessPoint);
91 return d->capabilities;
92}
93
94NetworkManager::AccessPoint::WpaFlags NetworkManager::AccessPoint::wpaFlags() const
95{
96 Q_D(const AccessPoint);
97 return d->wpaFlags;
98}
99
100NetworkManager::AccessPoint::WpaFlags NetworkManager::AccessPoint::rsnFlags() const
101{
102 Q_D(const AccessPoint);
103 return d->rsnFlags;
104}
105
106QString NetworkManager::AccessPoint::ssid() const
107{
108 Q_D(const AccessPoint);
109 return d->ssid;
110}
111
112QByteArray NetworkManager::AccessPoint::rawSsid() const
113{
114 Q_D(const AccessPoint);
115 return d->rawSsid;
116}
117
118uint NetworkManager::AccessPoint::frequency() const
119{
120 Q_D(const AccessPoint);
121 return d->frequency;
122}
123
124uint NetworkManager::AccessPoint::maxBitRate() const
125{
126 Q_D(const AccessPoint);
127 return d->maxBitRate;
128}
129
130NetworkManager::AccessPoint::OperationMode NetworkManager::AccessPoint::mode() const
131{
132 Q_D(const AccessPoint);
133 return d->mode;
134}
135
136int NetworkManager::AccessPoint::signalStrength() const
137{
138 Q_D(const AccessPoint);
139 return d->signalStrength;
140}
141
142int NetworkManager::AccessPoint::lastSeen() const
143{
144 Q_D(const AccessPoint);
145 return d->lastSeen;
146}
147
148uint NetworkManager::AccessPoint::bandwidth() const
149{
150 Q_D(const AccessPoint);
151 return d->bandwidth;
152}
153
154NetworkManager::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
176void 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
186void 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

source code of networkmanager-qt/src/accesspoint.cpp