diff -r fc7b30ed2058 -r 05bc53fe583b connectionutilities/ConnectionDialogs/cconndlg/src/ActiveSelectConnectionPlugin.cpp --- a/connectionutilities/ConnectionDialogs/cconndlg/src/ActiveSelectConnectionPlugin.cpp Thu Aug 19 10:18:49 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,819 +0,0 @@ -/* -* Copyright (c) 2002 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: Implementation of plugins (base & all derived). -* -*/ - - -// INCLUDE FILES -#include "ActiveSelectConnectionPlugin.h" -#include "SelectConnectionDialog.h" -#include "ConnectionDialogsLogger.h" -#include "ConnectionInfo.h" -#include "ConnectionInfoArray.h" -#include "sortsnaputils.h" -#include "cdbcols.h" - -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include -#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS -#include -#else -#include -#include -#endif - -#include -#include - -// CONSTANTS - -// Category for all panics in this module -_LIT( KASCPCategory, "Select Connection Plugin" ); - -LOCAL_D const TInt KIconsGranularity = 4; -LOCAL_D const TInt KArrayGranularity = 4; -LOCAL_D const TInt KMaxEntryLength = CommsDat::KMaxTextLength*2 + 20; -/** -* For iPeriodic Timer, 60 seconds -*/ -LOCAL_C const TInt KTickDefaultInterval = 60000000; -LOCAL_C const TInt KMicrosecondsToSecondsMultiplier = 1000000; - -// background scan automatic scanning value -static const TUint KWlanBgScanIntervalAuto = 0xffffffff; - -using namespace CMManager; - - -/////////////////////////////////////////////////////////////////////////////// - -// --------------------------------------------------------- -// CActiveSelectConnectionPlugin::CActiveSelectConnectionPlugin() -// --------------------------------------------------------- -// -CActiveSelectConnectionPlugin::CActiveSelectConnectionPlugin( - MEikSrvNotifierBase2* aPlugin, - const TUint32 aElementId, - TUint32 aBearerSet ) -: iBearerSet( aBearerSet ), - iReqBearerSet( aBearerSet ), - iElementId( aElementId ), - iPlugin( aPlugin ), - iDialogConn( NULL ), - iIsWLANFeatureSupported( EFalse ), - iRefreshInterval( KTickDefaultInterval ), - iHighlightedItem( -1 ), - iDefaultDestId( 0 ), - iDefaultCMId( 0 ) - { - } - - -// --------------------------------------------------------- -// CActiveSelectConnectionPlugin* CActiveSelectConnectionPlugin::NewL() -// --------------------------------------------------------- -// -CActiveSelectConnectionPlugin* CActiveSelectConnectionPlugin::NewL( - MEikSrvNotifierBase2* aPlugin, - const TUint32 aElementId, - TUint32 aBearerSet ) - { - CLOG_ENTERFN( "CActiveSelectConnectionPlugin::NewL " ); - - CActiveSelectConnectionPlugin* self = new ( ELeave ) - CActiveSelectConnectionPlugin( aPlugin, aElementId, - aBearerSet ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - - CLOG_LEAVEFN( "CActiveSelectConnectionPlugin::NewL " ); - - return self; - } - - -// --------------------------------------------------------- -// CActiveSelectConnectionPlugin::ConstructL() -// --------------------------------------------------------- -// -void CActiveSelectConnectionPlugin::ConstructL() - { - CLOG_ENTERFN( "CActiveSelectConnectionPlugin::ConstructL " ); - - CActiveBase::ConstructL(); - - FeatureManager::InitializeLibL(); - - iIsWLANFeatureSupported = FeatureManager::FeatureSupported( - KFeatureIdProtocolWlan ); - - FeatureManager::UnInitializeLib(); - - iBearerSet |= ECommDbBearerVirtual; // To get also VPN APs - -#ifdef __WINS__ - iBearerSet |= ECommDbBearerLAN; // To add Ethernet AP -#endif // __WINS__ - - if ( iIsWLANFeatureSupported ) - { - CLOG_WRITE( "WLAN Supported!" ); - iBearerSet |= ECommDbBearerWLAN; // To add WLan AP - iRefreshInterval = GetRefreshIntervalL(); - } - - - - iItems = new( ELeave ) CConnectionInfoArray(); - iIcons = new( ELeave ) CAknIconArray( KIconsGranularity ); - - iCmManagerExt.OpenL(); - - TInt ret = iMPM.LaunchServer(); - if ( ret != KErrAlreadyExists ) - { - User::LeaveIfError( ret ); - } - CLOG_LEAVEFN( "CActiveSelectConnectionPlugin::ConstructL " ); - } - - -// --------------------------------------------------------- -// CActiveSelectConnectionPlugin::~CActiveSelectConnectionPlugin() -// --------------------------------------------------------- -// -CActiveSelectConnectionPlugin::~CActiveSelectConnectionPlugin() - { - CLOG_ENTERFN( "~CActiveSelectConnectionPlugin" ); - Cancel(); - - if ( iItems ) - { - iItems->ResetAndDestroy(); - } - delete iItems; - iItems = NULL; - - iCmManagerExt.Close(); - iMPM.Close(); - - CLOG_LEAVEFN( "~CActiveSelectConnectionPlugin" ); - } - - -// --------------------------------------------------------- -// CActiveSelectConnectionPlugin::Cancel() -// --------------------------------------------------------- -// -void CActiveSelectConnectionPlugin::Cancel() - { - StopTimer(); - CActive::Cancel(); - - if( iDialogConn && !( iDialogConn->GetOkToExit() ) ) - { - CLOG_WRITEF( _L( "iDialogConn->GetOkToExit() : %b" ), iDialogConn->GetOkToExit() ); - delete iDialogConn; - iDialogConn = NULL; - } - } - - -// --------------------------------------------------------- -// CActiveSelectConnectionPlugin::DoCancel() -// --------------------------------------------------------- -// -void CActiveSelectConnectionPlugin::DoCancel() - { - } - - -// --------------------------------------------------------- -// CActiveSelectConnectionPlugin::RunL() -// --------------------------------------------------------- -// -void CActiveSelectConnectionPlugin::RunL() - { - CLOG_ENTERFN( "CActiveSelectConnectionPlugin::RunL " ); - - if( iStatus == KErrNone ) - { - BuildConnectionListL(); - iDialogConn->RefreshDialogL( iItems, iIcons, ETrue, iHighlightedItem ); - } - - CLOG_LEAVEFN( "CActiveSelectConnectionPlugin::RunL " ); - } - - -// --------------------------------------------------------- -// CActiveSelectConnectionPlugin::ShowSelectConnectionL() -// --------------------------------------------------------- -// -void CActiveSelectConnectionPlugin::ShowSelectConnectionL() - { - CLOG_ENTERFN( "CActiveSelectConnectionPlugin::ShowSelectConnectionL" ); - - BuildConnectionListL(); - - iDialogConn = CSelectConnectionDialog::NewL( iPlugin, iRefreshInterval, - iBearerSet, - iIsWLANFeatureSupported, - iDefaultCMId ); - - iDialogConn->PrepareAndRunLD( iItems, iIcons, EFalse, iHighlightedItem ); - - if( iRefreshInterval ) - { - StartTimerL( iRefreshInterval ); - } - - CLOG_LEAVEFN( "CActiveSelectConnectionPlugin::ShowSelectConnectionL" ); - } - - -// --------------------------------------------------------- -// CActiveSelectConnectionPlugin::BuildConnectionListL() -// --------------------------------------------------------- -// -void CActiveSelectConnectionPlugin::BuildConnectionListL() - { - CLOG_ENTERFN( "CActiveSelectConnectionPlugin::BuildConnectionListL " ); - - // iItems and iIcons are allocated at construction and deallocated at - // destruction. Unless memory allocation has failed, they cannot be NULL. - __ASSERT_ALWAYS( iItems, User::Panic( KASCPCategory, KErrGeneral ) ); - __ASSERT_ALWAYS( iIcons, User::Panic( KASCPCategory, KErrGeneral ) ); - - iItems->ResetAndDestroy(); - iIcons->ResetAndDestroy(); - - _LIT( KDriveZ, "z:" ); // ROM folder - // Name of the MBM file containing icons - _LIT( KManagerIconFilename, "cmmanager.mbm" ); - - TFileName iconsFileName; - - iconsFileName.Append( KDriveZ ); - iconsFileName.Append( KDC_APP_BITMAP_DIR ); - iconsFileName.Append( KManagerIconFilename ); - -// iIcons->AppendL( AknsUtils::CreateGulIconL( AknsUtils::SkinInstance(), -// KAknsIIDQgnIndiCbHotAdd, -// iconsFileName, -// EMbmCmmanagerQgn_indi_cb_hot_add, -// EMbmCmmanagerQgn_indi_cb_hot_add_mask ) ); - - // Create color icon for marking the default connection - // - CFbsBitmap* bitmap = NULL; - CFbsBitmap* mask = NULL; - CGulIcon* icon = CGulIcon::NewLC(); - - AknsUtils::CreateColorIconL( AknsUtils::SkinInstance(), - KAknsIIDQgnIndiCbHotAdd, - KAknsIIDQsnIconColors, EAknsCIQsnIconColorsCG13, - bitmap, - mask, - iconsFileName, - EMbmCmmanagerQgn_indi_cb_hot_add, - EMbmCmmanagerQgn_indi_cb_hot_add_mask, - KRgbBlack ); - - icon->SetBitmap( bitmap ); - icon->SetMask( mask ); - iIcons->AppendL( icon ); - - CleanupStack::Pop( icon ); - - TCmDefConnValue defaultConnSetting; - - iCmManagerExt.ReadDefConnL( defaultConnSetting ); - if ( defaultConnSetting.iType == ECmDefConnDestination ) - { - iDefaultDestId = defaultConnSetting.iId; - } - else if ( defaultConnSetting.iType == ECmDefConnConnectionMethod ) - { - iDefaultCMId = defaultConnSetting.iId; - } - - if ( iIsWLANFeatureSupported && (iReqBearerSet & ECommDbBearerWLAN) ) - { - AddSearchForWLanItemL(); - } - - AddDestinationItemsL(); - - CLOG_WRITEF( _L( "iItems count: %d" ), iItems->Count() ); - CLOG_LEAVEFN( "CActiveSelectConnectionPlugin::BuildConnectionListL " ); - } - - -// --------------------------------------------------------- -// CActiveSelectConnectionPlugin::AddSearchForWLanItemL -// --------------------------------------------------------- -// -void CActiveSelectConnectionPlugin::AddSearchForWLanItemL() - { - TUint32 easyWlanId = iCmManagerExt.EasyWlanIdL(); - if ( easyWlanId ) - { - CLOG_WRITEF( _L( "easyWlanId %d" ), easyWlanId ); - - RCmConnectionMethodExt cmConnMethodExt; - TRAPD( err, cmConnMethodExt = iCmManagerExt.ConnectionMethodL( - easyWlanId ) ); - if ( err == KErrNone ) - { - CleanupClosePushL( cmConnMethodExt ); - - CGulIcon* wlanIcon = ( CGulIcon* ) - cmConnMethodExt.GetIntAttributeL( ECmBearerIcon ); - CleanupStack::PopAndDestroy(); // cmConnMethodExt - - if ( wlanIcon ) - { - CleanupStack::PushL( wlanIcon ); - iIcons->AppendL( wlanIcon ); - - // icon array took over ownership - CleanupStack::Pop( wlanIcon ); - - // +1 because it "Zero terminates" the string - TBuf nameSearch; - _LIT( KIconIdNameEmpty, "%d\t%s\t" ); - - HBufC *msg = StringLoader::LoadL( R_WLAN_EASY_WLAN ); - nameSearch = *msg; - nameSearch.ZeroTerminate(); - delete msg; - - TBuf temp; - temp.FillZ( KMaxEntryLength ); - temp.Format( KIconIdNameEmpty, iIcons->Count()-1, - nameSearch.Ptr() ); - - CConnectionInfo* conIn = CConnectionInfo::NewL( easyWlanId, - 0, temp ); - CleanupStack::PushL( conIn ); - iItems->AppendL( conIn ); - CleanupStack::Pop( conIn ); - iHighlightedItem = 0; - } - } - } - } - -// --------------------------------------------------------- -// CActiveSelectConnectionPlugin::AddDestinationItemsL -// --------------------------------------------------------- -// -void CActiveSelectConnectionPlugin::AddDestinationItemsL() - { - /* TInt errConnect = iMPM.Connect(); - CLOG_WRITEF( _L( "errConnect = %d" ), errConnect ); - if ( errConnect == KErrNone ) - {*/ - TSortSnapUtils sortSnapUtils( iMPM ); - RArray destIdArray( KArrayGranularity ); - TRAPD( err, sortSnapUtils.GetDestIdArrayL( iCmManagerExt, destIdArray ) ); - //TRAPD( err, iCmManagerExt.AllDestinationsL( destIdArray ) ); - // Append the destinations to the list - CLOG_WRITEF( _L( "GetDestIdArrayL returned with %d" ), err ); - if ( err == KErrNone ) - { - CleanupClosePushL( destIdArray ); - - CLOG_WRITEF( _L( "destIdArray.Count() = %d" ), destIdArray.Count() ); - for ( TInt i = 0; i < destIdArray.Count(); i++ ) - { - RCmDestinationExt cmDestExt = iCmManagerExt.DestinationL( - destIdArray[i] ); - CleanupClosePushL( cmDestExt ); - if ( /*cmDestExt.ElementId() != iElementId &&*/ - !cmDestExt.MetadataL( ESnapMetadataHiddenAgent ) ) - { - CLOG_WRITEF( _L( "Destination id %d, Total number of methods %d" ), - destIdArray[i], cmDestExt.ConnectionMethodCount() ); - -#ifdef _DEBUG - for ( TInt j = 0; - j < cmDestExt.ConnectionMethodCount(); j++ ) - { - RCmConnectionMethodExt cmConnMethodExt; - TRAP( err, cmConnMethodExt = - cmDestExt.ConnectionMethodL( j ) ); - if ( err == KErrNone ) - { - CleanupClosePushL( cmConnMethodExt ); - HBufC* bufMethod = - cmConnMethodExt.GetStringAttributeL( ECmName ); - CleanupStack::PushL( bufMethod ); - TBuf nameMethod; - nameMethod = *bufMethod; - nameMethod.ZeroTerminate(); - - /*CLOG_WRITEF( _L( "ConnMethod id %d, Method name %s" ), - cmConnMethodExt.GetIntAttributeL( ECmIapId ), - nameMethod.Ptr() );*/ - - CleanupStack::PopAndDestroy( bufMethod ); - CleanupStack::PopAndDestroy(); // cmConnMethodExt - } - } -#endif - - AddDestinationItemL( cmDestExt, destIdArray[i], i == 0, - destIdArray[i] == iDefaultDestId, - sortSnapUtils ); - } - CleanupStack::PopAndDestroy(); // cmDestExt - } - CleanupStack::PopAndDestroy(); // destIdArray - } - AddUncategorizedItemL( sortSnapUtils ); -/* }*/ - } - - -// --------------------------------------------------------- -// CActiveSelectConnectionPlugin::AddDestinationItemL -// --------------------------------------------------------- -// -void CActiveSelectConnectionPlugin::AddDestinationItemL( - RCmDestinationExt aDestination, - TUint32 aDestId, - TBool aFirstItem, - TBool aDefaultDest, - TSortSnapUtils& aSortSnapUtils ) - { - TMpmSnapBuffer list; - - TInt errMPM = aSortSnapUtils.GetSortSnapData( aDestId, list ); - CLOG_WRITEF( _L( "errMPM = %d. list.Count() = %d" ), errMPM, list.Count() ); - - if ( errMPM == KErrNone ) - { - for ( TInt numCM = 0; numCM < list.Count(); numCM++ ) - { - RCmConnectionMethodExt cmConnMethodExt; - TRAPD( err, cmConnMethodExt = iCmManagerExt.ConnectionMethodL( - list.iIapId[numCM] ) ); - - CLOG_WRITEF( _L( "Trapped err = %d" ), err ); - - if ( err == KErrNone ) - { - CleanupClosePushL( cmConnMethodExt ); - if ( iBearerSet & cmConnMethodExt.GetIntAttributeL( - ECmCommsDBBearerType ) ) - { - HBufC* bufBest = cmConnMethodExt.GetStringAttributeL( - ECmName ); - - CleanupStack::PopAndDestroy(); // cmConnMethodExt - CleanupStack::PushL( bufBest ); - - _LIT( KIconIdNameBest, "%d\t%s\t\"%s\"" ); - _LIT( KIconIdNameBestDefaultConn, "%d\t%s\t\"%s\"\t0" ); - - TBuf nameBest; - nameBest = *bufBest; - nameBest.ZeroTerminate(); - CleanupStack::PopAndDestroy( bufBest ); - - TBuf nameDest; - HBufC* name = aDestination.NameLC(); - nameDest = *name; - nameDest.ZeroTerminate(); - CleanupStack::PopAndDestroy( name ); - - CGulIcon* destIcon = aDestination.IconL(); - if ( destIcon ) - { - CleanupStack::PushL( destIcon ); - iIcons->AppendL( destIcon ); - - // icon array took over ownership - CleanupStack::Pop( destIcon ); - - TBuf temp; - temp.FillZ( KMaxEntryLength ); - if ( aDefaultDest ) - { - temp.Format( KIconIdNameBestDefaultConn, - iIcons->Count()-1, - nameDest.Ptr(), nameBest.Ptr() ); - } - else - { - temp.Format( KIconIdNameBest, - iIcons->Count()-1, - nameDest.Ptr(), nameBest.Ptr() ); - } - - CConnectionInfo* conIn = - CConnectionInfo::NewL( 0, aDestId, temp ); - CleanupStack::PushL( conIn ); - iItems->AppendL( conIn ); - CleanupStack::Pop( conIn ); - - if ( aFirstItem || - aDestination.MetadataL( ESnapMetadataHighlight ) ) - { // It sets the highlight to the - // first Destination (Internet), - // but if it finds another with - // the bit set, then it changes - iHighlightedItem = iItems->Count()-1; - } - } - - numCM = list.Count(); // break; - } - else - { - CleanupStack::PopAndDestroy(); // cmConnMethodExt - } - } - } - } - } - - -// --------------------------------------------------------- -// CActiveSelectConnectionPlugin::AddUncategorizedItemL -// --------------------------------------------------------- -// -void CActiveSelectConnectionPlugin::AddUncategorizedItemL(TSortSnapUtils& aSortSnapUtils ) - { - TMpmSnapBuffer list; - - TInt errMPM = aSortSnapUtils.GetSortSnapData( 0, list ); - CLOG_WRITEF( _L( "Uncategorized: errMPM = %d. list.Count() = %d" ), errMPM, list.Count() ); - - if ( errMPM == KErrNone ) - { - TUint numOfUncatToBeListed = 0; - - for ( TInt numCM = 0; numCM < list.Count(); numCM++ ) - { - RCmConnectionMethodExt cmConnMethodExt; - TRAPD( err, cmConnMethodExt = iCmManagerExt.ConnectionMethodL( - list.iIapId[numCM] ) ); - if ( err == KErrNone ) - { - CleanupClosePushL( cmConnMethodExt ); - if ( iBearerSet & cmConnMethodExt.GetIntAttributeL( - ECmCommsDBBearerType ) ) - { - numOfUncatToBeListed++; - } - CleanupStack::PopAndDestroy(); // cmConnMethodExt - } - } - - if ( ( iBearerSet & ECommDbBearerWLAN ) && iIsWLANFeatureSupported ) - { - numOfUncatToBeListed += CountAdhocWlanIapsL(); - } - - if ( numOfUncatToBeListed > 0 ) - { - CGulIcon* uncatIcon = - ( CGulIcon* )iCmManagerExt.UncategorizedIconL(); - if ( uncatIcon ) - { - CleanupStack::PushL( uncatIcon ); - iIcons->AppendL( uncatIcon ); - CleanupStack::Pop( uncatIcon ); // icon array took over ownership - - // +1 because it "Zero terminates" the string - TBuf nameUncat; - TBuf numUncat; - - HBufC *bufUncat = StringLoader::LoadL( R_LIST_UNCATEGORIZED ); - nameUncat = *bufUncat; - nameUncat.ZeroTerminate(); - delete bufUncat; - - HBufC *bufNumOfUncat; - if ( numOfUncatToBeListed == 1 ) - { - bufNumOfUncat = StringLoader::LoadL( R_CONN_METHODS_ONE ); - } - else - { - bufNumOfUncat = StringLoader::LoadL( R_CONN_METHODS_MANY, - numOfUncatToBeListed ); - } - - numUncat = *bufNumOfUncat; - numUncat.ZeroTerminate(); - delete bufNumOfUncat; - - TBuf temp; - _LIT( KIconIdNameNumber, "%d\t%s\t%s" ); - - temp.FillZ( KMaxEntryLength ); - temp.Format( KIconIdNameNumber, iIcons->Count()-1, nameUncat.Ptr(), - numUncat.Ptr() ); - - CConnectionInfo* conIn = CConnectionInfo::NewL( 0, 0, temp ); - CleanupStack::PushL( conIn ); - iItems->AppendL( conIn ); - CleanupStack::Pop( conIn ); - if ( iHighlightedItem < 0 ) - { - iHighlightedItem = 0; - } - } - } - } - } - - -// --------------------------------------------------------- -// CActiveSelectConnectionPlugin::GetElementIDL -// --------------------------------------------------------- -// -TUint32 CActiveSelectConnectionPlugin::GetElementIDL( TUint32 aIAPId, - TUint32 aDestinationId ) - { - TUint32 retval = 0; - TInt err; - - if ( aDestinationId ) - { - RCmDestinationExt cmDestExt; - TRAP( err, cmDestExt = iCmManagerExt.DestinationL( aDestinationId ) ); - if ( err == KErrNone ) - { - retval = cmDestExt.ElementId(); - cmDestExt.Close(); - } - } - else if ( aIAPId ) - { - RCmConnectionMethodExt cmConnMethodExt; - TRAP( err, cmConnMethodExt = iCmManagerExt.ConnectionMethodL( - aIAPId ) ); - if ( err == KErrNone ) - { - CleanupClosePushL( cmConnMethodExt ); - retval = cmConnMethodExt.GetIntAttributeL( ECmElementID ); - CleanupStack::PopAndDestroy(); // cmConnMethodExt - } - } - - return retval; - } - - -// --------------------------------------------------------- -// CActiveSelectConnectionPlugin::GetRefreshIntervalL() -// --------------------------------------------------------- -// -TInt CActiveSelectConnectionPlugin::GetRefreshIntervalL( ) - { - CLOG_ENTERFN( "CActiveSelectConnectionPlugin::GetRefreshInterval" ); - - TInt variant( KTickDefaultInterval ); - - - CMDBSession* session = CMDBSession::NewL(KCDLatestVersion); - CleanupStack::PushL( session ); - - //session->OpenTransactionL(); - TMDBElementId tableId = 0; - - tableId = CCDWlanDeviceSettingsRecord::TableIdL( *session); - - CCDWlanDeviceSettingsRecord* record = new(ELeave) - CCDWlanDeviceSettingsRecord(tableId); - CleanupStack::PushL(record); - - record->iWlanDeviceSettingsType = KWlanUserSettings; - - if(record->FindL( *session )) - { - record->LoadL( *session ); - - // In case iBgScanInterval is -1 (= automatic) then just use - // KTickDefaultInterval as refresh interval - if ( record->iBgScanInterval != KWlanBgScanIntervalAuto - && record->iBgScanInterval > 0 ) - { - variant = record->iBgScanInterval; - variant = variant * KMicrosecondsToSecondsMultiplier; - } - } - CleanupStack::PopAndDestroy( record ); - - //session->CommitTransactionL(); - - CleanupStack::PopAndDestroy( session ); - - TUint32 variantToLog = variant; - - CLOG_WRITEF( _L( "Refresh interval (microseconds) : %d" ), variantToLog ); - - CLOG_LEAVEFN( "CActiveSelectConnectionPlugin::GetRefreshInterval" ); - - return variant; - } - -// --------------------------------------------------------- -// CActiveSelectConnectionPlugin::CountAdhocWlanIapsL() -// --------------------------------------------------------- -// -TInt CActiveSelectConnectionPlugin::CountAdhocWlanIapsL() - { - CLOG_ENTERFN( "CActiveSelectExplicit::CountAdhocWlanIapsL " ); - - // Creating a session with the latest version - CMDBSession* db = CMDBSession::NewLC( CMDBSession::LatestVersion() ); - db->SetAttributeMask( ECDProtectedWrite ); - - // Create wlan service record set (RArray (or RPtrArray?)) - CMDBRecordSet* wlanSet = - new (ELeave)CMDBRecordSet( CCDWlanServiceRecord::TableIdL( *db ) ); - CleanupStack::PushL( wlanSet ); - - // Create wlan service record - CCDWlanServiceRecord* wlanRecord = - new (ELeave)CCDWlanServiceRecord( CCDWlanServiceRecord::TableIdL( *db ) ); - - CleanupStack::PushL( wlanRecord ); - - // Set ConnectionMode field in wlan service record (see wlancontainer.h) - // This works with EWlanOperatingModeAdhoc, fails with EWlanConnectionModeAdhoc - wlanRecord->iWlanConnMode.SetL( EWlanOperatingModeAdhoc ); - - // Append wlan service record to wlan service record set (currently empty) - wlanSet->iRecords.AppendL( wlanRecord ); - CleanupStack::Pop( wlanRecord ); // ownership moved to RPointerArray - - TInt wlanRecordCount( 0 ); - - // Find matcing wlan service records - if( wlanSet->FindL( *db ) ) - { - wlanRecordCount = wlanSet->iRecords.Count(); - - for ( TInt i = 0; i < wlanRecordCount; i++ ) - { - // Load the current record again to be sure all fields are up to date - wlanRecord->SetElementId( wlanSet->iRecords[i]->ElementId() ); - - // Load will only look at ElementId and updates the rest of the fields - wlanRecord->LoadL( *db ); - - if ( wlanRecord->iWLanSSID.IsNull() ) - { - // Count active Easy WLAN using adhoc out - wlanRecordCount--; - break; - } - } - - CLOG_WRITEF( _L("wlanSet record count = %d"), wlanRecordCount ); - } - else - { - CLOG_WRITEF( _L("no matcing wlan records found." )); - } - - CleanupStack::PopAndDestroy( wlanSet ); - CleanupStack::PopAndDestroy( db ); - - CLOG_LEAVEFN( "CActiveSelectExplicit::CountAdhocWlanIapsL" ); - - return ( wlanRecordCount ); - } - -// End of File