Warning, file /frameworks/networkmanager-qt/src/wirelessdevice.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 /* 0002 SPDX-FileCopyrightText: 2008, 2011 Will Stephenson <wstephenson@kde.org> 0003 SPDX-FileCopyrightText: 2013 Daniel Nicoletti <dantti12@gmail.com> 0004 SPDX-FileCopyrightText: 2013 Jan Grulich <jgrulich@redhat.com> 0005 0006 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0007 */ 0008 0009 #include "wirelessdevice.h" 0010 #include "wirelessdevice_p.h" 0011 0012 #undef signals 0013 #include <libnm/NetworkManager.h> 0014 #define signals Q_SIGNALS 0015 0016 #include "manager_p.h" 0017 0018 #include "nmdebug.h" 0019 #include "utils.h" 0020 0021 NetworkManager::WirelessDevicePrivate::WirelessDevicePrivate(const QString &path, WirelessDevice *q) 0022 : DevicePrivate(path, q) 0023 #ifdef NMQT_STATIC 0024 , wirelessIface(NetworkManagerPrivate::DBUS_SERVICE, path, QDBusConnection::sessionBus()) 0025 #else 0026 , wirelessIface(NetworkManagerPrivate::DBUS_SERVICE, path, QDBusConnection::systemBus()) 0027 #endif 0028 , bitRate(0) 0029 { 0030 } 0031 0032 NetworkManager::WirelessDevice::WirelessDevice(const QString &path, QObject *parent) 0033 : Device(*new WirelessDevicePrivate(path, this), parent) 0034 { 0035 Q_D(WirelessDevice); 0036 0037 qDBusRegisterMetaType<QList<QDBusObjectPath>>(); 0038 0039 #ifdef NMQT_STATIC 0040 connect(&d->wirelessIface, &OrgFreedesktopNetworkManagerDeviceWirelessInterface::PropertiesChanged, d, &WirelessDevicePrivate::propertiesChanged); 0041 #endif 0042 0043 connect(&d->wirelessIface, &OrgFreedesktopNetworkManagerDeviceWirelessInterface::AccessPointAdded, d, &WirelessDevicePrivate::accessPointAdded); 0044 connect(&d->wirelessIface, &OrgFreedesktopNetworkManagerDeviceWirelessInterface::AccessPointRemoved, d, &WirelessDevicePrivate::accessPointRemoved); 0045 0046 const QList<QDBusObjectPath> aps = d->wirelessIface.accessPoints(); 0047 // qCDebug(NMQT) << "AccessPoint list"; 0048 for (const QDBusObjectPath &op : aps) { 0049 // qCDebug(NMQT) << " " << op.path(); 0050 d->accessPointAdded(op); 0051 } 0052 0053 // Get all WirelessDevices's properties at once 0054 QVariantMap initialProperties = NetworkManagerPrivate::retrieveInitialProperties(d->wirelessIface.staticInterfaceName(), path); 0055 if (!initialProperties.isEmpty()) { 0056 d->propertiesChanged(initialProperties); 0057 } 0058 0059 } 0060 0061 NetworkManager::WirelessDevice::~WirelessDevice() 0062 { 0063 } 0064 0065 NetworkManager::Device::Type NetworkManager::WirelessDevice::type() const 0066 { 0067 return NetworkManager::Device::Wifi; 0068 } 0069 0070 QStringList NetworkManager::WirelessDevice::accessPoints() const 0071 { 0072 Q_D(const WirelessDevice); 0073 return d->apMap.keys(); 0074 } 0075 0076 QDBusPendingReply<> NetworkManager::WirelessDevice::requestScan(const QVariantMap &options) 0077 { 0078 Q_D(WirelessDevice); 0079 d->lastRequestScan = QDateTime::currentDateTime(); 0080 return d->wirelessIface.RequestScan(options); 0081 } 0082 0083 NetworkManager::AccessPoint::Ptr NetworkManager::WirelessDevice::activeAccessPoint() const 0084 { 0085 Q_D(const WirelessDevice); 0086 return d->activeAccessPoint; 0087 } 0088 0089 QString NetworkManager::WirelessDevice::hardwareAddress() const 0090 { 0091 Q_D(const WirelessDevice); 0092 return d->hardwareAddress; 0093 } 0094 0095 QString NetworkManager::WirelessDevice::permanentHardwareAddress() const 0096 { 0097 Q_D(const WirelessDevice); 0098 return d->permanentHardwareAddress; 0099 } 0100 0101 NetworkManager::WirelessDevice::OperationMode NetworkManager::WirelessDevice::mode() const 0102 { 0103 Q_D(const WirelessDevice); 0104 return d->mode; 0105 } 0106 0107 int NetworkManager::WirelessDevice::bitRate() const 0108 { 0109 Q_D(const WirelessDevice); 0110 return d->bitRate; 0111 } 0112 0113 QDateTime NetworkManager::WirelessDevice::lastScan() const 0114 { 0115 Q_D(const WirelessDevice); 0116 return d->lastScan; 0117 } 0118 0119 QDateTime NetworkManager::WirelessDevice::lastRequestScan() const 0120 { 0121 Q_D(const WirelessDevice); 0122 return d->lastRequestScan; 0123 } 0124 0125 NetworkManager::WirelessDevice::Capabilities NetworkManager::WirelessDevice::wirelessCapabilities() const 0126 { 0127 Q_D(const WirelessDevice); 0128 return d->wirelessCapabilities; 0129 } 0130 0131 NetworkManager::AccessPoint::Ptr NetworkManager::WirelessDevice::findAccessPoint(const QString &uni) 0132 { 0133 Q_D(WirelessDevice); 0134 NetworkManager::AccessPoint::Ptr accessPoint; 0135 0136 QMap<QString, NetworkManager::AccessPoint::Ptr>::ConstIterator mapIt = d->apMap.constFind(uni); 0137 if (mapIt != d->apMap.constEnd()) { 0138 accessPoint = mapIt.value(); 0139 } else if (!uni.isEmpty() && uni != QLatin1String("/")) { 0140 d->accessPointAdded(QDBusObjectPath(uni)); 0141 mapIt = d->apMap.constFind(uni); 0142 if (mapIt != d->apMap.constEnd()) { 0143 accessPoint = mapIt.value(); 0144 } 0145 } 0146 0147 return accessPoint; 0148 } 0149 0150 NetworkManager::WirelessNetwork::List NetworkManager::WirelessDevice::networks() const 0151 { 0152 Q_D(const WirelessDevice); 0153 return d->networks.values(); 0154 } 0155 0156 NetworkManager::WirelessNetwork::Ptr NetworkManager::WirelessDevice::findNetwork(const QString &ssid) const 0157 { 0158 Q_D(const WirelessDevice); 0159 NetworkManager::WirelessNetwork::Ptr ret; 0160 if (d->networks.contains(ssid)) { 0161 ret = d->networks.value(ssid); 0162 } 0163 return ret; 0164 } 0165 0166 void NetworkManager::WirelessDevicePrivate::accessPointAdded(const QDBusObjectPath &accessPoint) 0167 { 0168 // kDebug(1441) << apPath.path(); 0169 Q_Q(WirelessDevice); 0170 0171 if (!apMap.contains(accessPoint.path())) { 0172 NetworkManager::AccessPoint::Ptr accessPointPtr(new NetworkManager::AccessPoint(accessPoint.path()), &QObject::deleteLater); 0173 apMap.insert(accessPoint.path(), accessPointPtr); 0174 Q_EMIT q->accessPointAppeared(accessPoint.path()); 0175 0176 const QString ssid = accessPointPtr->ssid(); 0177 if (!ssid.isEmpty() && !networks.contains(ssid)) { 0178 NetworkManager::WirelessNetwork::Ptr wifiNetwork(new NetworkManager::WirelessNetwork(accessPointPtr, q), &QObject::deleteLater); 0179 networks.insert(ssid, wifiNetwork); 0180 connect(wifiNetwork.data(), &WirelessNetwork::disappeared, this, &WirelessDevicePrivate::removeNetwork); 0181 Q_EMIT q->networkAppeared(ssid); 0182 } 0183 } 0184 } 0185 0186 void NetworkManager::WirelessDevicePrivate::accessPointRemoved(const QDBusObjectPath &accessPoint) 0187 { 0188 // kDebug(1441) << apPath.path(); 0189 Q_Q(WirelessDevice); 0190 if (!apMap.contains(accessPoint.path())) { 0191 qCDebug(NMQT) << "Access point list lookup failed for " << accessPoint.path(); 0192 } 0193 Q_EMIT q->accessPointDisappeared(accessPoint.path()); 0194 apMap.remove(accessPoint.path()); 0195 } 0196 0197 void NetworkManager::WirelessDevicePrivate::removeNetwork(const QString &network) 0198 { 0199 Q_Q(WirelessDevice); 0200 0201 if (networks.contains(network)) { 0202 networks.remove(network); 0203 Q_EMIT q->networkDisappeared(network); 0204 } 0205 } 0206 0207 void NetworkManager::WirelessDevicePrivate::propertyChanged(const QString &property, const QVariant &value) 0208 { 0209 Q_Q(WirelessDevice); 0210 0211 if (property == QLatin1String("ActiveAccessPoint")) { 0212 QDBusObjectPath activeAccessPointTmp = qdbus_cast<QDBusObjectPath>(value); 0213 activeAccessPoint = q->findAccessPoint(activeAccessPointTmp.path()); 0214 Q_EMIT q->activeAccessPointChanged(activeAccessPointTmp.path()); 0215 } else if (property == QLatin1String("HwAddress")) { 0216 hardwareAddress = value.toString(); 0217 Q_EMIT q->hardwareAddressChanged(hardwareAddress); 0218 } else if (property == QLatin1String("PermHwAddress")) { 0219 permanentHardwareAddress = value.toString(); 0220 Q_EMIT q->permanentHardwareAddressChanged(permanentHardwareAddress); 0221 } else if (property == QLatin1String("Bitrate")) { 0222 bitRate = value.toUInt(); 0223 Q_EMIT q->bitRateChanged(bitRate); 0224 } else if (property == QLatin1String("Mode")) { 0225 mode = q->convertOperationMode(value.toUInt()); 0226 Q_EMIT q->modeChanged(mode); 0227 } else if (property == QLatin1String("WirelessCapabilities")) { 0228 wirelessCapabilities = q->convertCapabilities(value.toUInt()); 0229 Q_EMIT q->wirelessCapabilitiesChanged(wirelessCapabilities); 0230 } else if (property == QLatin1String("LastScan")) { 0231 lastScan = NetworkManager::clockBootTimeToDateTime(value.toLongLong()); 0232 Q_EMIT q->lastScanChanged(lastScan); 0233 } else if (property == QLatin1String("AccessPoints")) { 0234 // TODO use this instead AccessPointAdded/Removed signals? 0235 } else { 0236 DevicePrivate::propertyChanged(property, value); 0237 } 0238 } 0239 0240 NetworkManager::WirelessDevice::OperationMode NetworkManager::WirelessDevice::convertOperationMode(uint theirMode) 0241 { 0242 NetworkManager::WirelessDevice::OperationMode ourMode = NetworkManager::WirelessDevice::Unknown; 0243 switch (theirMode) { 0244 case NM_802_11_MODE_UNKNOWN: 0245 ourMode = NetworkManager::WirelessDevice::Unknown; 0246 break; 0247 case NM_802_11_MODE_ADHOC: 0248 ourMode = NetworkManager::WirelessDevice::Adhoc; 0249 break; 0250 case NM_802_11_MODE_INFRA: 0251 ourMode = NetworkManager::WirelessDevice::Infra; 0252 break; 0253 case NM_802_11_MODE_AP: 0254 ourMode = NetworkManager::WirelessDevice::ApMode; 0255 break; 0256 default: 0257 qCDebug(NMQT) << Q_FUNC_INFO << "Unhandled mode" << theirMode; 0258 } 0259 return ourMode; 0260 } 0261 0262 NetworkManager::WirelessDevice::Capabilities NetworkManager::WirelessDevice::convertCapabilities(uint caps) 0263 { 0264 return (NetworkManager::WirelessDevice::Capabilities)caps; 0265 }