1 | /**************************************************************************** |
2 | ** |
3 | ** Copyright (C) 2016 The Qt Company Ltd. |
4 | ** Contact: https://www.qt.io/licensing/ |
5 | ** |
6 | ** This file is part of the plugins of the Qt Toolkit. |
7 | ** |
8 | ** $QT_BEGIN_LICENSE:LGPL$ |
9 | ** Commercial License Usage |
10 | ** Licensees holding valid commercial Qt licenses may use this file in |
11 | ** accordance with the commercial license agreement provided with the |
12 | ** Software or, alternatively, in accordance with the terms contained in |
13 | ** a written agreement between you and The Qt Company. For licensing terms |
14 | ** and conditions see https://www.qt.io/terms-conditions. For further |
15 | ** information use the contact form at https://www.qt.io/contact-us. |
16 | ** |
17 | ** GNU Lesser General Public License Usage |
18 | ** Alternatively, this file may be used under the terms of the GNU Lesser |
19 | ** General Public License version 3 as published by the Free Software |
20 | ** Foundation and appearing in the file LICENSE.LGPL3 included in the |
21 | ** packaging of this file. Please review the following information to |
22 | ** ensure the GNU Lesser General Public License version 3 requirements |
23 | ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. |
24 | ** |
25 | ** GNU General Public License Usage |
26 | ** Alternatively, this file may be used under the terms of the GNU |
27 | ** General Public License version 2.0 or (at your option) the GNU General |
28 | ** Public license version 3 or any later version approved by the KDE Free |
29 | ** Qt Foundation. The licenses are as published by the Free Software |
30 | ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 |
31 | ** included in the packaging of this file. Please review the following |
32 | ** information to ensure the GNU General Public License requirements will |
33 | ** be met: https://www.gnu.org/licenses/gpl-2.0.html and |
34 | ** https://www.gnu.org/licenses/gpl-3.0.html. |
35 | ** |
36 | ** $QT_END_LICENSE$ |
37 | ** |
38 | ****************************************************************************/ |
39 | |
40 | #ifndef QNETWORKMANAGERSERVICE_H |
41 | #define QNETWORKMANAGERSERVICE_H |
42 | |
43 | // |
44 | // W A R N I N G |
45 | // ------------- |
46 | // |
47 | // This file is not part of the Qt API. It exists purely as an |
48 | // implementation detail. This header file may change from version to |
49 | // version without notice, or even be removed. |
50 | // |
51 | // We mean it. |
52 | // |
53 | |
54 | #include <QtDBus/QtDBus> |
55 | #include <QtDBus/QDBusConnection> |
56 | #include <QtDBus/QDBusError> |
57 | #include <QtDBus/QDBusInterface> |
58 | #include <QtDBus/QDBusMessage> |
59 | #include <QtDBus/QDBusReply> |
60 | |
61 | #include <QtDBus/QDBusPendingCallWatcher> |
62 | #include <QtDBus/QDBusObjectPath> |
63 | #include <QtDBus/QDBusContext> |
64 | #include <QtDBus/QDBusAbstractInterface> |
65 | #include <QMap> |
66 | |
67 | #ifndef QT_NO_DBUS |
68 | |
69 | #ifndef NETWORK_MANAGER_H |
70 | typedef enum NMDeviceType |
71 | { |
72 | DEVICE_TYPE_UNKNOWN = 0, |
73 | DEVICE_TYPE_ETHERNET, |
74 | DEVICE_TYPE_WIFI, |
75 | DEVICE_TYPE_MODEM = 8 |
76 | } NMDeviceType; |
77 | |
78 | typedef enum |
79 | { |
80 | NM_DEVICE_STATE_UNKNOWN = 0, |
81 | NM_DEVICE_STATE_UNMANAGED = 10, |
82 | NM_DEVICE_STATE_UNAVAILABLE = 20, |
83 | NM_DEVICE_STATE_DISCONNECTED = 30, |
84 | NM_DEVICE_STATE_PREPARE = 40, |
85 | NM_DEVICE_STATE_CONFIG = 50, |
86 | NM_DEVICE_STATE_NEED_AUTH = 60, |
87 | NM_DEVICE_STATE_IP_CONFIG = 70, |
88 | NM_DEVICE_STATE_ACTIVATED = 100, |
89 | NM_DEVICE_STATE_DEACTIVATING = 110, |
90 | NM_DEVICE_STATE_FAILED = 120 |
91 | } NMDeviceState; |
92 | |
93 | typedef enum |
94 | { |
95 | NM_ACTIVE_CONNECTION_STATE_UNKNOWN = 0, |
96 | NM_ACTIVE_CONNECTION_STATE_ACTIVATING, |
97 | NM_ACTIVE_CONNECTION_STATE_ACTIVATED, |
98 | NM_ACTIVE_CONNECTION_STATE_DEACTIVATED = 4 |
99 | } NMActiveConnectionState; |
100 | |
101 | #define NM_DBUS_SERVICE "org.freedesktop.NetworkManager" |
102 | |
103 | #define NM_DBUS_PATH "/org/freedesktop/NetworkManager" |
104 | #define NM_DBUS_INTERFACE "org.freedesktop.NetworkManager" |
105 | #define NM_DBUS_INTERFACE_DEVICE NM_DBUS_INTERFACE ".Device" |
106 | #define NM_DBUS_INTERFACE_DEVICE_WIRED NM_DBUS_INTERFACE_DEVICE ".Wired" |
107 | #define NM_DBUS_INTERFACE_DEVICE_WIRELESS NM_DBUS_INTERFACE_DEVICE ".Wireless" |
108 | #define NM_DBUS_INTERFACE_DEVICE_MODEM NM_DBUS_INTERFACE_DEVICE ".Modem" |
109 | #define NM_DBUS_PATH_ACCESS_POINT NM_DBUS_PATH "/AccessPoint" |
110 | #define NM_DBUS_INTERFACE_ACCESS_POINT NM_DBUS_INTERFACE ".AccessPoint" |
111 | |
112 | #define NM_DBUS_PATH_SETTINGS "/org/freedesktop/NetworkManager/Settings" |
113 | |
114 | #define NM_DBUS_IFACE_SETTINGS_CONNECTION "org.freedesktop.NetworkManager.Settings.Connection" |
115 | #define NM_DBUS_IFACE_SETTINGS "org.freedesktop.NetworkManager.Settings" |
116 | #define NM_DBUS_INTERFACE_ACTIVE_CONNECTION NM_DBUS_INTERFACE ".Connection.Active" |
117 | #define NM_DBUS_INTERFACE_IP4_CONFIG NM_DBUS_INTERFACE ".IP4Config" |
118 | |
119 | #define NM_DBUS_SERVICE_USER_SETTINGS "org.freedesktop.NetworkManagerUserSettings" |
120 | #define NM_DBUS_SERVICE_SYSTEM_SETTINGS "org.freedesktop.NetworkManagerSystemSettings" |
121 | |
122 | #define NM_802_11_AP_FLAGS_NONE 0x00000000 |
123 | #define NM_802_11_AP_FLAGS_PRIVACY 0x00000001 |
124 | #endif |
125 | |
126 | QT_BEGIN_NAMESPACE |
127 | |
128 | typedef QMap< QString, QMap<QString,QVariant> > QNmSettingsMap; |
129 | typedef QList<quint32> ServerThing; |
130 | |
131 | QT_END_NAMESPACE |
132 | |
133 | Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QNmSettingsMap)) |
134 | Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(ServerThing)) |
135 | |
136 | QT_BEGIN_NAMESPACE |
137 | |
138 | class QNetworkManagerInterface : public QDBusAbstractInterface |
139 | { |
140 | Q_OBJECT |
141 | |
142 | public: |
143 | typedef enum |
144 | { |
145 | NM_STATE_UNKNOWN = 0, |
146 | NM_STATE_ASLEEP = 10, |
147 | NM_STATE_DISCONNECTED = 20, |
148 | NM_STATE_DISCONNECTING = 30, |
149 | NM_STATE_CONNECTING = 40, |
150 | NM_STATE_CONNECTED_LOCAL = 50, |
151 | NM_STATE_CONNECTED_SITE = 60, |
152 | NM_STATE_CONNECTED_GLOBAL = 70 |
153 | } NMState; |
154 | |
155 | QNetworkManagerInterface(QObject *parent = nullptr); |
156 | ~QNetworkManagerInterface(); |
157 | |
158 | QList <QDBusObjectPath> getDevices(); |
159 | void activateConnection(QDBusObjectPath connection,QDBusObjectPath device, QDBusObjectPath specificObject); |
160 | void deactivateConnection(QDBusObjectPath connectionPath); |
161 | |
162 | QDBusObjectPath path() const; |
163 | |
164 | bool wirelessEnabled() const; |
165 | bool wirelessHardwareEnabled() const; |
166 | QList <QDBusObjectPath> activeConnections() const; |
167 | NMState state(); |
168 | QString version() const; |
169 | bool setConnections(); |
170 | |
171 | Q_SIGNALS: |
172 | void deviceAdded(QDBusObjectPath); |
173 | void deviceRemoved(QDBusObjectPath); |
174 | void propertiesChanged(QMap<QString,QVariant>); |
175 | void stateChanged(quint32); |
176 | void activationFinished(QDBusPendingCallWatcher*); |
177 | void propertiesReady(); |
178 | void devicesListReady(); |
179 | |
180 | private Q_SLOTS: |
181 | void propertiesSwap(QMap<QString,QVariant>); |
182 | |
183 | private: |
184 | QVariantMap propertyMap; |
185 | QList<QDBusObjectPath> devicesPathList; |
186 | |
187 | }; |
188 | |
189 | class QNetworkManagerInterfaceAccessPoint : public QDBusAbstractInterface |
190 | { |
191 | Q_OBJECT |
192 | |
193 | public: |
194 | |
195 | enum DeviceState { |
196 | Unknown = 0, |
197 | Unmanaged, |
198 | Unavailable, |
199 | Disconnected, |
200 | Prepare, |
201 | Config, |
202 | NeedAuthentication, |
203 | IpConfig, |
204 | Activated, |
205 | Failed |
206 | }; |
207 | |
208 | enum ApFlag { |
209 | ApNone = 0x0, |
210 | Privacy = 0x1 |
211 | }; |
212 | |
213 | Q_DECLARE_FLAGS(ApFlags, ApFlag) |
214 | |
215 | enum ApSecurityFlag { |
216 | ApSecurityNone = 0x0, |
217 | PairWep40 = 0x1, |
218 | PairWep104 = 0x2, |
219 | PairTkip = 0x4, |
220 | PairCcmp = 0x8, |
221 | GroupWep40 = 0x10, |
222 | GroupWep104 = 0x20, |
223 | GroupTkip = 0x40, |
224 | GroupCcmp = 0x80, |
225 | KeyPsk = 0x100, |
226 | Key8021x = 0x200 |
227 | }; |
228 | |
229 | Q_DECLARE_FLAGS(ApSecurityFlags, ApSecurityFlag) |
230 | |
231 | explicit QNetworkManagerInterfaceAccessPoint(const QString &dbusPathName, QObject *parent = nullptr); |
232 | ~QNetworkManagerInterfaceAccessPoint(); |
233 | |
234 | quint32 flags() const; |
235 | quint32 wpaFlags() const; |
236 | quint32 rsnFlags() const; |
237 | QString ssid() const; |
238 | quint32 frequency() const; |
239 | QString hwAddress() const; |
240 | quint32 mode() const; |
241 | quint32 maxBitrate() const; |
242 | quint32 strength() const; |
243 | // bool setConnections(); |
244 | |
245 | Q_SIGNALS: |
246 | void propertiesChanged(QMap<QString,QVariant>); |
247 | void propertiesReady(); |
248 | |
249 | private Q_SLOTS: |
250 | void propertiesSwap(QMap<QString,QVariant>); |
251 | |
252 | private: |
253 | QVariantMap propertyMap; |
254 | }; |
255 | |
256 | class QNetworkManagerInterfaceDevice : public QDBusAbstractInterface |
257 | { |
258 | Q_OBJECT |
259 | |
260 | public: |
261 | |
262 | explicit QNetworkManagerInterfaceDevice(const QString &deviceObjectPath, QObject *parent = nullptr); |
263 | ~QNetworkManagerInterfaceDevice(); |
264 | |
265 | QString udi() const; |
266 | QString networkInterface() const; |
267 | quint32 ip4Address() const; |
268 | quint32 state() const; |
269 | quint32 deviceType() const; |
270 | |
271 | QDBusObjectPath ip4config() const; |
272 | |
273 | Q_SIGNALS: |
274 | void stateChanged(const QString &, quint32); |
275 | void propertiesChanged(QMap<QString,QVariant>); |
276 | void connectionsChanged(QStringList); |
277 | void propertiesReady(); |
278 | private Q_SLOTS: |
279 | void propertiesSwap(QMap<QString,QVariant>); |
280 | private: |
281 | QVariantMap propertyMap; |
282 | }; |
283 | |
284 | class QNetworkManagerInterfaceDeviceWired : public QDBusAbstractInterface |
285 | { |
286 | Q_OBJECT |
287 | |
288 | public: |
289 | |
290 | explicit QNetworkManagerInterfaceDeviceWired(const QString &ifaceDevicePath, |
291 | QObject *parent = nullptr); |
292 | ~QNetworkManagerInterfaceDeviceWired(); |
293 | |
294 | QString hwAddress() const; |
295 | quint32 speed() const; |
296 | bool carrier() const; |
297 | QStringList availableConnections(); |
298 | |
299 | Q_SIGNALS: |
300 | void propertiesChanged(QMap<QString,QVariant>); |
301 | void propertiesReady(); |
302 | void carrierChanged(bool); |
303 | |
304 | private Q_SLOTS: |
305 | void propertiesSwap(QMap<QString,QVariant>); |
306 | |
307 | private: |
308 | QVariantMap propertyMap; |
309 | }; |
310 | |
311 | class QNetworkManagerInterfaceDeviceWireless : public QDBusAbstractInterface |
312 | { |
313 | Q_OBJECT |
314 | |
315 | public: |
316 | |
317 | enum DeviceCapability { |
318 | None = 0x0, |
319 | Wep40 = 0x1, |
320 | Wep104 = 0x2, |
321 | Tkip = 0x4, |
322 | Ccmp = 0x8, |
323 | Wpa = 0x10, |
324 | Rsn = 0x20 |
325 | }; |
326 | |
327 | explicit QNetworkManagerInterfaceDeviceWireless(const QString &ifaceDevicePath, |
328 | QObject *parent = nullptr); |
329 | ~QNetworkManagerInterfaceDeviceWireless(); |
330 | |
331 | QList <QDBusObjectPath> getAccessPoints(); |
332 | |
333 | QString hwAddress() const; |
334 | quint32 mode() const; |
335 | quint32 bitrate() const; |
336 | QDBusObjectPath activeAccessPoint() const; |
337 | quint32 wirelessCapabilities() const; |
338 | bool setConnections(); |
339 | |
340 | void requestScan(); |
341 | Q_SIGNALS: |
342 | void propertiesChanged(QMap<QString,QVariant>); |
343 | void propertiesReady(); |
344 | |
345 | private Q_SLOTS: |
346 | void propertiesSwap(QMap<QString,QVariant>); |
347 | |
348 | private: |
349 | QVariantMap propertyMap; |
350 | QList <QDBusObjectPath> accessPointsList; |
351 | QString interfacePath; |
352 | }; |
353 | |
354 | class QNetworkManagerInterfaceDeviceModem : public QDBusAbstractInterface |
355 | { |
356 | Q_OBJECT |
357 | |
358 | public: |
359 | |
360 | enum ModemCapability { |
361 | None = 0x0, |
362 | Pots = 0x1, |
363 | Cmda_Edvo = 0x2, |
364 | Gsm_Umts = 0x4, |
365 | Lte = 0x08 |
366 | }; |
367 | Q_DECLARE_FLAGS(ModemCapabilities, ModemCapability) |
368 | |
369 | explicit QNetworkManagerInterfaceDeviceModem(const QString &ifaceDevicePath, |
370 | QObject *parent = nullptr); |
371 | ~QNetworkManagerInterfaceDeviceModem(); |
372 | |
373 | ModemCapabilities modemCapabilities() const; |
374 | ModemCapabilities currentCapabilities() const; |
375 | |
376 | Q_SIGNALS: |
377 | void propertiesChanged(QMap<QString,QVariant>); |
378 | void propertiesReady(); |
379 | |
380 | private Q_SLOTS: |
381 | void propertiesSwap(QMap<QString,QVariant>); |
382 | |
383 | private: |
384 | QVariantMap propertyMap; |
385 | }; |
386 | |
387 | Q_DECLARE_OPERATORS_FOR_FLAGS(QNetworkManagerInterfaceDeviceModem::ModemCapabilities) |
388 | |
389 | class QNetworkManagerSettings : public QDBusAbstractInterface |
390 | { |
391 | Q_OBJECT |
392 | |
393 | public: |
394 | |
395 | explicit QNetworkManagerSettings(const QString &settingsService, QObject *parent = nullptr); |
396 | ~QNetworkManagerSettings(); |
397 | |
398 | QList <QDBusObjectPath> listConnections(); |
399 | QString getConnectionByUuid(const QString &uuid); |
400 | bool setConnections(); |
401 | |
402 | Q_SIGNALS: |
403 | void newConnection(QDBusObjectPath); |
404 | void connectionsListReady(); |
405 | private: |
406 | QList <QDBusObjectPath> connectionsList; |
407 | QString interfacePath; |
408 | }; |
409 | |
410 | class QNetworkManagerSettingsConnection : public QDBusAbstractInterface |
411 | { |
412 | Q_OBJECT |
413 | |
414 | public: |
415 | |
416 | QNetworkManagerSettingsConnection(const QString &settingsService, const QString &connectionObjectPath, QObject *parent = nullptr); |
417 | ~QNetworkManagerSettingsConnection(); |
418 | |
419 | QNmSettingsMap getSettings(); |
420 | bool setConnections(); |
421 | NMDeviceType getType(); |
422 | bool isAutoConnect(); |
423 | quint64 getTimestamp(); |
424 | QString getId(); |
425 | QString getUuid(); |
426 | QString getSsid(); |
427 | QString getMacAddress(); |
428 | QStringList getSeenBssids(); |
429 | |
430 | Q_SIGNALS: |
431 | void updated(); |
432 | void removed(const QString &path); |
433 | void settingsReady(); |
434 | |
435 | private Q_SLOTS: |
436 | void slotSettingsRemoved(); |
437 | private: |
438 | QNmSettingsMap settingsMap; |
439 | QString interfacepath; |
440 | }; |
441 | |
442 | class QNetworkManagerConnectionActive : public QDBusAbstractInterface |
443 | { |
444 | Q_OBJECT |
445 | |
446 | public: |
447 | |
448 | enum ActiveConnectionState { |
449 | Unknown = 0, |
450 | Activating = 1, |
451 | Activated = 2 |
452 | }; |
453 | |
454 | explicit QNetworkManagerConnectionActive(const QString &dbusPathName, QObject *parent = nullptr); |
455 | ~ QNetworkManagerConnectionActive(); |
456 | |
457 | QDBusObjectPath connection() const; |
458 | QDBusObjectPath specificObject() const; |
459 | QStringList devices() const; |
460 | quint32 state() const; |
461 | bool defaultRoute() const; |
462 | bool default6Route() const; |
463 | |
464 | |
465 | Q_SIGNALS: |
466 | void propertiesChanged(QMap<QString,QVariant>); |
467 | void propertiesReady(); |
468 | |
469 | private Q_SLOTS: |
470 | void propertiesSwap(QMap<QString,QVariant>); |
471 | |
472 | private: |
473 | QVariantMap propertyMap; |
474 | }; |
475 | |
476 | class QNetworkManagerIp4Config : public QDBusAbstractInterface |
477 | { |
478 | Q_OBJECT |
479 | |
480 | public: |
481 | explicit QNetworkManagerIp4Config(const QString &dbusPathName, QObject *parent = nullptr); |
482 | ~QNetworkManagerIp4Config(); |
483 | |
484 | QStringList domains() const; |
485 | }; |
486 | |
487 | class PropertiesDBusInterface : public QDBusAbstractInterface |
488 | { |
489 | public: |
490 | PropertiesDBusInterface(const QString &service, const QString &path, |
491 | const QString &interface, const QDBusConnection &connection, |
492 | QObject *parent = nullptr) |
493 | : QDBusAbstractInterface(service, path, interface.toLatin1().data(), connection, parent) |
494 | {} |
495 | }; |
496 | |
497 | QT_END_NAMESPACE |
498 | |
499 | #endif // QT_NO_DBUS |
500 | #endif //QNETWORKMANAGERSERVICE_H |
501 | |