File indexing completed on 2024-12-01 03:45:05
0001 /* 0002 SPDX-FileCopyrightText: 2008, 2011 Will Stephenson <wstephenson@kde.org> 0003 SPDX-FileCopyrightText: 2011-2013 Lamarque V. Souza <lamarque@kde.org> 0004 SPDX-FileCopyrightText: 2013 Daniel Nicoletti <dantti12@gmail.com> 0005 SPDX-FileCopyrightText: 2013 Jan Grulich <jgrulich@redhat.com> 0006 0007 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0008 */ 0009 0010 #ifndef NETWORKMANAGERQT_WIRELESSDEVICE_H 0011 #define NETWORKMANAGERQT_WIRELESSDEVICE_H 0012 0013 #include "accesspoint.h" 0014 #include "device.h" 0015 #include "wirelessnetwork.h" 0016 #include <networkmanagerqt/networkmanagerqt_export.h> 0017 0018 #include <QDBusPendingReply> 0019 0020 namespace NetworkManager 0021 { 0022 class WirelessDevicePrivate; 0023 0024 /** 0025 * A wireless network interface 0026 */ 0027 class NETWORKMANAGERQT_EXPORT WirelessDevice : public Device 0028 { 0029 Q_OBJECT 0030 0031 public: 0032 typedef QSharedPointer<WirelessDevice> Ptr; 0033 typedef QList<Ptr> List; 0034 0035 /** 0036 * The device's current operating mode 0037 */ 0038 enum OperationMode { 0039 Unknown = 0, /**< not associated with a network */ 0040 Adhoc, /**< part of an adhoc network */ 0041 Infra, /**< a station in an infrastructure wireless network */ 0042 ApMode, /**< access point in an infrastructure network */ 0043 }; 0044 Q_ENUM(OperationMode) 0045 /** 0046 * Capabilities (currently all encryption/authentication related) of the device 0047 * @note FreqValid, Freq2Ghz, Freq5Ghz are available in runtime NM >= 1.0.2 0048 */ 0049 enum Capability { 0050 NoCapability = 0x0, /**< Null capability */ 0051 Wep40 = 0x1, /**< 40 bit WEP cipher */ 0052 Wep104 = 0x2, /**< 104 bit WEP cipher */ 0053 Tkip = 0x4, /**< TKIP encryption cipher */ 0054 Ccmp = 0x8, /**< CCMP encryption cipher */ 0055 Wpa = 0x10, /**< WPA authentication protocol */ 0056 Rsn = 0x20, /**< RSN authethication protocol */ 0057 ApCap = 0x40, /**< The device supports Access Point mode. */ 0058 AdhocCap = 0x80, /**< The device supports Ad-Hoc mode. */ 0059 FreqValid = 0x100, /**< The device properly reports information about supported frequencies */ 0060 Freq2Ghz = 0x200, /**< The device supports 2.4Ghz frequencies */ 0061 Freq5Ghz = 0x400, /**< The device supports 5Ghz frequencies */ 0062 Mesh = 0x1000, /**< The device supports acting as a mesh point */ 0063 IBSSRsn = 0x2000, /**< device supports WPA2/RSN in an IBSS network */ 0064 }; 0065 Q_DECLARE_FLAGS(Capabilities, Capability) 0066 /** 0067 * Creates a new WirelessDevice object. 0068 * 0069 * @param path the DBus path of the devise 0070 */ 0071 explicit WirelessDevice(const QString &path, QObject *parent = nullptr); 0072 /** 0073 * Destroys a WirelessDevice object. 0074 */ 0075 ~WirelessDevice() override; 0076 /** 0077 * Return the type 0078 */ 0079 Type type() const override; 0080 /** 0081 * List of wireless networks currently visible to the hardware 0082 */ 0083 QStringList accessPoints() const; 0084 /** 0085 * Asks the device for a new scan of available wireless networks 0086 * @param options Options of scan 0087 * No documentation for options yet, see 0088 * https://projects.gnome.org/NetworkManager/developers/api/09/spec.html#org.freedesktop.NetworkManager.Device.Wireless 0089 */ 0090 QDBusPendingReply<> requestScan(const QVariantMap &options = QVariantMap()); 0091 /** 0092 * AccessPoint pointer this interface is currently associated with 0093 */ 0094 AccessPoint::Ptr activeAccessPoint() const; 0095 /** 0096 * The permanent hardware address of the network interface 0097 */ 0098 QString permanentHardwareAddress() const; 0099 /** 0100 * The hardware address currently used by the network interface 0101 */ 0102 QString hardwareAddress() const; 0103 0104 /** 0105 * Retrieves the operation mode of this network. 0106 * 0107 * @return the current mode 0108 * @see OperationMode 0109 */ 0110 WirelessDevice::OperationMode mode() const; 0111 /** 0112 * Retrieves the effective bit rate currently attainable by this device. 0113 * 0114 * @return the bitrate in Kbit/s 0115 */ 0116 int bitRate() const; 0117 /** 0118 * The LastScan property value, converted to QDateTime 0119 * @since 5.62.0 0120 * @note will always return invalid QDateTime when runtime NM < 1.12 0121 * @return 0122 */ 0123 QDateTime lastScan() const; 0124 /** 0125 * The time the last RequestScan function was called 0126 * @since 5.62.0 0127 * @return 0128 */ 0129 QDateTime lastRequestScan() const; 0130 /** 0131 * Retrieves the capabilities of this wifi network. 0132 * 0133 * @return the flag set describing the capabilities 0134 * @see Capabilities 0135 */ 0136 WirelessDevice::Capabilities wirelessCapabilities() const; 0137 0138 /** 0139 * Helper method to convert wire representation of operation mode to enum 0140 */ 0141 static WirelessDevice::OperationMode convertOperationMode(uint); 0142 /** 0143 * Helper method to convert wire representation of capabilities to enum 0144 */ 0145 static WirelessDevice::Capabilities convertCapabilities(uint); 0146 /** 0147 * Finds access point object given its Unique Network Identifier. 0148 * 0149 * @param uni the identifier of the AP to find from this network interface 0150 * @returns a valid AccessPoint object if a network having the given UNI for this device is known to the system, 0 otherwise 0151 */ 0152 AccessPoint::Ptr findAccessPoint(const QString &uni); 0153 0154 /** 0155 * Return the current list of networks 0156 */ 0157 WirelessNetwork::List networks() const; 0158 0159 /** 0160 * Find a network with the given @p ssid, a Null object is 0161 * returned if it can not be found 0162 */ 0163 WirelessNetwork::Ptr findNetwork(const QString &ssid) const; 0164 0165 Q_SIGNALS: 0166 /** 0167 * This signal is emitted when the bitrate of this network has changed. 0168 * 0169 * @param bitrate the new bitrate value for this network 0170 */ 0171 void bitRateChanged(int bitrate); 0172 /** 0173 * The active network changed. 0174 */ 0175 void activeAccessPointChanged(const QString &); 0176 /** 0177 * The device switched operating mode. 0178 */ 0179 void modeChanged(WirelessDevice::OperationMode); 0180 /** 0181 * The device changed its capabilities 0182 */ 0183 void wirelessCapabilitiesChanged(Capabilities); 0184 /** 0185 * The device changed its hardware address 0186 */ 0187 void hardwareAddressChanged(const QString &); 0188 /** 0189 * The device changed its permanent hardware address 0190 */ 0191 void permanentHardwareAddressChanged(const QString &); 0192 /** 0193 * The device changed its properties 0194 */ 0195 void wirelessPropertiesChanged(uint); // TODO this is bogus, remove 0196 /** 0197 * A new wireless access point appeared 0198 */ 0199 void accessPointAppeared(const QString &uni); 0200 /** 0201 * A wireless access point disappeared 0202 */ 0203 void accessPointDisappeared(const QString &uni); 0204 /** 0205 * A wireless network appeared 0206 */ 0207 void networkAppeared(const QString &ssid); 0208 /** 0209 * A wireless network disappeared 0210 */ 0211 void networkDisappeared(const QString &ssid); 0212 /** 0213 * The LastScan property has changed, meaning a scan has just finished 0214 * @since 5.62.0 0215 * @note will never be emitted when runtime NM < 1.12 0216 * @see lastScanTime 0217 */ 0218 void lastScanChanged(const QDateTime &dateTime); 0219 0220 private: 0221 Q_DECLARE_PRIVATE(WirelessDevice) 0222 }; 0223 0224 } // namespace NetworkManager 0225 #endif // NETWORKMANAGERQT_WIRELESSDEVICE_H