From a6176aedcfe6893c24f2f2975a6874273e9df15e Mon Sep 17 00:00:00 2001 From: Gatis Paeglis Date: Thu, 15 Jan 2015 14:53:36 +0100 Subject: Decode ASCII encoded SSID names This patch adds a decodeHexEncoded() utility function for decoding wpa_supplicant's hex encoded strings. Task-number: QTEE-817 Change-Id: I257a8892cdc48ce285561fd879b8a9ab0a50bfc4 Reviewed-by: Laszlo Agocs --- src/wifi/qwifimanager.cpp | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) (limited to 'src/wifi/qwifimanager.cpp') diff --git a/src/wifi/qwifimanager.cpp b/src/wifi/qwifimanager.cpp index bc236f2..319c9d9 100644 --- a/src/wifi/qwifimanager.cpp +++ b/src/wifi/qwifimanager.cpp @@ -20,6 +20,8 @@ #include "qwifinetworklistmodel_p.h" #include "qwifinetwork_p.h" #include "qwifimanager_p.h" +#include "qwifiutils_p.h" + #include "qwifidevice.h" #include @@ -98,7 +100,7 @@ void QWifiManagerPrivate::handleConnected() if (connectedNetwork.isEmpty()) return; - m_currentSSID = connectedNetwork.split('\t').at(1); + m_currentSSID = QWifiUtils::decodeHexEncoded(connectedNetwork.split('\t').at(1)); qCDebug(B2QT_WIFI) << "connected network: " << m_currentSSID; updateNetworkState(QWifiManager::ObtainingIPAddress); m_wifiController->call(QWifiController::AcquireIPAddress); @@ -167,20 +169,21 @@ QString QWifiManagerPrivate::call(const QString &command) actualCommand.prepend(prefix); #endif #endif - if (q_wifi_command(m_interface, actualCommand.toLatin1(), data, &len) < 0) { - qCDebug(B2QT_WIFI) << "call to supplicant failed: " << actualCommand; + qCDebug(B2QT_WIFI) << "call command: " << actualCommand.toLocal8Bit(); + if (q_wifi_command(m_interface, actualCommand.toLocal8Bit(), data, &len) < 0) { + qCDebug(B2QT_WIFI) << "call to supplicant failed!"; return QString(); } if (len < sizeof(data)) data[len] = 0; QString result = QLatin1String(data); - return result; + return result.trimmed(); } bool QWifiManagerPrivate::checkedCall(const QString &command) { - return call(command).trimmed().toUpper() == QLatin1String("OK"); + return call(command).toUpper() == QLatin1String("OK"); } void QWifiManagerPrivate::updateLastError(const QString &error) @@ -472,11 +475,12 @@ bool QWifiManager::connect(QWifiConfiguration *config) d->m_currentSSID = config->ssid(); bool networkKnown = false; QString id; - QString listResult = d->call(QStringLiteral("LIST_NETWORKS")); - QStringList lines = listResult.split('\n'); - foreach (const QString &line, lines) { - if (line.contains(d->m_currentSSID)) { - id = line.split('\t').at(0); + const QStringList configuredNetworks = d->call(QStringLiteral("LIST_NETWORKS")).split('\n'); + for (int i = 1; i < configuredNetworks.length(); ++i) { + const QStringList networkFields = configuredNetworks.at(i).split('\t'); + const QString ssid = QWifiUtils::decodeHexEncoded(networkFields.at(1)); + if (ssid == d->m_currentSSID) { + id = networkFields.at(0); networkKnown = true; break; } @@ -484,7 +488,7 @@ bool QWifiManager::connect(QWifiConfiguration *config) if (!networkKnown) { bool ok; - id = d->call(QStringLiteral("ADD_NETWORK")).trimmed(); + id = d->call(QStringLiteral("ADD_NETWORK")); id.toInt(&ok); if (!ok) { d->updateLastError(QStringLiteral("failed to add network!")); -- cgit v1.2.3