diff -r 63be7eb3fc78 -r f28ada11abbf wlanutilities/wlanqtutilities/wrapper/src/wlanqtutilsscanap_symbian.cpp --- a/wlanutilities/wlanqtutilities/wrapper/src/wlanqtutilsscanap_symbian.cpp Tue Aug 31 16:18:40 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,428 +0,0 @@ -/* -* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* Symbian platform specific implementation of WLAN AP scanning. -*/ - -// System includes - -#include -#include -#include - -// User includes - -#include "wlanqtutils.h" -#include "wlanqtutilsap.h" -#include "wlanqtutilsscan.h" -#include "wlanqtutilsscanap_symbian.h" - -#include "OstTraceDefinitions.h" -#ifdef OST_TRACE_COMPILER_IN_USE -#include "wlanqtutilsscanap_symbianTraces.h" -#endif - - -/*! - \class WlanQtUtilsScanApPrivate - \brief Symbian platform specific implementation of WLAN AP scanning. - - Symbian platform specific implementation of WLAN AP scanning. -*/ - - -// External function prototypes - -// Local constants - -// Information Element ID for SSID as specified in 802.11. -static const TUint8 KWlan802Dot11SsidIE = 0; - -// Bit mask for Capability info field to get type (Infra/AdHoc). -static const TUint8 KWlan802Dot11CapabilityEssMask = 0x0001; - -// ======== LOCAL FUNCTIONS ======== - -// ======== MEMBER FUNCTIONS ======== - -/*! - Static factory constructor. - - @param [in,out] wrapper Public implementation class reference. - - @return New instance of the class. -*/ - -WlanQtUtilsScanApPrivate *WlanQtUtilsScanApPrivate::NewL(WlanQtUtilsScan *wrapper) -{ - OstTraceFunctionEntry0(WLANQTUTILSSCANAPPRIVATE_NEWL_ENTRY); - - WlanQtUtilsScanApPrivate *self = new (ELeave) WlanQtUtilsScanApPrivate(wrapper); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - - OstTraceFunctionExit0(WLANQTUTILSSCANAPPRIVATE_NEWL_EXIT); - return self; -} - -/*! - Destructor. -*/ - -WlanQtUtilsScanApPrivate::~WlanQtUtilsScanApPrivate() -{ - OstTraceFunctionEntry0(WLANQTUTILSSCANAPPRIVATE_WLANQTUTILSSCANAPPRIVATE_ENTRY); - - Cancel(); - delete mWlanMgmtClient; - mWlanMgmtClient = NULL; - delete mResults; - mResults = NULL; - - OstTraceFunctionExit0(WLANQTUTILSSCANAPPRIVATE_WLANQTUTILSSCANAPPRIVATE_EXIT); -} - -/*! - Starts a broadcast scan of available access points. -*/ - -void WlanQtUtilsScanApPrivate::Scan() -{ - OstTraceFunctionEntry0(WLANQTUTILSSCANAPPRIVATE_SCAN_ENTRY); - - // Scanning while previous scan is not complete is not supported - Q_ASSERT(!IsActive()); - - // Make the scan - mWlanMgmtClient->GetScanResults(iStatus, *mResults); - SetActive(); - - OstTraceFunctionExit0(WLANQTUTILSSCANAPPRIVATE_SCAN_EXIT); -} - -/*! - Starts a direct scan of available access points having given SSID. - - @param ssid SSID to scan. -*/ - -void WlanQtUtilsScanApPrivate::Scan(const QString &ssid) -{ - OstTraceFunctionEntry0(WLANQTUTILSSCANAPPRIVATE_SCAN_SSID_ENTRY); - - // Scanning while previous scan is not complete is not supported - Q_ASSERT(!IsActive()); - - // Convert from QString to TBuf8 - TBuf buffer(ssid.utf16()); - TInt error = CnvUtfConverter::ConvertFromUnicodeToUtf8(mWlanSsid, buffer); - qt_symbian_throwIfError(error); - - OstTraceExt1( - TRACE_NORMAL, - WLANQTUTILSSCANAPPRIVATE_SCAN_SSID, - "WlanQtUtilsScanApPrivate::Scan;mWlanSsid=%s", - mWlanSsid); - - // Make the scan - mWlanMgmtClient->GetScanResults(mWlanSsid, iStatus, *mResults); - SetActive(); - - OstTraceFunctionExit0(WLANQTUTILSSCANAPPRIVATE_SCAN_SSID_EXIT); -} - -/*! - Stops an ongoing scan. -*/ - -void WlanQtUtilsScanApPrivate::StopScan() -{ - OstTraceFunctionEntry0(WLANQTUTILSSCANAPPRIVATE_STOPSCAN_ENTRY); - - Cancel(); - - OstTraceFunctionExit0(WLANQTUTILSSCANAPPRIVATE_STOPSCAN_EXIT); -} - -/*! - Scan results handler. -*/ - -void WlanQtUtilsScanApPrivate::RunL() -{ - OstTraceFunctionEntry0(WLANQTUTILSSCANAPPRIVATE_RUNL_ENTRY); - - QT_TRYCATCH_LEAVING( - if (iStatus != KErrNone) { - // Scan failed - emit q_ptr->scanFailed(WlanQtUtils::ScanStatusError); - } else { - // Scan succeeded - QList< QSharedPointer > scanResults; - ExtractScanResults(scanResults); - - // Inform about the results - emit q_ptr->availableWlanAps(scanResults); - } - ); - - OstTraceFunctionExit0(WLANQTUTILSSCANAPPRIVATE_RUNL_EXIT); -} - -/*! - Cancels an outstanding request. -*/ - -void WlanQtUtilsScanApPrivate::DoCancel() -{ - OstTraceFunctionEntry0(WLANQTUTILSSCANAPPRIVATE_DOCANCEL_ENTRY); - - mWlanMgmtClient->CancelGetScanResults(); - - OstTraceFunctionExit0(WLANQTUTILSSCANAPPRIVATE_DOCANCEL_EXIT); -} - -/*! - Constructor. - - @param [in,out] wrapper Public implementation class reference. -*/ - -WlanQtUtilsScanApPrivate::WlanQtUtilsScanApPrivate(WlanQtUtilsScan *wrapper) : - CActive(EPriorityStandard), - q_ptr(wrapper), - mWlanMgmtClient(NULL), - mResults(NULL) -{ - OstTraceFunctionEntry0(DUP1_WLANQTUTILSSCANAPPRIVATE_WLANQTUTILSSCANAPPRIVATE_ENTRY); - OstTraceFunctionExit0(DUP1_WLANQTUTILSSCANAPPRIVATE_WLANQTUTILSSCANAPPRIVATE_EXIT); -} - -/*! - Second phase constructor. -*/ - -void WlanQtUtilsScanApPrivate::ConstructL() -{ - OstTraceFunctionEntry0(WLANQTUTILSSCANAPPRIVATE_CONSTRUCTL_ENTRY); - - CActiveScheduler::Add(this); - mWlanMgmtClient = CWlanMgmtClient::NewL(); - mResults = CWlanScanInfo::NewL(); - - OstTraceFunctionExit0(WLANQTUTILSSCANAPPRIVATE_CONSTRUCTL_EXIT); -} - -/* - Extracts scan results and stores them into the given AP list. - - @param [out] scanResults Scan result list. -*/ - -void WlanQtUtilsScanApPrivate::ExtractScanResults( - QList< QSharedPointer > &scanResults) -{ - for (mResults->First(); !mResults->IsDone(); mResults->Next()) { - // Create an access point for each result - QSharedPointer ap(new WlanQtUtilsAp()); - - // SSID - QString ssid = ExtractSsid(); - - // Skip over hidden networks. There is no spec for what - // their names will contain, but at least names with only - // null characters and whitespace characters are seen - // in real life. - if (ssid.trimmed().isEmpty()) { - continue; - } - ap->setValue(WlanQtUtilsAp::ConfIdSsid, ssid); - - // BSSID - QByteArray bssid = ExtractBssid(); - ap->setValue(WlanQtUtilsAp::ConfIdBssid, bssid); - - // Signal strength - ap->setValue( - WlanQtUtilsAp::ConfIdSignalStrength, - (int)mResults->RXLevel()); - - // Connection Mode - CMManagerShim::WlanConnMode connMode; - if (mResults->Capability() & KWlan802Dot11CapabilityEssMask) { - connMode = CMManagerShim::Infra; - } else { - connMode = CMManagerShim::Adhoc; - } - ap->setValue(WlanQtUtilsAp::ConfIdConnectionMode, (int)connMode); - - // Security Mode parameters - StoreSecMode(ap, mResults->ExtendedSecurityMode()); - - // Hidden attribute - // These scan results do not tell if the AP is hidden or not - ap->setValue(WlanQtUtilsAp::ConfIdHidden, false); - ap->setValue(WlanQtUtilsAp::ConfIdWlanScanSSID, false); - - // WPS support - TBool wpsSupported = mResults->IsProtectedSetupSupported(); - ap->setValue( - WlanQtUtilsAp::ConfIdWpsSupported, - (wpsSupported == EFalse) ? false : true); - - // Append the AP to scan result list - scanResults.append(ap); - } -} - -/*! - Extracts and cleans up the WLAN SSID from current scan result element. - - @return SSID string. -*/ - -QString WlanQtUtilsScanApPrivate::ExtractSsid() -{ - // Get the SSID in raw data format - TUint8 ieLen; - const TUint8* ieData; - TInt ret = mResults->InformationElement(KWlan802Dot11SsidIE, ieLen, &ieData); - - // Convert into QString - QString ssid; - if (ret == KErrNone && ieLen > 0) { - // Trace the buffer as data to ease low level debugging - OstTraceData( - TRACE_DUMP, - WLANQTUTILSSCANAPPRIVATE_EXTRACTSSID_DATA, - "WlanQtUtilsScanApPrivate::ExtractSsid data 0x%{hex8[]}", - ieData, - ieLen); - - // The IEEE 802.11-2007 section 7.3.2.1 only specifies that - // the SSID is 0-32 octets, leaving the format of the octets - // completely open. - // To support a bit wider character set than 7-bit ASCII, we - // treat the raw SSID bytes as the lowest octets of Unicode. - for (int i = 0; i < ieLen; i++) { - ssid.append(QChar((uint)ieData[i])); - } - -#ifdef OST_TRACE_COMPILER_IN_USE - TPtrC16 string(ssid.utf16(), ssid.length()); - OstTraceExt1( - TRACE_DUMP, - WLANQTUTILSSCANAPPRIVATE_EXTRACTSSID_STRING, - "WlanQtUtilsScanApPrivate::ExtractSsid string;ssid=%S", - string); -#endif - } - - // Remove nul characters - ssid.remove(QChar()); - - return ssid; -} - -/*! - Extracts the WLAN BSSID from current scan result element. - - @return BSSID array. -*/ - -QByteArray WlanQtUtilsScanApPrivate::ExtractBssid() -{ - TWlanBssid wlanBssid; - mResults->Bssid(wlanBssid); - QByteArray bssid; - for (int i = 0; i < (int)wlanBssid.Length(); i++) { - bssid[i] = (char)wlanBssid[i]; - } - -#ifdef OST_TRACE_COMPILER_IN_USE - QString bssidHex(bssid.toHex()); - TPtrC16 string(bssidHex.utf16(), bssidHex.length()); - - OstTraceExt1( - TRACE_DUMP, - WLANQTUTILSSCANAPPRIVATE_EXTRACTBSSID, - "WlanQtUtilsScanApPrivate::ExtractBssid;bssid=%S", - string); -#endif - - return bssid; -} - -/*! - Stores Security mode parameters to \a ap class. - - @param [in,out] ap Access Point object to where the configuration is stored. - @param [in] secMode Security mode to store. -*/ - -void WlanQtUtilsScanApPrivate::StoreSecMode( - QSharedPointer ap, - TUint wlanSecMode) -{ - CMManagerShim::WlanSecMode secMode = CMManagerShim::WlanSecModeOpen; - ap->setValue(WlanQtUtilsAp::ConfIdWpaPskUse, false); - - switch (wlanSecMode) { - case EWlanConnectionExtentedSecurityModeWepOpen: - case EWlanConnectionExtentedSecurityModeWepShared: - secMode = CMManagerShim::WlanSecModeWep; - break; - - case EWlanConnectionExtentedSecurityMode802d1x: - secMode = CMManagerShim::WlanSecMode802_1x; - break; - - case EWlanConnectionExtentedSecurityModeWpa: - secMode = CMManagerShim::WlanSecModeWpa; - break; - - case EWlanConnectionExtentedSecurityModeWpaPsk: - secMode = CMManagerShim::WlanSecModeWpa; - ap->setValue(WlanQtUtilsAp::ConfIdWpaPskUse, true); - break; - - case EWlanConnectionExtentedSecurityModeWpa2: - secMode = CMManagerShim::WlanSecModeWpa2; - break; - - case EWlanConnectionExtentedSecurityModeWpa2Psk: - secMode = CMManagerShim::WlanSecModeWpa2; - ap->setValue(WlanQtUtilsAp::ConfIdWpaPskUse, true); - break; - - case EWlanConnectionExtentedSecurityModeWapi: - case EWlanConnectionExtentedSecurityModeWapiPsk: - secMode = CMManagerShim::WlanSecModeWapi; - break; - - case EWlanConnectionExtentedSecurityModeOpen: - secMode = CMManagerShim::WlanSecModeOpen; - break; - -#ifndef QT_NO_DEBUG - default: - // Invalid security mode detected - Q_ASSERT(0); - break; -#endif - } - - ap->setValue(WlanQtUtilsAp::ConfIdSecurityMode, secMode); -}