diff -r d2517372cc44 -r ae69c2e8bc34 omaprovisioning/provisioning/cpdestinationnwadapter/src/cwpdestinationnwitem.cpp --- a/omaprovisioning/provisioning/cpdestinationnwadapter/src/cwpdestinationnwitem.cpp Tue Sep 28 17:53:08 2010 +0530 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,345 +0,0 @@ -/* -* Copyright (c) 2007 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: Settings item for one destination network. Also handles -* saving destination networks to permanent storage. -* -*/ - - - - -#include -#include -#include -#include -#include -#include -#include -#include // For WLAN plugin UID, i.e. bearer type. - -#include "cwpdestinationnwitem.h" -#include "wpdestinationnwdebug.h" - -const TInt KMaxCharsInTUint32 = 10; - -// --------------------------------------------------------------------------- -// CWPDestinationNwItem::NewL -// -// --------------------------------------------------------------------------- -// -CWPDestinationNwItem* CWPDestinationNwItem::NewL() - { - CWPDestinationNwItem* self = new ( ELeave ) CWPDestinationNwItem(); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -// --------------------------------------------------------------------------- -// CWPDestinationNwItem::CWPDestinationNwItem -// -// --------------------------------------------------------------------------- -// -CWPDestinationNwItem::CWPDestinationNwItem() - { - } - -// --------------------------------------------------------------------------- -// CWPDestinationNwItem::~CWPDestinationNwItem -// -// --------------------------------------------------------------------------- -// -CWPDestinationNwItem::~CWPDestinationNwItem() - { - DBG_PRINT( "CWPDestinationNwItem::~CWPDestinationNwItem - begin" ); - delete iAppRef; - delete iSettingsName; - iNapDefs.Close(); - delete iSavedProfileId; - DBG_PRINT( "CWPDestinationNwItem::~CWPDestinationNwItem - end" ); - } - -// --------------------------------------------------------------------------- -// CWPDestinationNwItem::ConstructL -// -// --------------------------------------------------------------------------- -// -void CWPDestinationNwItem::ConstructL() - { - DBG_PRINT( "CWPDestinationNwItem::ConstructL - begin" ); - iAppRef = HBufC8::NewL( 0 ); - iSettingsName = HBufC::NewL( 0 ); - iSavedProfileId = HBufC8::NewL( KMaxCharsInTUint32 ); - DBG_PRINT( "CWPDestinationNwItem::ConstructL - end" ); - } - -// --------------------------------------------------------------------------- -// CWPDestinationNwItem::SetAppRefL -// -// --------------------------------------------------------------------------- -// -void CWPDestinationNwItem::SetAppRefL( const TDesC8& aAppRef ) - { - delete iAppRef; - iAppRef = NULL; - iAppRef = aAppRef.AllocL(); - } - -// --------------------------------------------------------------------------- -// CWPDestinationNwItem::SetSettingsNameL -// -// --------------------------------------------------------------------------- -// -void CWPDestinationNwItem::SetSettingsNameL( const TDesC& aSettingsName ) - { - delete iSettingsName; - iSettingsName = NULL; - iSettingsName = aSettingsName.AllocL(); - } - -// --------------------------------------------------------------------------- -// CWPDestinationNwItem::AddNapDefL -// -// --------------------------------------------------------------------------- -// -void CWPDestinationNwItem::AddNapDefL( CWPCharacteristic* aNapDef ) - { - iNapDefs.AppendL( aNapDef ); - } - -// --------------------------------------------------------------------------- -// CWPDestinationNwItem::AppRef -// -// --------------------------------------------------------------------------- -// -const TDesC8& CWPDestinationNwItem::AppRef() const - { - return *iAppRef; - } - -// --------------------------------------------------------------------------- -// CWPDestinationNwItem::SettingsName -// -// --------------------------------------------------------------------------- -// -const TDesC& CWPDestinationNwItem::SettingsName() const - { - return *iSettingsName; - } - -// --------------------------------------------------------------------------- -// CWPDestinationNwItem::SaveL() -// Saves the Destination network using Extended connection settings API. -// --------------------------------------------------------------------------- -// -void CWPDestinationNwItem::SaveL() - { - DBG_PRINT( "CWPDestinationNwItem::SaveL - begin" ); - // Number of IAPs that have been linked to this destination. - const TInt iapCount( iNapDefs.Count() ); - RCmManagerExt cmManager; - cmManager.OpenL(); - CleanupClosePushL( cmManager ); // CS:1 - RCmDestinationExt destination = CreateDestinationL( cmManager ); - CleanupClosePushL( destination ); // CS:2 - RCmConnectionMethodExt tempconn; - - // Add linked IAPs to destination. - for ( TInt counter = 0; counter < iapCount; counter++ ) - { - TPckgBuf apUid; - apUid.Copy( iNapDefs[counter]->Data( 0 ) ); - // The stored id is the wap id. Convert it into the iap id - - TUint32 iapId = IapIdFromWapIdL( apUid() ); - - apUid = NULL; - RCmConnectionMethodExt connection = - cmManager.ConnectionMethodL( iapId ); - CleanupClosePushL( connection ); // CS:5 - - RArray destinationIds; - cmManager.AllDestinationsL( destinationIds ); - CleanupClosePushL( destinationIds ); - - TInt counter2(0); - for ( counter2 = 0; counter2 < destinationIds.Count(); counter2++ ) - { - RCmDestinationExt tempdest = cmManager.DestinationL( - destinationIds[counter2] ); - - TRAPD( err, tempconn = tempdest.ConnectionMethodByIDL( iapId )); - - tempconn.Close(); - tempdest.Close(); - - if ( err != KErrNotFound ) - { - // Found from other destination - break; - } - } - if ( counter2 == destinationIds.Count() ) - { - // Not found in any other destination - destination.AddConnectionMethodL( connection ); - } - else - { - // Found in some other destination -> create copy - destination.AddConnectionMethodL( tempconn = connection.CreateCopyL() ); - tempconn.Close(); - } - CleanupStack::PopAndDestroy( &destinationIds ); - - // Change seamlessness level for linked WLAN IAPs. - TUint32 bearerType = connection.GetIntAttributeL( - CMManager::ECmBearerType ); - if ( KUidWlanBearerType == bearerType ) - { - connection.SetIntAttributeL( CMManager::ECmSeamlessnessLevel, - CMManager::ESeamlessnessShowprogress ); - connection.UpdateL(); - } - - destination.UpdateL(); - CleanupStack::PopAndDestroy( &connection ); // CS:4 - } - destination.UpdateL(); // In case there were no IAP linkages. - // Destination ID is needed as a descriptor (used in linking settings). - TUint32 destinationId = destination.Id(); - iSavedProfileId->Des().Num( destinationId, EDecimal ); - // Pop destination & cmManager. - CleanupStack::PopAndDestroy( 2, &cmManager ); // CS:0 - DBG_PRINT( "CWPDestinationNwItem::SaveL - end" ); - } - -// --------------------------------------------------------------------------- -// CWPDestinationNwItem::SaveData -// -// --------------------------------------------------------------------------- -// -const TDesC8& CWPDestinationNwItem::SaveData() const - { - return *iSavedProfileId; - } - -// --------------------------------------------------------------------------- -// CWPDestinationNwItem::CreateDestinationL -// Checks that settings name if unique, renames if necessary, and creates -// a destination network. -// --------------------------------------------------------------------------- -// -RCmDestinationExt CWPDestinationNwItem::CreateDestinationL( - RCmManagerExt& aCmManager ) - { - DBG_PRINT( "CWPDestinationNwItem::CreateDestinationL - begin" ); - RArray destinationIds; - // Get destination ID's for checking if name to be set is reserved. - CleanupClosePushL( destinationIds ); // CS:1 - aCmManager.AllDestinationsL( destinationIds ); - const TInt destinationCount = destinationIds.Count(); - // Destination's name to actually be used. - HBufC* newName = HBufC::NewLC( - iSettingsName->Des().Length() + KMaxCharsInTUint32 ); // CS:2 - newName->Des().Copy( iSettingsName->Des() ); - - // Check names from all existing destinations. - for ( TInt counter = 0; counter < destinationCount; counter++ ) - { - RCmDestinationExt destination = aCmManager.DestinationL( - destinationIds[counter] ); - CleanupClosePushL( destination ); // CS:3 - HBufC* settingsName = destination.NameLC(); // CS:4 - // If destination exists, return it. - if ( 0 == newName->Des().Compare( settingsName->Des() ) ) - { - // Pop settingsName & destination & newName - CleanupStack::PopAndDestroy( 3, &destination ); // CS:1 - - RCmDestinationExt dest2 = aCmManager.DestinationL( - destinationIds[counter] ); - - CleanupStack::PopAndDestroy( &destinationIds ); // CS:0 - DBG_PRINT( "CWPDestinationNwItem::CreateDestinationL - end" ); - return dest2; - } - // Pop settingsName & destination. - CleanupStack::PopAndDestroy( 2, &destination ); // CS:2 - } - - // Create new a destination and return it. - RCmDestinationExt destination = aCmManager.CreateDestinationL( *newName ); - // Pop newName & destinationIds - CleanupStack::PopAndDestroy( 2, &destinationIds ); // CS:0 - DBG_PRINT( "CWPDestinationNwItem::CreateDestinationL - end" ); - return destination; - } - -// --------------------------------------------------------------------------- -// CWPDestinationNwItem::IapIdFromWapId -// Returns IAP ID from WAP ID. -// --------------------------------------------------------------------------- -// -TUint32 CWPDestinationNwItem::IapIdFromWapIdL( TUint32 aWapId ) - { - RCmManagerExt cmManager; - cmManager.OpenLC(); // CS:1 - RArray iapIds; - TUint32 iapId( 0 ); - - // First get all free IAP ID's. - cmManager.ConnectionMethodL( iapIds ); - CleanupClosePushL( iapIds ); // CS:2 - - // Then get IAP ID's from all destinations. - RArray destIds; - cmManager.AllDestinationsL( destIds ); - CleanupClosePushL( destIds ); // CS:3 - TInt destCount = destIds.Count(); - for ( TInt destIndex = 0; destIndex < destCount; destIndex++ ) - { - RCmDestinationExt dest = cmManager.DestinationL( - destIds[destIndex] ); - CleanupClosePushL( dest ); // CS:4 - TInt cmCount = dest.ConnectionMethodCount(); - for ( TInt cmIndex = 0; cmIndex < cmCount; cmIndex++ ) - { - TUint32 apId = dest.ConnectionMethodL( - cmIndex ).GetIntAttributeL( CMManager::ECmIapId ); - iapIds.AppendL( apId ); - } - CleanupStack::PopAndDestroy( &dest ); // CS:3 - } - // Finally, go through all connection methods and find correct IAP ID. - const TInt cmCount = iapIds.Count(); - for ( TInt counter = 0; counter < cmCount; counter++ ) - { - TUint32 id = cmManager.GetConnectionMethodInfoIntL( - iapIds[counter], CMManager::ECmWapId ); - if ( id == aWapId ) - { - iapId = iapIds[counter]; - // No need to go through rest of IAPs. - break; - } - } - // PopAndDestroy destIds, iapIds, cmManager. - CleanupStack::PopAndDestroy( 3, &cmManager ); // CS:0 - return iapId; - } - - -// End of file.