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); }