Index: sources/wifi/WifiInterface.cpp =================================================================== diff -u -r6c6f1f5d466badd9b4fd67be7c907234c342b2a2 -r14e9940ccba0c2d64b5e16aa34edcb995f0563fd --- sources/wifi/WifiInterface.cpp (.../WifiInterface.cpp) (revision 6c6f1f5d466badd9b4fd67be7c907234c342b2a2) +++ sources/wifi/WifiInterface.cpp (.../WifiInterface.cpp) (revision 14e9940ccba0c2d64b5e16aa34edcb995f0563fd) @@ -1,13 +1,13 @@ /*! * - * Copyright (c) 2021-2023 Diality Inc. - All Rights Reserved. + * Copyright (c) 2021-2024 Diality Inc. - All Rights Reserved. * \copyright * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * \file WifiInterface.cpp - * \author (last) Vy - * \date (last) 17-May-2023 + * \author (last) Behrouz NematiPour + * \date (last) 26-Aug-2024 * \author (original) Behrouz NematiPour * \date (original) 11-May-2021 * @@ -73,7 +73,7 @@ } QString script; if ( ! checkScript(script, Wifi_Start_WPA_Supplicant) ) return; _processStartWPASupplicant.start(script, - QStringList() << _iface + QStringList() << iface() << _wpaSupplicantConfPath); } @@ -236,7 +236,7 @@ QString script; if ( ! checkScript(script, Wifi_Scan_For_Networks) ) return; _scanRunning = true; emit didScanStatusChanged(_scanRunning); - _processScan.start(script, QStringList() << _iface); + _processScan.start(script, QStringList() << iface()); LOG_DEBUG("WiFi Scan Started"); } @@ -320,9 +320,27 @@ bool requiresPSK = QRegularExpression("Authentication Suites.*PSK").match(element).hasMatch(); bool supportsTKIP = QRegularExpression("Pairwise Ciphers.*TKIP").match(element).hasMatch(); + // NOTE: the iwlist command does not have the SAE and displayes it as unknown but the (8) is the SAE which comes from the driver. + bool isWPA3Only = false; + bool supportsSAE = QRegularExpression("Authentication Suites.*unknown \\(8\\)").match(element).hasMatch(); + // NOTE: if it only supports SAE it means that is the WPA3-only + // NOTE: iwlist is not reporting the WPA3 SSID as WPA3 so the only indication is the SAE which belongs only to WPA3. + // IMPORTANT: ******************************************************************* + // NOTE: we do not support the OWE and ENTERPRISE yet and it is personal for now. + // ****************************************************************************** + if ( supportsSAE ) { + isWPA3Only = QRegularExpression("Authentication Suites \\(1\\) : unknown \\(8\\)").match(element).hasMatch(); + } + //DEBUG:qDebug() << element << supportsSAE; + MWifiNetwork::SECURITY_TYPE securityType = MWifiNetwork::SECURITY_TYPE::UNSUPPORTED; - if (isWPA2 && requiresPSK && supportsAES && !supportsTKIP) + + // NOTE: order of the if is very IMPORTANT + if ( supportsSAE ) // the wpa3 has the highest priority, and if supported we connect with wpa3 + securityType = isWPA3Only ? MWifiNetwork::SECURITY_TYPE::WPA3_SAE_ONLY: + MWifiNetwork::SECURITY_TYPE::WPA3_WPA2_TRNS; + else if (isWPA2 && requiresPSK && supportsAES && !supportsTKIP) securityType = MWifiNetwork::SECURITY_TYPE::WPA2_AES; else if (isWPA && requiresPSK && supportsAES && supportsTKIP) securityType = MWifiNetwork::SECURITY_TYPE::WPA_TKIP_AES; @@ -342,6 +360,7 @@ securityTypes.append(MWifiNetwork::SECURITY_TYPE::WEP); } + //DEBUG:qDebug() << macAddress << ssid << securityTypes << signalLevel << requiresKey; WifiNetworkData network(macAddress, ssid, securityTypes, MWifiNetwork::STATUS::NOT_CONNECTED, signalLevel, requiresKey); networks.append(network); emit didAddNetwork(network); @@ -380,11 +399,14 @@ return; } QString securityType; - if (vNetwork.securityTypes().contains(MWifiNetwork::SECURITY_TYPE::WPA2_AES)) + if (vNetwork.securityTypes().contains(MWifiNetwork::SECURITY_TYPE::WPA3_WPA2_TRNS) + || vNetwork.securityTypes().contains(MWifiNetwork::SECURITY_TYPE::WPA3_SAE_ONLY)) + securityType = "wpa3"; + else if (vNetwork.securityTypes().contains(MWifiNetwork::SECURITY_TYPE::WPA2_AES)) securityType = "wpa2"; else if (vNetwork.securityTypes().contains(MWifiNetwork::SECURITY_TYPE::WPA_TKIP_AES) - || vNetwork.securityTypes().contains(MWifiNetwork::SECURITY_TYPE::WPA_AES) - || vNetwork.securityTypes().contains(MWifiNetwork::SECURITY_TYPE::WPA_TKIP)) + || vNetwork.securityTypes().contains(MWifiNetwork::SECURITY_TYPE::WPA_AES) + || vNetwork.securityTypes().contains(MWifiNetwork::SECURITY_TYPE::WPA_TKIP)) securityType = "wpa"; else if (vNetwork.securityTypes().contains(MWifiNetwork::SECURITY_TYPE::WEP)) securityType = "wep"; @@ -398,7 +420,7 @@ _processGenerateWPASupplicant.start(script, QStringList() << vNetwork.ssid() << vPassword - << _wpaSupplicantConfPath + << iface() << securityType); } @@ -426,7 +448,7 @@ } QString script; if ( ! checkScript(script, Wifi_Start_WPA_Supplicant) ) return; _processStartWPASupplicant.start(script, - QStringList() << _iface + QStringList() << iface() << _wpaSupplicantConfPath); } @@ -463,7 +485,7 @@ QString progressDot = QString(".").repeated(_dhcpAttempts - _dhcpAttemptsLeft); emit didStatusChanged(tr("%1.Obtaining IP Address.%1").arg(progressDot)); QString script; if ( ! checkScript(script, Wifi_Get_Auto_Assigned_IP) ) return; - _processRequestAutoAssignedIP.start(script, QStringList() << _iface); + _processRequestAutoAssignedIP.start(script, QStringList() << iface()); } /*! @@ -507,7 +529,7 @@ } QString script; if ( ! checkScript(script, Wifi_Read_IP_Settings) ) return; _processReadIPSettings.start(script, - QStringList() << _iface); + QStringList() << iface()); } @@ -526,7 +548,7 @@ } QString script; if ( ! checkScript(script, Wifi_Read_Network_Info) ) return; _processReadNetworkInfo.start(script, - QStringList() << _iface); + QStringList() << iface()); } @@ -644,7 +666,7 @@ } QString script; if ( ! checkScript(script, Wifi_Disconnect_Network) ) return; _processDisconnectNetwork.start(script, - QStringList() << _iface); + QStringList() << iface()); } /*! @@ -775,7 +797,7 @@ QString script; if ( ! checkScript(script, Wifi_Set_Static_IP) ) return; _useDHCP = false; _processSetStaticIPAddress.start(script, - QStringList() << _iface << vIPAddress); + QStringList() << iface() << vIPAddress); } /*! @@ -854,7 +876,7 @@ QString script; if ( ! checkScript(script, Wifi_Set_SubnetMask) ) return; _useDHCP = false; _processSetStaticSubnetMask.start(script, - QStringList() << _iface << vSubnetMask); + QStringList() << iface() << vSubnetMask); } /*!