--- 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 <wpdestinationnwadapter.rsg>
-#include <charconv.h>
-#include <CWPCharacteristic.h>
-#include <cmmanagerext.h>
-#include <cmdestinationext.h>
-#include <cmconnectionmethodext.h>
-#include <cmconnectionmethoddef.h>
-#include <cmpluginwlandef.h> // 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<TUint32> 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<TUint32> 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<TUint32> 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<TUint32> 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<TUint32> 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.