Index: sources/wifi/WifiInterface.cpp =================================================================== diff -u -r2e97d4783dc34f6953c3602e607900bca26443ff -rdb52d097addadd2eef6102340778be143ee81df4 --- sources/wifi/WifiInterface.cpp (.../WifiInterface.cpp) (revision 2e97d4783dc34f6953c3602e607900bca26443ff) +++ sources/wifi/WifiInterface.cpp (.../WifiInterface.cpp) (revision db52d097addadd2eef6102340778be143ee81df4) @@ -224,7 +224,7 @@ * Scans for WiFi Access Points */ void WifiInterface::doScan() -{ +{ if (_scanRunning) { LOG_DEBUG("WiFi network scan is already running."); return; @@ -256,7 +256,7 @@ LOG_DEBUG(QString("stderr: %1").arg(err)); _scanRunning = false; emit didScanStatusChanged(_scanRunning); - parseWifiScanResult(out); + parseWifiScan(out); LOG_DEBUG("WiFi Scan Finished"); } @@ -283,151 +283,6 @@ } /*! - * \brief Network::parseWifiScanResult - * \details Extract desired information from the WiFi scan output. Sorts by signal stength - * \param vResult - (QString) output collected from QProcess execution - * \return List of the Found SSIDs in a model. - */ -QList WifiInterface::parseWifiScanResult(const QString &vResult) -{ - enum SSIDInfo_Enum { - eSSID , - eBSSID , - eFREQ , - eRATE , - eSIGNAL , - eSECURITY , - eWPA_FLAGS , - eRSN_FLAGS , - eIN_USE , - }; - enum ValueUnit_Enum { - eValue , - eUnit , - eCount , - }; - - struct SSIDInfo { - QString mSSID ; - QString mBSSID ; - QString mFREQ_Max ; - QString mRATE_Max ; - quint16 mSIGNAL_Max ; - QString mSECURITY ; - QString mFLAGS ; // eWPA_FLAGS, eRSN_FLAGS are exclusive - bool mIN_USE = false ; - bool mSupported = true ; - QString toString() { - QStringList fields = QStringList() - << mSSID - << mBSSID - << mFREQ_Max - << mRATE_Max - << QString::number(mSIGNAL_Max) - << mSECURITY - << mFLAGS - << (mSupported ? "T" : "") - << (mIN_USE ? "T" : ""); - return fields.join(','); - } - }; - - QString mResult = vResult; - - SSIDInfo data; - QHash mSSIDInfoList; - - // the Freq, Rate units - QString mSSID; - const QString mFREQ_Unit = " MHz"; - const QString mRATE_Unit = " Mbit/s"; - quint32 mFREQ_Value = 0; - quint32 mRATE_Value = 0; - // Removing the units once from the result to accelerate parsing. (will be added when done) - mResult.remove(mFREQ_Unit); - mResult.remove(mRATE_Unit); - - QStringList lines = mResult.split('\n'); - for ( int row = 0; row < lines.count(); row++ ) { - QStringList fields = lines[row].split(','); - if ( fields[eSSID].trimmed().isEmpty() ) continue; // hidden networks, or an incorrect entry - - QString mWPA_FLAGS; - QString mRSN_FLAGS; - - for ( int index = 0; index < fields.count(); index++ ) { // the list has to be sorted and the script is written that way. - QString field = fields[index].trimmed(); - - if ( row ) { // if is not first row - if ( mSSID == fields[eSSID] ) { // if is the same SSID just update necessary fields - quint32 value = 0; - switch (index) { - case eFREQ : - value = QString("%1").arg(field).toInt(); - if ( mFREQ_Value < value ) { mFREQ_Value = value; } break; - case eRATE : - value = QString("%1").arg(field).toInt(); - if ( mRATE_Value < value ) { mRATE_Value = value; } break; - case eSIGNAL : - value = QString("%1").arg(field).toInt(); - if ( data.mSIGNAL_Max < value ) { data.mSIGNAL_Max = value; } break; - case eIN_USE : data.mIN_USE = field.contains("*"); break; - default: break; - } - } - else { // else add the previous one and continue to the next. - if ( ! mSSID.trimmed().isEmpty() ) { - data.mSSID = mSSID; - data.mFREQ_Max += QString::number(mFREQ_Value) + mFREQ_Unit; - data.mRATE_Max += QString::number(mRATE_Value) + mRATE_Unit; - mSSIDInfoList[mSSID] = data; - qDebug() << data.toString(); - } - // clean up / reset - data.mFREQ_Max = ""; - data.mRATE_Max = ""; - data.mFLAGS = ""; - } - } - - switch (index) { // DO NOT USE default in this switch - case eSSID : mSSID = field; break; - case eBSSID :/* data.mBSSID = field; */ break; // not directly used for now - case eFREQ : mFREQ_Value = QString("%1").arg(field).toInt(); break; - case eRATE : mRATE_Value = QString("%1").arg(field).toInt(); break; - case eSIGNAL : data.mSIGNAL_Max = QString("%1").arg(field).toInt(); break; - case eIN_USE : data.mIN_USE = field.contains("*"); break; - - case eSECURITY : - data.mSECURITY = field; - if ( field.isEmpty() ) { - data.mSupported = false; - } else { - data.mSupported = field.remove(QRegExp("(WPA[23])")).trimmed().isEmpty(); - } - break; - - case eWPA_FLAGS : - if ( field.contains("tkip") ) { mWPA_FLAGS += " TKIP" ; data.mSupported = false; } - if ( field.contains("ccmp") ) { mWPA_FLAGS += " AES" ; } - if ( ! mWPA_FLAGS.isEmpty() ) { data.mFLAGS = mWPA_FLAGS.trimmed(); } - break; - - case eRSN_FLAGS : - if ( field.contains("tkip") ) { mRSN_FLAGS += " TKIP" ; data.mSupported = false; } - if ( field.contains("ccmp") ) { mRSN_FLAGS += " AES" ; } - if ( field.contains("sae" ) ) { mRSN_FLAGS += " SAE" ; } - if ( ! mRSN_FLAGS.isEmpty() ) { data.mFLAGS = mRSN_FLAGS.trimmed(); } - break; - } - } - } - return {}; -} - - - -/*! * \brief Network::parseWifiScan * Extract desired information from the WiFi scan output. Sorts by signal stength *