diff -r a828660c511c -r d3d7683d16f5 wlanapitest/wlanhaitest/wlan/src/T_WlanScanInfoData.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wlanapitest/wlanhaitest/wlan/src/T_WlanScanInfoData.cpp Wed Sep 01 12:41:05 2010 +0100 @@ -0,0 +1,266 @@ +/* +* Copyright (c) 2005-2009 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: +* +*/ + + +#include "t_wlanscaninfodata.h" +//class CWlanScanInfo +#include +#include + +/*@{*/ +//LITs from the ini +_LIT(KSsidParam, "DEFAULT_SSID_Ssid"); +_LIT(KUid, "WlanScanUid"); +/*@}*/ + +/*@{*/ +//LIT's for the commands +_LIT(KCmdNewL, "NewL"); +_LIT(KCmdDestructor, "~"); +_LIT(KCmdInformationElement, "InformationElement"); +/*@}*/ + +/** + * Two phase constructor + * + * @leave system wide error + */ +CT_WlanScanInfoData* CT_WlanScanInfoData::NewL() + { + CT_WlanScanInfoData* ret = new(ELeave) CT_WlanScanInfoData(); + CleanupStack::PushL(ret); + ret->ConstructL(); + CleanupStack::Pop(ret); + return ret; + } + +/** + * Public destructor + */ +CT_WlanScanInfoData::~CT_WlanScanInfoData() + { + DestroyData(); + } + +/** + * Private constructor. First phase construction + */ +CT_WlanScanInfoData::CT_WlanScanInfoData() +: iData(NULL), + iScanInfoInstanceIdentifier(KNullUid) + { + } + + +/** + * Second phase construction + * + * @internalComponent + * + * @return N/A + * + * @pre None + * @post None + * + * @leave system wide error + */ +void CT_WlanScanInfoData::ConstructL() + { + } + +/** + * Return a pointer to the object that the data wraps + * + * @return pointer to the object that the data wraps + */ +TAny* CT_WlanScanInfoData::GetObject() + { + return iData; + } + + +/** + * Process a command read from the Ini file + * @param aCommand The command to process + * @param aSection The section get from the *.ini file of the project T_Wlan + * @param aAsyncErrorIndex Command index dor async calls to returns errors to + * @return TBool ETrue if the command is process + * @leave system wide error + */ +TBool CT_WlanScanInfoData::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt /*aAsyncErrorIndex*/) + { + TBool ret = ETrue; + + if(aCommand == KCmdNewL) + { + DoCmdNewL(aSection); + } + else if(aCommand == KCmdDestructor) + { + DoCmdDestructor(); + } + else if(aCommand == KCmdInformationElement) + { + DoCmdInformationElement(aSection); + } + else + { + ret = EFalse; + ERR_PRINTF1(_L("Unknown command")); + } + + return ret; + } + + +/** + * Create an instance of CWlanScanInfo + * @param + * @return + */ +void CT_WlanScanInfoData::DoCmdNewL(const TTEFSectionName& aSection) + { + INFO_PRINTF1(_L("*START* CT_WlanScanInfoData::DoCmdNewL")); + DestroyData(); + + TBool dataOk = ETrue; + + TInt wsUid; + if(!GetHexFromConfig(aSection, KUid, wsUid )) + { + ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KUid); + SetBlockResult(EFail); + dataOk = EFalse; + } + + if (dataOk) + { + const TUid WsUid = {wsUid}; + TAny* interface = NULL; + + TRAPD(err, interface = REComSession::CreateImplementationL( WsUid, iScanInfoInstanceIdentifier )); + if(err == KErrNone) + { + iData = reinterpret_cast( interface ); + + if(iData == NULL) + { + ERR_PRINTF1(_L("CT_WlanScanInfoData::DoCmdNewL() Fail")); + SetBlockResult(EFail); + } + } + else + { + ERR_PRINTF2(_L("Create Implementation left with error %d"), err); + SetError(err); + } + } + + INFO_PRINTF1(_L("*END* CT_WlanScanInfoData::DoCmdNewL")); + } + +/** + * Destructor for CWlanScanInfo + * @param + * @return + */ +void CT_WlanScanInfoData::DoCmdDestructor() + { + INFO_PRINTF1(_L("*START* CT_WlanScanInfoData::DoCmdDestructor")); + DestroyData(); + INFO_PRINTF1(_L("*END* CT_WlanScanInfoData::DoCmdDestructor")); + } + +/** + * called from DoCmdDestructor for destroy the object CWlanScanInfo + * @param + * @return + */ +void CT_WlanScanInfoData::DestroyData() + { + // Cannot use "delete" directly because we use a member variable as an + // ECom instance identifier + REComSession::DestroyedImplementation( iScanInfoInstanceIdentifier ); + iData = NULL; + } +/** + * Review if the IAP given in the ini file match with some Wireless Local Area Network (SelectScanInfo). + * @param aSection Section in the ini file for this command + * @return + */ +void CT_WlanScanInfoData::DoCmdInformationElement(const TTEFSectionName& aSection) + { + INFO_PRINTF1(_L("*START* CT_WlanScanInfoData::DoCmdInformationElement")); + TBool dataOk = ETrue; + + TPtrC aSsid; + if(!GetStringFromConfig(aSection,KSsidParam, aSsid)) + { + ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KSsidParam); + SetBlockResult(EFail); + dataOk = EFalse; + } + + if(dataOk) + { + TInt err(KErrNone); + // Scan info gives data as "information elements" + TUint8 ieLen(0); + const TUint8* ieData; + TWlanSsid ssid8; + TBuf ssid; + TBool match = EFalse; + + INFO_PRINTF2(_L("SSID to be checked: %S"),&aSsid); + for( iData->First(); !iData->IsDone(); iData->Next() ) + { + INFO_PRINTF1(_L("found scan info")); + err = KErrNotReady; + // Information Element ID for SSID as specified in 802.11. + const TUint8 KWlan802Dot11SsidIE(0); + err = iData->InformationElement( KWlan802Dot11SsidIE, ieLen, &ieData ); + if(err != KErrNone) + { + ERR_PRINTF2(_L("CScanInfo::InformationElement err: [%d]"),err); + SetError(err); + break; + } + if(ieLen) + { + ssid8.Copy( ieData, ieLen ); + ssid.Copy( ssid8 ); + INFO_PRINTF2(_L("Current information element SSID: %S"),&ssid); + // check if this is an expected SSID + if( aSsid.Compare( ssid ) == 0 ) + { + INFO_PRINTF1(_L("SSID match!")); + match = ETrue; + break; + } + } + } + + if (err == KErrNone && !match) + { + ERR_PRINTF2(_L("Given SSID %S NOT FOUND!"),&aSsid); + SetBlockResult(EFail); + } + } + + INFO_PRINTF1(_L("*END* CT_WlanScanInfoData::DoCmdInformationElement")); + } +