1 | /* |
2 | SPDX-FileCopyrightText: 2008 Will Stephenson <wstephenson@kde.org> |
3 | SPDX-FileCopyrightText: 2011-2013 Lamarque V. Souza <lamarque@kde.org> |
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 | #ifndef NETWORKMANAGERQT_ACCESSPOINT_H |
10 | #define NETWORKMANAGERQT_ACCESSPOINT_H |
11 | |
12 | #include <networkmanagerqt/networkmanagerqt_export.h> |
13 | |
14 | #include <nm-version.h> |
15 | |
16 | #include <QObject> |
17 | #include <QSharedPointer> |
18 | #include <QVariantMap> |
19 | |
20 | namespace NetworkManager |
21 | { |
22 | class AccessPointPrivate; |
23 | |
24 | /*! |
25 | * \class NetworkManager::AccessPoint |
26 | * \inheaderfile NetworkManagerQt/AccessPoint |
27 | * \inmodule NetworkManagerQt |
28 | * |
29 | * \brief Represents an access point. |
30 | */ |
31 | class NETWORKMANAGERQT_EXPORT AccessPoint : public QObject |
32 | { |
33 | Q_OBJECT |
34 | public: |
35 | /*! |
36 | * \typedef NetworkManager::AccessPoint::Ptr |
37 | */ |
38 | typedef QSharedPointer<AccessPoint> Ptr; |
39 | /*! |
40 | * \typedef NetworkManager::AccessPoint::List |
41 | */ |
42 | typedef QList<Ptr> List; |
43 | /*! |
44 | * |
45 | * The access point's current operating mode |
46 | * |
47 | * \value Unknown |
48 | * Not associated with a network |
49 | * \value Adhoc |
50 | * A station in an infrastructure wireless network |
51 | * \value ApMode |
52 | * Access point in an infrastructure network |
53 | */ |
54 | enum OperationMode { |
55 | Unknown = 0, |
56 | Adhoc, |
57 | Infra, |
58 | ApMode, |
59 | }; |
60 | /*! |
61 | * |
62 | * General capabilities of an access point |
63 | * |
64 | * \value None |
65 | * Null capability - says nothing about the access point |
66 | * \value Privacy |
67 | * Access point supports privacy measures |
68 | */ |
69 | enum Capability { |
70 | None = 0x0, |
71 | Privacy = 0x1, |
72 | }; |
73 | /*! |
74 | * |
75 | * Flags describing the access point's capabilities according to WPA (Wifi Protected Access) |
76 | * |
77 | * \value PairWep40 |
78 | * \value PairWep104 |
79 | * \value PairTkip |
80 | * \value PairCcmp |
81 | * \value GroupWep40 |
82 | * \value GroupWep104 |
83 | * \value GroupTkip |
84 | * \value GroupCcmp |
85 | * \value KeyMgmtPsk |
86 | * \value KeyMgmt8021x |
87 | * \value KeyMgmtSAE |
88 | * \value KeyMgmtOWE |
89 | * \value KeyMgmtOWETM |
90 | * \value KeyMgmtEapSuiteB192 |
91 | */ |
92 | enum WpaFlag { |
93 | PairWep40 = 0x1, |
94 | PairWep104 = 0x2, |
95 | PairTkip = 0x4, |
96 | PairCcmp = 0x8, |
97 | GroupWep40 = 0x10, |
98 | GroupWep104 = 0x20, |
99 | GroupTkip = 0x40, |
100 | GroupCcmp = 0x80, |
101 | KeyMgmtPsk = 0x100, |
102 | KeyMgmt8021x = 0x200, |
103 | KeyMgmtSAE = 0x400, |
104 | KeyMgmtOWE = 0x800, |
105 | KeyMgmtOWETM = 0x1000, |
106 | KeyMgmtEapSuiteB192 = 0x2000, |
107 | }; |
108 | Q_DECLARE_FLAGS(Capabilities, Capability) |
109 | Q_FLAG(Capabilities) |
110 | Q_DECLARE_FLAGS(WpaFlags, WpaFlag) |
111 | Q_FLAG(WpaFlags) |
112 | /*! |
113 | */ |
114 | explicit AccessPoint(const QString &path, QObject *parent = nullptr); |
115 | ~AccessPoint() override; |
116 | |
117 | /*! |
118 | * \brief Returns path of the access point. |
119 | */ |
120 | QString uni() const; |
121 | /*! |
122 | * \brief Returns capabilities of an access point. |
123 | */ |
124 | Capabilities capabilities() const; |
125 | /*! |
126 | * \brief Returns flags describing the access point's capabilities according to WPA (Wifi Protected Access). |
127 | * \sa WpaFlag |
128 | */ |
129 | AccessPoint::WpaFlags wpaFlags() const; |
130 | /*! |
131 | * \brief Returns Flags describing the access point's capabilities according to the RSN (Robust Secure Network) protocol. |
132 | * \sa WpaFlag |
133 | */ |
134 | AccessPoint::WpaFlags rsnFlags() const; |
135 | /*! |
136 | * \brief Returns The Service Set Identifier identifying the access point. |
137 | */ |
138 | QString ssid() const; |
139 | /*! |
140 | * \brief Returns raw SSID, encoded as a byte array. |
141 | */ |
142 | QByteArray rawSsid() const; |
143 | /*! |
144 | * \brief Returns The radio channel frequency in use by the access point, in MHz. |
145 | */ |
146 | uint frequency() const; |
147 | /*! |
148 | * \brief Returns The hardware address (BSSID) of the access point. |
149 | */ |
150 | QString hardwareAddress() const; |
151 | /*! |
152 | * \brief Returns The maximum bitrate this access point is capable of, in kilobits/second (Kb/s). |
153 | */ |
154 | uint maxBitRate() const; |
155 | /*! |
156 | * \brief Returns Describes the operating mode of the access point. |
157 | */ |
158 | OperationMode mode() const; |
159 | /*! |
160 | * \brief Returns The current signal quality of the access point, in percent. |
161 | */ |
162 | int signalStrength() const; |
163 | /*! |
164 | * \brief Returns The timestamp (in CLOCK_BOOTTIME seconds) for the last time the access point |
165 | * was found in scan results. A value of -1 means the access point has never been found in scan results. |
166 | * \since 5.14.0 |
167 | */ |
168 | int lastSeen() const; |
169 | /*! |
170 | * The bandwidth announced by the access point in MHz. |
171 | * \since 6.12.0. |
172 | */ |
173 | uint bandwidth() const; |
174 | /*! |
175 | * \brief Helper method to convert wire representation of operation \a mode to enum. |
176 | */ |
177 | static OperationMode convertOperationMode(uint mode); |
178 | |
179 | Q_SIGNALS: |
180 | /*! |
181 | * \brief This signal is emitted when the signal strength of this network has changed. |
182 | * |
183 | * \a strength the new signal strength value for this network |
184 | */ |
185 | void signalStrengthChanged(int strength); |
186 | |
187 | /*! |
188 | * \brief This signal is emitted when the bitrate of this network has changed. |
189 | * |
190 | * \a bitrate the new bitrate value for this network |
191 | */ |
192 | void bitRateChanged(int bitrate); |
193 | |
194 | /*! |
195 | * \brief This signal is emitted when the capabilities of this network have changed. |
196 | * |
197 | * \a caps the new capabilities |
198 | */ |
199 | void capabilitiesChanged(AccessPoint::Capabilities caps); |
200 | |
201 | /*! |
202 | * \brief This signal is emitted when the WPA flags in use by this access point change. |
203 | * |
204 | * \a flags the new flags |
205 | */ |
206 | void wpaFlagsChanged(AccessPoint::WpaFlags flags); |
207 | |
208 | /*! |
209 | * \brief This signal is emitted when the RSN(WPA2) flags in use by this access point change. |
210 | * |
211 | * \a flags the new flags |
212 | */ |
213 | void rsnFlagsChanged(AccessPoint::WpaFlags flags); |
214 | /*! |
215 | * \brief This signal is emitted when the ssid of this Access Point changes. |
216 | * |
217 | * \a ssid the new SSID |
218 | */ |
219 | void ssidChanged(const QString &ssid); |
220 | |
221 | /*! |
222 | * \brief This signal is emitted when the frequency used by this Access Point changes. |
223 | * |
224 | * \a frequency the new frequency |
225 | */ |
226 | void frequencyChanged(uint frequency); |
227 | |
228 | /*! |
229 | * \brief This signal is emitted when the timestamp for the last time the access point was found |
230 | * in scan results changes. |
231 | * |
232 | * \a lastSeen the timestamp for the last time the access point was found in scan results. |
233 | * \since 5.14.0 |
234 | */ |
235 | void lastSeenChanged(int lastSeen); |
236 | |
237 | /*! |
238 | * This signal is emitted when bandwidth announced by the access point changes. |
239 | * |
240 | * \a lastSeen the bandwidth announced by the access point in MHz. |
241 | * \since 6.12.0 |
242 | */ |
243 | void bandwidthChanged(uint bandwidth); |
244 | |
245 | private: |
246 | Q_DECLARE_PRIVATE(AccessPoint) |
247 | |
248 | AccessPointPrivate *const d_ptr; |
249 | }; |
250 | |
251 | Q_DECLARE_OPERATORS_FOR_FLAGS(AccessPoint::WpaFlags) |
252 | |
253 | } |
254 | #endif |
255 | |