Index: scripts/wifi_read_network_info.sh =================================================================== diff -u --- scripts/wifi_read_network_info.sh (revision 0) +++ scripts/wifi_read_network_info.sh (revision a39588d07df5f8723abc79115c974965d0cad1e4) @@ -0,0 +1,26 @@ +#!/bin/sh +########################################################################### +# +# Copyright (c) 2021-2023 Diality Inc. - All Rights Reserved. +# +# 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 wifi_read_network_Info.sh +# +# @author (last) Behrouz NematiPour +# @date (last) 11-May-2021 +# @author (original) Behrouz NematiPour +# @date (original) 11-May-2021 +# +############################################################################ + +if [ $# -eq 0 ]; then + currentFile=$(basename "$0") + echo "Usage: ./$currentFile " + exit 0 +fi + +iface=$1 +iwconfig wlan0 + Index: sources/storage/StorageGlobals.cpp =================================================================== diff -u -raf8d98b36b427e2b5f4d6659fcf3b58ee79eab6a -ra39588d07df5f8723abc79115c974965d0cad1e4 --- sources/storage/StorageGlobals.cpp (.../StorageGlobals.cpp) (revision af8d98b36b427e2b5f4d6659fcf3b58ee79eab6a) +++ sources/storage/StorageGlobals.cpp (.../StorageGlobals.cpp) (revision a39588d07df5f8723abc79115c974965d0cad1e4) @@ -114,14 +114,6 @@ const char *Log_Folder_Treatment = "treatment/" ; // Treatment Log const char *Log_Folder_Pending = "treatment/pending/" ; // Treatment Log Pending, have not been saved on cloud yet. - - // FIXME : Not sure having global settings object is a good idea. -#ifdef BUILD_FOR_TARGET - QSettings WifiSettings("/home/root/wifi.ini", QSettings::IniFormat); -#else - QSettings WifiSettings("/home/denali/wifi.ini"); -#endif - // TODO : These need to be removed from here because they are only used in their specific classes. // Date and Time const char *Date_Time_Set_Sh = "date_time_set.sh"; @@ -142,16 +134,7 @@ const char *Wifi_Set_Gateway = "wifi_set_gateway.sh"; const char *Wifi_Set_SubnetMask = "wifi_set_subnetmask.sh"; const char *Wifi_Start_WPA_Supplicant = "wifi_start_wpa_supplicant.sh"; - const char *WifiSettings_SSID = "wifi/ssid"; - const char *WifiSettings_MacAddress = "wifi/macAddress"; - const char *WifiSettings_ConfPath = "wifi/confPath"; - const char *WifiSettings_Security_Types = "wifi/security"; - const char *WifiSettings_IPAddress = "wifi/ipAddress"; - const char *WifiSettings_Gateway = "wifi/gateway"; - const char *WifiSettings_SubnetMask = "wifi/subnetmask"; - const char *WifiSettings_DNS = "wifi/dns"; - const char *WifiSettings_UseDHCP = "wifi/useDHCP"; - + const char *Wifi_Read_Network_Info = "wifi_read_network_info.sh"; // Brightness const char *Brightness_Set = "brightness_set.sh"; const char *Brightness_Get = "brightness_get.sh"; Index: sources/storage/StorageGlobals.h =================================================================== diff -u -raf8d98b36b427e2b5f4d6659fcf3b58ee79eab6a -ra39588d07df5f8723abc79115c974965d0cad1e4 --- sources/storage/StorageGlobals.h (.../StorageGlobals.h) (revision af8d98b36b427e2b5f4d6659fcf3b58ee79eab6a) +++ sources/storage/StorageGlobals.h (.../StorageGlobals.h) (revision a39588d07df5f8723abc79115c974965d0cad1e4) @@ -93,19 +93,8 @@ extern const char *Wifi_Set_Gateway; extern const char *Wifi_Set_SubnetMask; extern const char *Wifi_Start_WPA_Supplicant; + extern const char *Wifi_Read_Network_Info; - // WiFi - Settings - extern QSettings WifiSettings; - extern const char *WifiSettings_SSID; - extern const char *WifiSettings_MacAddress; - extern const char *WifiSettings_ConfPath; - extern const char *WifiSettings_Security_Types; - extern const char *WifiSettings_IPAddress; - extern const char *WifiSettings_Gateway; - extern const char *WifiSettings_SubnetMask; - extern const char *WifiSettings_DNS; - extern const char *WifiSettings_UseDHCP; - // Brightness extern const char *Brightness_Set; extern const char *Brightness_Get; Index: sources/view/settings/VNetworkModel.cpp =================================================================== diff -u -rc7004835f88d3aea5e80bd39b5c1084fdbb8c3c8 -ra39588d07df5f8723abc79115c974965d0cad1e4 --- sources/view/settings/VNetworkModel.cpp (.../VNetworkModel.cpp) (revision c7004835f88d3aea5e80bd39b5c1084fdbb8c3c8) +++ sources/view/settings/VNetworkModel.cpp (.../VNetworkModel.cpp) (revision a39588d07df5f8723abc79115c974965d0cad1e4) @@ -91,8 +91,6 @@ connect(this, SIGNAL(didRequestSetDNS (const QString &)), &_WifiInterface, SLOT( doRequestSetDNS (const QString &))); - - } /*! Index: sources/wifi/WifiInterface.cpp =================================================================== diff -u -r081df84b4b81ab39296f42c3c7e91deb021b8979 -ra39588d07df5f8723abc79115c974965d0cad1e4 --- sources/wifi/WifiInterface.cpp (.../WifiInterface.cpp) (revision 081df84b4b81ab39296f42c3c7e91deb021b8979) +++ sources/wifi/WifiInterface.cpp (.../WifiInterface.cpp) (revision a39588d07df5f8723abc79115c974965d0cad1e4) @@ -21,6 +21,7 @@ #include // Project + #include "main.h" #include "Logger.h" @@ -40,6 +41,7 @@ _processSetStaticGateway .setParent(this); _processSetStaticSubnetMask .setParent(this); _processSetDNS .setParent(this); + _processReadNetworkInfo .setParent(this); } @@ -50,38 +52,18 @@ */ bool WifiInterface::hasConnectedToWifi() { - if (WifiSettings.value(WifiSettings_MacAddress).toString().isEmpty()) - return false; - if (!QFile(_wpaSupplicantConfPath).exists()) return false; return true; } /*! - * \brief WifiInterface::getLastWifiNetworkConnectedTo - * Gets the last network we connected to from settings - * \return (Network) the network we last connected to - */ -WifiNetworkData WifiInterface::getLastWifiNetworkConnectedTo() -{ - QString macAddress = WifiSettings.value(WifiSettings_MacAddress).toString(); - QString ssid = WifiSettings.value(WifiSettings_SSID).toString(); - QList securityTypesVar = WifiSettings.value(WifiSettings_Security_Types).toList(); - MWifiNetwork::STATUS status = MWifiNetwork::STATUS::NOT_CONNECTED; - MWifiNetwork::SIGNAL_LEVEL signalLevel = MWifiNetwork::SIGNAL_LEVEL::NO_SIGNAL; - _useDHCP = WifiSettings.value(WifiSettings_UseDHCP).toBool(); - return WifiNetworkData(macAddress, ssid, variantListToSecurityTypes(securityTypesVar), status, signalLevel); -} - -/*! * \brief WifiInterface::rejoinLastWifiNetwork * Attempts to rejoin the network we last connected to */ void WifiInterface::rejoinLastWifiNetwork() { - _network = getLastWifiNetworkConnectedTo(); if (_processStartWPASupplicant.state() != QProcess::NotRunning) { LOG_DEBUG(QString("Rejecting request for %1. %2 is already running.") @@ -130,6 +112,9 @@ connect(&_processSetStaticIPAddress , SIGNAL( finished(int, QProcess::ExitStatus)), this , SLOT( onProcessFinishedSetIPAddress(int, QProcess::ExitStatus))); + connect(&_processReadNetworkInfo , SIGNAL( finished(int, QProcess::ExitStatus)), + this , SLOT( onProcessFinishedReadNetworkInfo(int, QProcess::ExitStatus))); + connect(&_processSetStaticGateway , SIGNAL( finished(int, QProcess::ExitStatus)), this , SLOT( onProcessFinishedSetGateway(int, QProcess::ExitStatus))); @@ -356,6 +341,7 @@ if ( securityTypes.isEmpty() ) { securityTypes.append(MWifiNetwork::SECURITY_TYPE::WEP); } + WifiNetworkData network(macAddress, ssid, securityTypes, MWifiNetwork::STATUS::NOT_CONNECTED, signalLevel, requiresKey); networks.append(network); emit didAddNetwork(network); @@ -385,7 +371,6 @@ { _network = vNetwork; _useDHCP = true; - WifiSettings.setValue(WifiSettings_UseDHCP, _useDHCP); LOG_DEBUG(QString("Joining Network %1").arg(vNetwork.ssid())); if (_processGenerateWPASupplicant.state() != QProcess::NotRunning) { @@ -410,10 +395,6 @@ } QString script; if ( ! checkScript(script, Wifi_Generate_WPA_Supplicant) ) return; - WifiSettings.setValue(WifiSettings_SSID, vNetwork.ssid()); - WifiSettings.setValue(WifiSettings_MacAddress, vNetwork.macAddress()); - WifiSettings.setValue(WifiSettings_ConfPath, _wpaSupplicantConfPath); - WifiSettings.setValue(WifiSettings_Security_Types, securityTypesToStringList(vNetwork.securityTypes())); _processGenerateWPASupplicant.start(script, QStringList() << vNetwork.ssid() << vPassword @@ -529,7 +510,27 @@ QStringList() << _iface); } + /*! + * \brief WifiInterface::doRequestNetworkInfo + * Handles a request to read the network macAddress + */ +void WifiInterface::doRequestNetworkInfo() +{ + if (_processReadNetworkInfo.state() != QProcess::NotRunning) + { + LOG_DEBUG(QString("Rejecting request for %1. %2 is already running.") + .arg(__FUNCTION__) + .arg(_processReadNetworkInfo.objectName())); + return; + } + QString script; if ( ! checkScript(script, Wifi_Read_Network_Info) ) return; + _processReadNetworkInfo.start(script, + QStringList() << _iface); +} + + +/*! * \brief WifiInterface::onProcessFinishedReadIP * Parses the IP settings of the device when the process has finished * \param vExitCode - (int) the exit code @@ -543,11 +544,34 @@ _network.mIPSettings.mIPAddress = parseIP(output); _network.mIPSettings.mBroadcast = parseBroadcast(output); _network.mIPSettings.mSubnetMask = parseSubnetMask(output); + + doRequestNetworkInfo(); +} + +/*! + * \brief WifiInterface::onProcessFinishedReadNetworkInfo + * Parses the network mac address of the device when the process has finished + * \param vExitCode - (int) the exit code + * \param vExitStatus - (QProcess::ExitStatus) the exit status + */ +void WifiInterface::onProcessFinishedReadNetworkInfo(int vExitCode, QProcess::ExitStatus vExitStatus) +{ + Q_UNUSED(vExitCode); + Q_UNUSED(vExitStatus); + + QString output = _processReadNetworkInfo.readAllStandardOutput(); + const QString networkMacAddress = parseNetworkMacAddress(output); + _network.macAddress(networkMacAddress.trimmed()); + + const QString networkSSid = parseNetworkSSID(output); + _network.ssid(networkSSid.trimmed()); + + qDebug()<< networkSSid; if (_processReadGateway.state() != QProcess::NotRunning) { LOG_DEBUG(QString("Rejecting request for %1. %2 is already running.") - .arg(__FUNCTION__) - .arg(_processReadGateway.objectName())); + .arg(__FUNCTION__) + .arg(_processReadGateway.objectName())); return; } QString script; if ( ! checkScript(script, Wifi_Read_Gateway) ) return; @@ -591,19 +615,11 @@ _network.mIPSettings.mDNS = parseDNS(_processReadDNS.readAllStandardOutput()); if (!_useDHCP) { - // Use current static IP settings - QString ipAddress = WifiSettings.value(WifiSettings_IPAddress).toString().trimmed(); - QString gateway = WifiSettings.value(WifiSettings_Gateway).toString().trimmed(); - QString subnetMask = WifiSettings.value(WifiSettings_SubnetMask).toString().trimmed(); - QString dns = WifiSettings.value(WifiSettings_DNS).toString().trimmed(); - if (!ipAddress.isEmpty()) - doRequestSetIPAddress(_network.mIPSettings.mIPAddress); - if (!gateway.isEmpty()) - doRequestSetGateway(_network.mIPSettings.mGateway); - if (!subnetMask.isEmpty()) - doRequestSetSubnetMask(_network.mIPSettings.mSubnetMask); - if (!dns.isEmpty()) - doRequestSetDNS(_network.mIPSettings.mDNS); + // Use current static IP settings defaults + doRequestSetIPAddress(_network.mIPSettings.mIPAddress); + doRequestSetGateway(_network.mIPSettings.mGateway); + doRequestSetSubnetMask(_network.mIPSettings.mSubnetMask); + doRequestSetDNS(_network.mIPSettings.mDNS); } emit didConnectToNetwork(_network); } @@ -686,6 +702,32 @@ } /*! + * \brief WifiInterface::parseNetworkMacAddress + * Parses the network macAddress from the provided output + * \param vOutput - (QString) the console output + * \return (QString) the subnet mask if found, "" otherwise + */ +QString WifiInterface::parseNetworkMacAddress(const QString &vOutput) +{ + const QString leftDelim = "Access Point:"; + const QString rightDelim = "Bit Rate="; + return getTextBetweenDelimiters(vOutput, leftDelim, rightDelim); +} + +/*! + * \brief WifiInterface::parseNetworkSSID + * Parses the network ssid from the provided output + * \param vOutput - (QString) the console output + * \return (QString) the subnet mask if found, "" otherwise + */ +QString WifiInterface::parseNetworkSSID(const QString &vOutput) +{ + const QString leftDelim = "ESSID:\""; + const QString rightDelim = "\""; + return getTextBetweenDelimiters(vOutput, leftDelim, rightDelim); +} + +/*! * \brief WifiInterface::parseGateway * Parses the gateway from the provided output * \param vOutput - (QString) the console output @@ -728,9 +770,7 @@ return; } QString script; if ( ! checkScript(script, Wifi_Set_Static_IP) ) return; - WifiSettings.setValue(WifiSettings_IPAddress, vIPAddress); _useDHCP = false; - WifiSettings.setValue(WifiSettings_UseDHCP, _useDHCP); _processSetStaticIPAddress.start(script, QStringList() << _iface << vIPAddress); } @@ -770,9 +810,7 @@ return; } QString script; if ( ! checkScript(script, Wifi_Set_Gateway) ) return; - WifiSettings.setValue(WifiSettings_Gateway, vGateway); _useDHCP = false; - WifiSettings.setValue(WifiSettings_UseDHCP, _useDHCP); _processSetStaticGateway.start(script, QStringList() << vGateway); } @@ -811,9 +849,7 @@ return; } QString script; if ( ! checkScript(script, Wifi_Set_SubnetMask) ) return; - WifiSettings.setValue(WifiSettings_SubnetMask, vSubnetMask); _useDHCP = false; - WifiSettings.setValue(WifiSettings_UseDHCP, _useDHCP); _processSetStaticSubnetMask.start(script, QStringList() << _iface << vSubnetMask); } @@ -851,7 +887,6 @@ return; } QString script; if ( ! checkScript(script, Wifi_Set_DNS ) ) return; - WifiSettings.setValue(WifiSettings_DNS, vDNS); _processSetDNS.start(script, QStringList() << vDNS); } Index: sources/wifi/WifiInterface.h =================================================================== diff -u -r081df84b4b81ab39296f42c3c7e91deb021b8979 -ra39588d07df5f8723abc79115c974965d0cad1e4 --- sources/wifi/WifiInterface.h (.../WifiInterface.h) (revision 081df84b4b81ab39296f42c3c7e91deb021b8979) +++ sources/wifi/WifiInterface.h (.../WifiInterface.h) (revision a39588d07df5f8723abc79115c974965d0cad1e4) @@ -68,6 +68,7 @@ QProcess _processSetStaticGateway; QProcess _processSetStaticSubnetMask; QProcess _processSetDNS; + QProcess _processReadNetworkInfo; WifiNetworkData _network; const QString _scriptsFolder = Storage::Scripts_Path_Name; @@ -86,11 +87,12 @@ QString parseSubnetMask(const QString &vOutput); QString parseGateway(const QString &vOutput); QString parseDNS(const QString &vOutput); + QString parseNetworkMacAddress(const QString &vOutput); + QString parseNetworkSSID(const QString &vOutput); void initConnections(); void initThread(QThread &vThread); void quitThread(); bool hasConnectedToWifi(); - WifiNetworkData getLastWifiNetworkConnectedTo(); void rejoinLastWifiNetwork(); QStringList securityTypesToStringList(const QList &securityTypes); QList variantListToSecurityTypes(const QList &securityTypesVar); @@ -104,6 +106,7 @@ void doJoinNetwork (const WifiNetworkData &vNetwork, const QString &vPassword); void doDisconnectNetwork (const WifiNetworkData &vNetwork); void doRequestIPSettings (); + void doRequestNetworkInfo (); // static IP address assignment void doRequestSetIPAddress (const QString &vIPAddress ); @@ -145,6 +148,7 @@ void onProcessFinishedSetGateway (int vExitCode, QProcess::ExitStatus vExitStatus); void onProcessFinishedSetSubnetMask (int vExitCode, QProcess::ExitStatus vExitStatus); void onProcessFinishedSetDNS (int vExitCode, QProcess::ExitStatus vExitStatus); + void onProcessFinishedReadNetworkInfo (int vExitCode, QProcess::ExitStatus vExitStatus); SAFE_CALL(doStart) };