cmmanager/cmmgr/cmmserver/src/cmminstancemapping.cpp
branchRCL_3
changeset 58 83ca720e2b9a
parent 57 05bc53fe583b
child 62 bb1f80fb7db2
--- a/cmmanager/cmmgr/cmmserver/src/cmminstancemapping.cpp	Tue Aug 31 15:35:44 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1453 +0,0 @@
-/*
-* Copyright (c) 2009-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:
-* Keeps track of the general destination/connection method structure in
-* database.
-*
-*/
-
-
-#include <metadatabase.h>
-#include <commsdattypesv1_1.h>
-#include <datamobilitycommsdattypes.h>
-#include <cmpluginembdestinationdef.h>
-#include <wlancontainer.h>
-
-#include "cmminstancemapping.h"
-#include "cmpluginbaseeng.h"
-
-#include "OstTraceDefinitions.h"
-#ifdef OST_TRACE_COMPILER_IN_USE
-#include "cmminstancemappingTraces.h"
-#endif
-
-
-// ---------------------------------------------------------------------------
-// Two phased construction.
-// ---------------------------------------------------------------------------
-//
-CDestination* CDestination::NewL()
-    {
-    OstTraceFunctionEntry0( CDESTINATION_NEWL_ENTRY );
-
-    CDestination* self = CDestination::NewLC();
-    CleanupStack::Pop( self );
-
-    OstTraceFunctionExit0( CDESTINATION_NEWL_EXIT );
-    return self;
-    }
-
-// ---------------------------------------------------------------------------
-// Two phased construction.
-// ---------------------------------------------------------------------------
-//
-CDestination* CDestination::NewLC()
-    {
-    OstTraceFunctionEntry0( CDESTINATION_NEWLC_ENTRY );
-
-    CDestination* self = new( ELeave ) CDestination();
-    CleanupStack::PushL( self );
-    self->ConstructL();
-
-    OstTraceFunctionExit0( CDESTINATION_NEWLC_EXIT );
-    return self;
-    }
-
-// ---------------------------------------------------------------------------
-// Destructor.
-// ---------------------------------------------------------------------------
-//
-CDestination::~CDestination()
-    {
-    OstTraceFunctionEntry0( CDESTINATION_CDESTINATION_ENTRY );
-
-    iConnMethodItemArray.Close();
-    iUnsupportedConnMethods.Close();
-
-    OstTraceFunctionExit0( CDESTINATION_CDESTINATION_EXIT );
-    }
-
-// ---------------------------------------------------------------------------
-// Constructor.
-// ---------------------------------------------------------------------------
-//
-CDestination::CDestination()
-    {
-    OstTraceFunctionEntry0( DUP1_CDESTINATION_CDESTINATION_ENTRY );
-
-    iId = 0;
-    iMetadata = 0;
-
-    OstTraceFunctionExit0( DUP1_CDESTINATION_CDESTINATION_EXIT );
-    }
-
-// ---------------------------------------------------------------------------
-// Second phase constructor.
-// ---------------------------------------------------------------------------
-//
-void CDestination::ConstructL()
-    {
-    OstTraceFunctionEntry0( CDESTINATION_CONSTRUCTL_ENTRY );
-    OstTraceFunctionExit0( CDESTINATION_CONSTRUCTL_EXIT );
-    }
-
-// ---------------------------------------------------------------------------
-// Two phased construction.
-// ---------------------------------------------------------------------------
-//
-CCmmInstanceMapping* CCmmInstanceMapping::NewL( CCmmCache& aCache )
-    {
-    OstTraceFunctionEntry0( CCMMINSTANCEMAPPING_NEWL_ENTRY );
-
-    CCmmInstanceMapping* self = CCmmInstanceMapping::NewLC( aCache );
-    CleanupStack::Pop( self );
-
-    OstTraceFunctionExit0( CCMMINSTANCEMAPPING_NEWL_EXIT );
-    return self;
-    }
-
-// ---------------------------------------------------------------------------
-// Two phased construction.
-// ---------------------------------------------------------------------------
-//
-CCmmInstanceMapping* CCmmInstanceMapping::NewLC( CCmmCache& aCache )
-    {
-    OstTraceFunctionEntry0( CCMMINSTANCEMAPPING_NEWLC_ENTRY );
-
-    CCmmInstanceMapping* self = new( ELeave ) CCmmInstanceMapping( aCache );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-
-    OstTraceFunctionExit0( CCMMINSTANCEMAPPING_NEWLC_EXIT );
-    return self;
-    }
-
-// ---------------------------------------------------------------------------
-// Destructor.
-// ---------------------------------------------------------------------------
-//
-CCmmInstanceMapping::~CCmmInstanceMapping()
-    {
-    OstTraceFunctionEntry0( CCMMINSTANCEMAPPING_CCMMINSTANCEMAPPING_ENTRY );
-
-    iConnMethodItemArray.Close();
-    iUnsupportedConnMethods.Close();
-    iDestinations.ResetAndDestroy();
-    iDeletedConnMethods.Close();
-    iDeletedDestinations.Close();
-
-    OstTraceFunctionExit0( CCMMINSTANCEMAPPING_CCMMINSTANCEMAPPING_EXIT );
-    }
-
-// ---------------------------------------------------------------------------
-// Constructor.
-// ---------------------------------------------------------------------------
-//
-CCmmInstanceMapping::CCmmInstanceMapping( CCmmCache& aCache ) : iCache( aCache )
-    {
-    OstTraceFunctionEntry0( DUP1_CCMMINSTANCEMAPPING_CCMMINSTANCEMAPPING_ENTRY );
-    iEasyWlanId = 0;
-    OstTraceFunctionExit0( DUP1_CCMMINSTANCEMAPPING_CCMMINSTANCEMAPPING_EXIT );
-    }
-
-// ---------------------------------------------------------------------------
-// Second phase constructor.
-// ---------------------------------------------------------------------------
-//
-void CCmmInstanceMapping::ConstructL()
-    {
-    OstTraceFunctionEntry0( CCMMINSTANCEMAPPING_CONSTRUCTL_ENTRY );
-
-    // Read connection methods from database and find the supported ones.
-    ReadAndValidateConnMethodsL();
-    // Read destinations from database.
-    ReadAndValidateDestinationsL();
-
-    OstTraceFunctionExit0( CCMMINSTANCEMAPPING_CONSTRUCTL_EXIT );
-    }
-
-// ---------------------------------------------------------------------------
-// Resets arrays and reads CMs and Connection Methods
-// ---------------------------------------------------------------------------
-//
-void CCmmInstanceMapping::RefreshL()
-    {
-    OstTraceFunctionEntry0( CCMMINSTANCEMAPPING_REFRESHL_ENTRY );
-
-    ReadAndValidateConnMethodsL();
-    ReadAndValidateDestinationsL();
-
-    OstTraceFunctionExit0( CCMMINSTANCEMAPPING_REFRESHL_EXIT );
-    }
-
-// ---------------------------------------------------------------------------
-// Check if the given ID is a valid existing destination ID.
-// ---------------------------------------------------------------------------
-//
-TBool CCmmInstanceMapping::ValidDestinationId( const TUint32 aId ) const
-    {
-    OstTraceFunctionEntry0( CCMMINSTANCEMAPPING_VALIDDESTINATIONID_ENTRY );
-
-    TBool validity( EFalse );
-
-    if ( aId > 0 )
-        {
-        for ( TInt i = 0; i < iDestinations.Count(); i++ )
-            {
-            if ( iDestinations[i]->iId == aId )
-                {
-                validity = ETrue;
-                break;
-                }
-            }
-        }
-
-    OstTraceFunctionExit0( CCMMINSTANCEMAPPING_VALIDDESTINATIONID_EXIT );
-    return validity;
-    }
-
-// ---------------------------------------------------------------------------
-// Check if the given ID is a valid existing connection method ID.
-// ---------------------------------------------------------------------------
-//
-TBool CCmmInstanceMapping::ValidConnMethodId( const TUint32 aId ) const
-    {
-    OstTraceFunctionEntry0( CCMMINSTANCEMAPPING_VALIDCONNMETHODID_ENTRY );
-
-    TBool validity( EFalse );
-
-    if ( aId > 0 )
-        {
-        for ( TInt i = 0; i < iConnMethodItemArray.Count(); i++ )
-            {
-            if ( iConnMethodItemArray[i].iId == aId )
-                {
-                validity = ETrue;
-                break;
-                }
-            }
-        }
-
-    OstTraceFunctionExit0( CCMMINSTANCEMAPPING_VALIDCONNMETHODID_EXIT );
-    return validity;
-    }
-
-// ---------------------------------------------------------------------------
-// Check if the given ID is a valid existing unsupported connection method ID.
-// ---------------------------------------------------------------------------
-//
-TBool CCmmInstanceMapping::UnsupportedConnMethodId( const TUint32 aId ) const
-    {
-    OstTraceFunctionEntry0( CCMMINSTANCEMAPPING_UNSUPPORTEDCONNMETHODID_ENTRY );
-
-    TBool validity( EFalse );
-
-    if ( aId > 0 )
-        {
-        for ( TInt i = 0; i < iUnsupportedConnMethods.Count(); i++ )
-            {
-            if ( iUnsupportedConnMethods[i] == aId )
-                {
-                validity = ETrue;
-                break;
-                }
-            }
-        }
-
-    OstTraceFunctionExit0( CCMMINSTANCEMAPPING_UNSUPPORTEDCONNMETHODID_EXIT );
-    return validity;
-    }
-
-// ---------------------------------------------------------------------------
-// Check from database if the given destination is an embedded destination in
-// any other destination.
-// ---------------------------------------------------------------------------
-//
-TBool CCmmInstanceMapping::DestinationIsEmbedded( const TUint32 aDestinationId ) const
-    {
-    OstTraceFunctionEntry0( CCMMINSTANCEMAPPING_DESTINATIONISEMBEDDED_ENTRY );
-
-    TBool result( EFalse );
-    TInt index( 0 );
-
-    // Iterate through all destinations.
-    for ( TInt i = 0; i < iDestinations.Count(); i++ )
-        {
-        // An embedded destination is always at the very last position in
-        // the connection method item array.
-        index = iDestinations[i]->iConnMethodItemArray.Count() - 1;
-        if ( index >= 0 )
-            {
-            // We can skip bearer type check. If the last item isn't an
-            // embedded destination, the ID will not match anyway.
-            if ( iDestinations[i]->iConnMethodItemArray[index].iId == aDestinationId )
-                {
-                result = ETrue;
-                break;
-                }
-            }
-        }
-
-    OstTraceFunctionExit0( CCMMINSTANCEMAPPING_DESTINATIONISEMBEDDED_EXIT );
-    return result;
-    }
-
-// ---------------------------------------------------------------------------
-// Check from database if the given destination has an embedded destination.
-// ---------------------------------------------------------------------------
-//
-TBool CCmmInstanceMapping::DestinationHasEmbedded( const TUint32 aDestinationId ) const
-    {
-    OstTraceFunctionEntry0( CCMMINSTANCEMAPPING_DESTINATIONHASEMBEDDED_ENTRY );
-
-    TBool result( EFalse );
-
-    for ( TInt i = 0; i < iDestinations.Count(); i++ )
-        {
-        // Find the correct destination.
-        if ( iDestinations[i]->iId == aDestinationId )
-            {
-            // An embedded destination is always at the very last position in
-            // the connection method item array.
-            TInt index = iDestinations[i]->iConnMethodItemArray.Count() - 1;
-            if ( index >= 0 )
-                {
-                if ( iDestinations[i]->iConnMethodItemArray[index].IsEmbedded() )
-                    {
-                    result = ETrue;
-                    }
-                }
-            break;
-            }
-        }
-
-    OstTraceFunctionExit0( CCMMINSTANCEMAPPING_DESTINATIONHASEMBEDDED_EXIT );
-    return result;
-    }
-
-// ---------------------------------------------------------------------------
-// Check from database if the given destination is pointed to by any virtual
-// IAP.
-// ---------------------------------------------------------------------------
-//
-TBool CCmmInstanceMapping::DestinationPointedToByVirtualIap(
-        const TUint32 aDestinationId ) const
-    {
-    OstTraceFunctionEntry0( CCMMINSTANCEMAPPING_DESTINATIONPOINTEDTOBYVIRTUALIAP_ENTRY );
-
-    TBool result( EFalse );
-    if ( aDestinationId > 0 )
-        {
-        for ( TInt i = 0; i < iConnMethodItemArray.Count(); i++ )
-            {
-            if ( iConnMethodItemArray[i].LinkedSnapId() == aDestinationId )
-                {
-                result = ETrue;
-                break;
-                }
-            }
-        }
-
-    OstTraceFunctionExit0( CCMMINSTANCEMAPPING_DESTINATIONPOINTEDTOBYVIRTUALIAP_EXIT );
-    return result;
-    }
-
-// ---------------------------------------------------------------------------
-// Check from database if the given connection method is pointed to by any
-// virtual IAP.
-// ---------------------------------------------------------------------------
-//
-TBool CCmmInstanceMapping::ConnMethodPointedToByVirtualIap(
-        const TUint32 aConnMethodId ) const
-    {
-    OstTraceFunctionEntry0( CCMMINSTANCEMAPPING_CONNMETHODPOINTEDTOBYVIRTUALIAP_ENTRY );
-
-    TBool result( EFalse );
-    if ( aConnMethodId > 0 )
-        {
-        for ( TInt i = 0; i < iConnMethodItemArray.Count(); i++ )
-            {
-            if ( iConnMethodItemArray[i].LinkedIapId() == aConnMethodId )
-                {
-                result = ETrue;
-                break;
-                }
-            }
-        }
-
-    OstTraceFunctionExit0( CCMMINSTANCEMAPPING_CONNMETHODPOINTEDTOBYVIRTUALIAP_EXIT );
-    return result;
-    }
-
-// ---------------------------------------------------------------------------
-// Check if the given connection method is the only connection method in the
-// given destination and if a virtual IAP points to that destination.
-// ---------------------------------------------------------------------------
-//
-TBool CCmmInstanceMapping::ConnMethodInDestinationButLocked(
-        const TUint32 aConnMethodId,
-        const TUint32 aDestinationId ) const
-    {
-    OstTraceFunctionEntry0( CCMMINSTANCEMAPPING_CONNMETHODINDESTINATIONBUTLOCKED_ENTRY );
-
-    TBool result( EFalse );
-
-    // Find destination.
-    CDestination* destination( NULL );
-    destination = GetDestination( aDestinationId );
-
-    if ( destination )
-        {
-        // Check if the destination has only 1 IAP.
-        if ( destination->iConnMethodItemArray.Count() == 1 )
-            {
-            // Check if the IAP has given ID.
-            if ( destination->iConnMethodItemArray[0].iId == aConnMethodId )
-                {
-                // Check if this destination is linked from a virtual IAP.
-                result = DestinationPointedToByVirtualIap( aDestinationId );
-                }
-            }
-        }
-
-    OstTraceFunctionExit0( CCMMINSTANCEMAPPING_CONNMETHODINDESTINATIONBUTLOCKED_EXIT );
-    return result;
-    }
-
-// ---------------------------------------------------------------------------
-// Get bearer type of connection method matching given ID.
-// Return KErrNone if ID is found, KErrNotFound if not.
-// ---------------------------------------------------------------------------
-//
-TInt CCmmInstanceMapping::GetConnMethodBearerType(
-        const TUint32 aConnMethodId,
-        TUint32& bearerType ) const
-    {
-    OstTraceFunctionEntry0( CCMMINSTANCEMAPPING_GETCONNMETHODBEARERTYPE_ENTRY );
-
-    TInt result( KErrNotFound );
-
-    for ( TInt i = 0; i < iConnMethodItemArray.Count(); i++ )
-        {
-        if ( iConnMethodItemArray[i].iId == aConnMethodId )
-            {
-            bearerType = iConnMethodItemArray[i].iBearerType;
-            result = KErrNone;
-            break;
-            }
-        }
-    if ( result == KErrNotFound )
-        {
-        // Embedded destinations are not in connection method array.
-        if ( aConnMethodId > KCmmDestIdIntervalMin && aConnMethodId < KCmmDestIdIntervalMax )
-            {
-            if ( ValidDestinationId( aConnMethodId ) )
-                {
-                bearerType = KUidEmbeddedDestination;
-                result = KErrNone;
-                }
-            }
-        }
-
-    OstTraceFunctionExit0( CCMMINSTANCEMAPPING_GETCONNMETHODBEARERTYPE_EXIT );
-    return result;
-    }
-
-// ---------------------------------------------------------------------------
-// Returns the number of destinations the provided connection method belongs
-// to. Zero is returned if the connection method belongs to no destination
-// (legacy IAP) or does not exist.
-// ---------------------------------------------------------------------------
-//
-TInt CCmmInstanceMapping::DestinationsContainingConnMethod(
-        const TUint32 aConnMethodId ) const
-    {
-    OstTraceFunctionEntry0( CCMMINSTANCEMAPPING_CONNMETHODREFERENCECOUNT_ENTRY );
-
-    TInt referenceCount( 0 );
-    TInt count( 0 );
-
-    // Go through each destination.
-    for ( TInt i = 0; i < iDestinations.Count(); i++ )
-        {
-        TBool foundInThisDestination( EFalse );
-
-        // Loop through all connection methods in this destination.
-        count = iDestinations[i]->iConnMethodItemArray.Count();
-        for ( TInt j = 0; j < count; j++ )
-            {
-            if ( iDestinations[i]->iConnMethodItemArray[j].iId == aConnMethodId )
-                {
-                foundInThisDestination = ETrue;
-                referenceCount++;
-                break;
-                }
-            }
-
-        // Check unsupported connection methods also.
-        if ( !foundInThisDestination )
-            {
-            count = iDestinations[i]->iUnsupportedConnMethods.Count();
-            for ( TInt j = 0; j < count; j++ )
-                {
-                if ( iDestinations[i]->iUnsupportedConnMethods[j] == aConnMethodId )
-                    {
-                    referenceCount++;
-                    break;
-                    }
-                }
-            }
-        }
-
-    OstTraceFunctionExit0( CCMMINSTANCEMAPPING_CONNMETHODREFERENCECOUNT_EXIT );
-    return referenceCount;
-    }
-
-// ---------------------------------------------------------------------------
-// Returns the destination IDs containing the connection method given as
-// parameter.
-// ---------------------------------------------------------------------------
-//
-void CCmmInstanceMapping::DestinationsContainingConnMethodL(
-        const TUint32 aConnMethodId,
-        RArray<TUint32>& aDestinationIds ) const
-    {
-    OstTraceFunctionEntry0( CCMMINSTANCEMAPPING_DESTINATIONSCONTAININGCONNMETHODL_ENTRY );
-
-    aDestinationIds.Reset();
-    TInt count( 0 );
-
-    // Go through each destination.
-    for ( TInt i = 0; i < iDestinations.Count(); i++ )
-        {
-        TBool foundInThisDestination( EFalse );
-
-        // Loop through all connection methods in this destination.
-        count = iDestinations[i]->iConnMethodItemArray.Count();
-        for ( TInt j = 0; j < count; j++ )
-            {
-            if ( iDestinations[i]->iConnMethodItemArray[j].iId == aConnMethodId )
-                {
-                foundInThisDestination = ETrue;
-                aDestinationIds.AppendL( iDestinations[i]->iId );
-                break;
-                }
-            }
-
-        // Check unsupported connection methods also.
-        if ( !foundInThisDestination )
-            {
-            count = iDestinations[i]->iUnsupportedConnMethods.Count();
-            for ( TInt j = 0; j < count; j++ )
-                {
-                if ( iDestinations[i]->iUnsupportedConnMethods[j] == aConnMethodId )
-                    {
-                    aDestinationIds.AppendL( iDestinations[i]->iId );
-                    break;
-                    }
-                }
-            }
-        }
-
-    OstTraceFunctionExit0( CCMMINSTANCEMAPPING_DESTINATIONSCONTAININGCONNMETHODL_EXIT );
-    }
-
-// ---------------------------------------------------------------------------
-// Get database session.
-// ---------------------------------------------------------------------------
-//
-CommsDat::CMDBSession& CCmmInstanceMapping::Session() const
-    {
-    // No traces.
-    return iCache.Session();
-    }
-
-// ---------------------------------------------------------------------------
-// Discovers all connection methods from database. Unsupported connection
-// methods are kept separately.
-// ---------------------------------------------------------------------------
-//
-void CCmmInstanceMapping::ReadAndValidateConnMethodsL()
-    {
-    OstTraceFunctionEntry0( CCMMINSTANCEMAPPING_READANDVALIDATECONNMETHODSL_ENTRY );
-
-    CMDBRecordSet<CCDIAPRecord>* iapRecordSet =
-            new( ELeave ) CMDBRecordSet<CCDIAPRecord>( KCDTIdIAPRecord );
-    CleanupStack::PushL( iapRecordSet );
-
-    CCDIAPRecord* iapRecord = static_cast<CCDIAPRecord*>(
-            CCDRecordBase::RecordFactoryL( KCDTIdIAPRecord ) );
-    CleanupStack::PushL( iapRecord );
-
-    TRAP_IGNORE( iapRecordSet->LoadL( Session() ) );
-
-    // Clear the old info about IAPs.
-    iConnMethodItemArray.Reset();
-    iUnsupportedConnMethods.Reset();
-
-    TInt iapRecordCount( iapRecordSet->iRecords.Count() );
-    TInt err( KErrNone );
-    TUint32 bearerType( 0 );
-    TUint bearerPriority( CMManager::KDataMobilitySelectionPolicyPriorityWildCard );
-
-    for ( TInt i = 0; i < iapRecordCount; i++ )
-        {
-        TUint32 connMethodId( iapRecordSet->iRecords[i]->RecordId() );
-
-        // Check the connection method is not on the deleted list waiting to be
-        // deleted from database.
-        TInt indexInDeletedList = iDeletedConnMethods.FindInOrder( ( TUint )connMethodId );
-        if ( indexInDeletedList == KErrNotFound )
-            {
-            // Check the bearer type of the iap. Leaves if iap is unsupported.
-            iapRecord->SetRecordId( connMethodId );
-            TRAP( err, iCache.BearerInfoFromIapRecordL( iapRecord, bearerType, bearerPriority ) );
-            if ( !err )
-                {
-                TBool isVirtual( EFalse );
-                TUint32 linkedIap( 0 );
-                TUint32 linkedSnap( 0 );
-
-                // BearerInfoFromIapRecordL() has called LoadL() for iapRecord.
-                if( TPtrC( KCDTypeNameVPNService ) == iapRecord->iServiceType )
-                    {
-                    isVirtual = ETrue;
-                    CCDVPNServiceRecord* serviceRecord = static_cast<CCDVPNServiceRecord*>(
-                            CCDRecordBase::RecordFactoryL( KCDTIdVPNServiceRecord ) );
-                    CleanupStack::PushL( serviceRecord );
-                    serviceRecord->SetRecordId( iapRecord->iService );
-                    serviceRecord->LoadL( Session() );
-
-                    // If neither link is set, or both are set, it is an error
-                    // but we ignore it. If both links are set, we use only the
-                    // SNAP link.
-                    if ( !serviceRecord->iServiceSNAP.IsNull() )
-                        {
-                        TUint32 apRecordId = serviceRecord->iServiceSNAP;
-                        if ( apRecordId != 0 )
-                            {
-                            CCDAccessPointRecord* apRecord = static_cast<CCDAccessPointRecord*>(
-                                    CCDRecordBase::RecordFactoryL( KCDTIdAccessPointRecord ) );
-                            apRecord->SetRecordId( apRecordId );
-                            TRAP( err, apRecord->LoadL( Session() ) );
-                            if ( !err )
-                                {
-                                linkedSnap = apRecord->iRecordTag;
-                                }
-                            }
-                        }
-                    if ( !linkedSnap && !serviceRecord->iServiceIAP.IsNull() )
-                        {
-                        linkedIap = serviceRecord->iServiceIAP;
-                        if ( linkedIap >= KCmmConnMethodIdIntervalMax )
-                            {
-                            linkedIap = ( linkedIap & KCDMaskShowRecordId ) >> KBitsInOneByte;
-                            }
-                        }
-
-                    CleanupStack::PopAndDestroy( serviceRecord );
-                    }
-                    TCmmConnMethodItem item(
-                            connMethodId,
-                            bearerType,
-                            bearerPriority,
-                            0,
-                            isVirtual,
-                            linkedIap,
-                            linkedSnap );
-                    iConnMethodItemArray.Append( item ); // Ignore errors.
-                }
-            else if ( err == KErrNotSupported )
-                {
-                iUnsupportedConnMethods.InsertInOrder( ( TUint )connMethodId ); // Ignore errors.
-                }
-            else if ( err == KErrNoMemory )
-                {
-                User::Leave( err );
-                }
-            }
-        }
-
-    CleanupStack::PopAndDestroy( iapRecord );
-    CleanupStack::PopAndDestroy( iapRecordSet );
-
-    // Check all virtual IAPs that link to an IAP. If the link is invalid
-    // (linked IAP not found), the IAP is removed.
-    ValidateVirtualIapsLinkingToIaps();
-
-    OstTraceFunctionExit0( CCMMINSTANCEMAPPING_READANDVALIDATECONNMETHODSL_EXIT );
-    }
-
-// ---------------------------------------------------------------------------
-// Discovers all destinations and the connection methods inside them.
-// Unsupported connection methods are kept separately.
-// ---------------------------------------------------------------------------
-//
-void CCmmInstanceMapping::ReadAndValidateDestinationsL()
-    {
-    OstTraceFunctionEntry0( CCMMINSTANCEMAPPING_READANDVALIDATEDESTINATIONSL_ENTRY );
-
-    // Make 2 loops, first add destinations and then connection methods / embedded destinations.
-    iDestinations.ResetAndDestroy();
-
-    // Explicitly build a TLinearOrder<class>. Used as parameter to RArray::InsertInOrder().
-    TLinearOrder<TCmmConnMethodItem> connMethodItemOrderingLogic( TCmmConnMethodItem::Compare );
-
-    CMDBRecordSet<CCDDataMobilitySelectionPolicyRecord>* snapRecordSet =
-            new( ELeave ) CMDBRecordSet<CCDDataMobilitySelectionPolicyRecord>(
-                    iCache.TableId( ECmmDbSnapRecord ) );
-    CleanupStack::PushL( snapRecordSet );
-
-    CCDDataMobilitySelectionPolicyRecord* snapRecord =
-            new( ELeave ) CCDDataMobilitySelectionPolicyRecord(
-                    iCache.TableId( ECmmDbSnapRecord ) );
-    CleanupStack::PushL( snapRecord );
-
-    TRAP_IGNORE( snapRecordSet->LoadL( Session() ) );
-
-    // Read snap ID, connection method ID and embedded destination ID.
-    const TInt snapRecordCount( snapRecordSet->iRecords.Count() );
-    for ( TInt i = 0; i < snapRecordCount; i++ )
-        {
-        snapRecord->SetElementId( snapRecordSet->iRecords[i]->ElementId() );
-        snapRecord->LoadL( Session() );
-
-        TUint32 destinationId = (TUint32)( snapRecord->iSNAP );
-        TInt indexInDeletedList = iDeletedDestinations.FindInOrder( ( TUint )destinationId );
-        if ( indexInDeletedList == KErrNotFound )
-            {
-            TUint32 connMethodId = ( snapRecord->iIAP & KCDMaskShowRecordId ) >> 8;
-            TUint32 embeddedDestinationId = (TUint32)( snapRecord->iEmbeddedSNAP );
-
-            // If connMethodId and embeddedDestinationId are 0 this is a destination.
-            if ( connMethodId == 0 && embeddedDestinationId == 0 )
-                {
-                TBool destAlreadyExists = ValidDestinationId( destinationId );
-                if ( !destAlreadyExists )
-                    {
-                    CCDSNAPMetadataRecord* metadataRecord = new( ELeave ) CCDSNAPMetadataRecord(
-                            iCache.TableId( ECmmDestMetadataRecord ) );
-                    CleanupStack::PushL( metadataRecord );
-
-                    // Add destination metadata.
-                    metadataRecord->iSNAP.SetL( destinationId );
-                    if ( metadataRecord->FindL( Session() ) )
-                        {
-                        metadataRecord->LoadL( Session() );
-
-                        CDestination* dest = CDestination::NewLC();
-                        dest->iId = destinationId;
-                        dest->iMetadata = metadataRecord->iMetadata;
-                        iDestinations.AppendL( dest );
-                        CleanupStack::Pop( dest );
-                        }
-                    CleanupStack::PopAndDestroy( metadataRecord );
-                    metadataRecord = NULL;
-                    }
-                }
-            }
-        }
-
-    // Check all virtual IAPs that link to a SNAP. If the link is invalid
-    // (linked SNAP not found), the IAP is removed.
-    ValidateVirtualIapsLinkingToSnaps();
-
-    // Read snap ID, connection method ID and embedded destination ID.
-    for ( TInt i = 0; i < snapRecordCount; i++ )
-        {
-        snapRecord->SetElementId( snapRecordSet->iRecords[i]->ElementId() );
-        snapRecord->LoadL( Session() );
-
-        TUint32 destinationId = (TUint32)( snapRecord->iSNAP );
-        TUint32 connMethodId = ( snapRecord->iIAP & KCDMaskShowRecordId ) >> 8;
-        TUint32 embeddedDestinationId = (TUint32)( snapRecord->iEmbeddedSNAP );
-
-        // If connMethodId or embeddedDestinationId differs from 0 this is a connection method object.
-        if ( connMethodId > 0 || embeddedDestinationId > 0 )
-            {
-            // Find destination.
-            CDestination* destination( NULL );
-            destination = GetDestination( destinationId );
-
-            if ( destination )
-                {
-                if ( connMethodId )
-                    {
-                    // Connection method, not embedded destination.
-                    TBool found( EFalse );
-                    TCmmConnMethodItem item;
-
-                    // Find connection method.
-                    for ( TInt j = 0; j < iConnMethodItemArray.Count(); j++ )
-                        {
-                        if ( iConnMethodItemArray[j].iId == connMethodId )
-                            {
-                            item = iConnMethodItemArray[j];
-                            found = ETrue;
-                            break;
-                            }
-                        }
-                    if ( found )
-                        {
-                        // Make sure no duplicate entries are allowed. Any
-                        // duplicate would imply a corrupted CommsDat.
-                        TInt index = destination->iConnMethodItemArray.Find<TUint32>(
-                                connMethodId,
-                                TCmmConnMethodItem::FindCompare );
-                        if ( index == KErrNotFound )
-                            {
-                            item.iPriority = snapRecord->iPriority;
-                            destination->iConnMethodItemArray.InsertInOrderAllowRepeats(
-                                    item,
-                                    connMethodItemOrderingLogic ); // Ignore errors.
-                            }
-                        }
-                    else
-                        {
-                        // Check if the connection method is unsupported instead.
-                        TBool isUnsupported = UnsupportedConnMethodId( connMethodId );
-                        if ( isUnsupported )
-                            {
-                            destination->iUnsupportedConnMethods.InsertInOrder(
-                                    ( TUint )connMethodId ); // Ignore errors.
-                            }
-                        }
-                    }
-
-                else
-                    {
-                    // Embedded destination, not IAP.
-                    // Prevent destinations from embedding themselves.
-                    if ( embeddedDestinationId != destinationId )
-                        {
-                        // Check embedded destination ID is valid.
-                        TBool valid = ValidDestinationId( embeddedDestinationId );
-                        if ( valid )
-                            {
-                            TCmmConnMethodItem item(
-                                    embeddedDestinationId,
-                                    KUidEmbeddedDestination,
-                                    CMManager::KDataMobilitySelectionPolicyPriorityWildCard,
-                                    CMManager::KDataMobilitySelectionPolicyPriorityWildCard );
-                            destination->iConnMethodItemArray.InsertInOrderAllowRepeats(
-                                    item,
-                                    connMethodItemOrderingLogic );
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    CleanupStack::PopAndDestroy( snapRecord );
-    CleanupStack::PopAndDestroy( snapRecordSet );
-
-    OstTraceFunctionExit0( CCMMINSTANCEMAPPING_READANDVALIDATEDESTINATIONSL_EXIT );
-    }
-
-// ---------------------------------------------------------------------------
-// Goes through the internal IAP table, checking all virtual IAPs that link to
-// an IAP. If the linked IAP is not found, the virtual IAP is removed.
-// ---------------------------------------------------------------------------
-//
-void CCmmInstanceMapping::ValidateVirtualIapsLinkingToIaps()
-    {
-    OstTraceFunctionEntry0( CCMMINSTANCEMAPPING_VALIDATEVIRTUALIAPSLINKINGTOIAPS_ENTRY );
-
-    for ( TInt i = 0; i < iConnMethodItemArray.Count(); i++ )
-        {
-        if ( iConnMethodItemArray[i].LinkedIapId() != 0 )
-            {
-            if ( !ValidConnMethodId( iConnMethodItemArray[i].LinkedIapId() ) )
-                {
-                iConnMethodItemArray.Remove( i );
-                i--; // Adjust counter.
-                }
-            }
-        }
-
-    OstTraceFunctionExit0( CCMMINSTANCEMAPPING_VALIDATEVIRTUALIAPSLINKINGTOIAPS_EXIT );
-    }
-
-// ---------------------------------------------------------------------------
-// Goes through the internal IAP table, checking all virtual IAPs that link to
-// a SNAP. If the linked SNAP is not found, the virtual IAP is removed.
-// ---------------------------------------------------------------------------
-//
-void CCmmInstanceMapping::ValidateVirtualIapsLinkingToSnaps()
-    {
-    OstTraceFunctionEntry0( CCMMINSTANCEMAPPING_VALIDATEVIRTUALIAPSLINKINGTOSNAPS_ENTRY );
-
-    for ( TInt i = 0; i < iConnMethodItemArray.Count(); i++ )
-        {
-        if ( iConnMethodItemArray[i].LinkedSnapId() != 0 )
-            {
-            if ( !ValidDestinationId( iConnMethodItemArray[i].LinkedSnapId() ) )
-                {
-                iConnMethodItemArray.Remove( i );
-                i--; // Adjust counter.
-                }
-            }
-        }
-
-    OstTraceFunctionExit0( CCMMINSTANCEMAPPING_VALIDATEVIRTUALIAPSLINKINGTOSNAPS_EXIT );
-    }
-
-// ---------------------------------------------------------------------------
-// Find the destination item matching the provided destination ID.
-// Returns a pointer to the internal destination item, NULL if not found.
-// ---------------------------------------------------------------------------
-//
-CDestination* CCmmInstanceMapping::GetDestination( const TUint32 aDestinationId ) const
-    {
-    OstTraceFunctionEntry0( CCMMINSTANCEMAPPING_GETDESTINATION_ENTRY );
-
-    CDestination* destination( NULL );
-    if ( aDestinationId > 0 )
-        {
-        for ( TInt i = 0; i < iDestinations.Count(); i++ )
-            {
-            if ( iDestinations[i]->iId == aDestinationId )
-                {
-                destination = iDestinations[i];
-                break;
-                }
-            }
-        }
-
-    OstTraceFunctionExit0( CCMMINSTANCEMAPPING_GETDESTINATION_EXIT );
-    return destination;
-    }
-
-// ---------------------------------------------------------------------------
-// Find and return a copy of a connection method item matching the given ID.
-// Returns KErrNotFound, if the connection method is not found.
-// ---------------------------------------------------------------------------
-//
-TInt CCmmInstanceMapping::GetConnMethodItem(
-        const TUint32 aConnMethodId,
-        TCmmConnMethodItem& aConnMethodItem ) const
-    {
-    OstTraceFunctionEntry0( CCMMINSTANCEMAPPING_GETCONNMETHODITEM_ENTRY );
-
-    TInt result( KErrNotFound );
-    for ( TInt i = 0; i < iConnMethodItemArray.Count(); i++ )
-        {
-        if ( iConnMethodItemArray[i].iId == aConnMethodId )
-            {
-            aConnMethodItem = iConnMethodItemArray[i];
-            result = KErrNone;
-            break;
-            }
-        }
-
-    OstTraceFunctionExit0( CCMMINSTANCEMAPPING_GETCONNMETHODITEM_EXIT );
-    return result;
-    }
-
-// ---------------------------------------------------------------------------
-// Returns all conenction method IDs. Unsupported connection methods are
-// included if aCheckBearerType is set to EFalse.
-// ---------------------------------------------------------------------------
-//
-void CCmmInstanceMapping::GetAllConnMethodsL(
-        RArray<TUint32>& aConnMethodArray,
-        TBool aCheckBearerType ) const
-    {
-    OstTraceFunctionEntry0( CCMMINSTANCEMAPPING_GETCONNMETHODSL_ENTRY );
-
-    TInt connMethodCount = iConnMethodItemArray.Count();
-    aConnMethodArray.Reset();
-
-    if ( aCheckBearerType )
-        {
-        aConnMethodArray.ReserveL( connMethodCount );
-        }
-    else
-        {
-        aConnMethodArray.ReserveL( connMethodCount + iUnsupportedConnMethods.Count() );
-        }
-
-    for ( TInt i = 0; i < connMethodCount; i++ )
-        {
-        aConnMethodArray.AppendL( iConnMethodItemArray[i].iId );
-        }
-    if ( !aCheckBearerType )
-        {
-        // Include unsupported connection methods also.
-        for ( TInt i = 0; i < iUnsupportedConnMethods.Count(); i++ )
-            {
-            aConnMethodArray.AppendL( ( TUint32 )iUnsupportedConnMethods[i] );
-            }
-        }
-
-    OstTraceFunctionExit0( CCMMINSTANCEMAPPING_GETCONNMETHODSL_EXIT );
-    }
-
-// ---------------------------------------------------------------------------
-// Return the number of destinations in database.
-// ---------------------------------------------------------------------------
-//
-TInt CCmmInstanceMapping::GetDestinationCount() const
-    {
-    OstTraceFunctionEntry0( CCMMINSTANCEMAPPING_GETDESTINATIONCOUNT_ENTRY );
-
-    return iDestinations.Count();
-    }
-
-// ---------------------------------------------------------------------------
-// Return an array containing all destination IDs.
-// ---------------------------------------------------------------------------
-//
-void CCmmInstanceMapping::GetDestinationsL( RArray<TUint32>& aDestinationArray ) const
-    {
-    OstTraceFunctionEntry0( CCMMINSTANCEMAPPING_GETDESTINATIONSL_ENTRY );
-
-    aDestinationArray.Reset();
-    aDestinationArray.ReserveL( iDestinations.Count() ); // Re-allocates only if more is needed.
-
-    for ( TInt i = 0; i < iDestinations.Count(); i++ )
-        {
-        aDestinationArray.AppendL( iDestinations[i]->iId );
-        }
-
-    OstTraceFunctionExit0( CCMMINSTANCEMAPPING_GETDESTINATIONSL_EXIT );
-    }
-
-// ---------------------------------------------------------------------------
-// Inserts all the valid connection methods inside the given destination into
-// the provided connection method item array. The array is reset first.
-// ---------------------------------------------------------------------------
-//
-void CCmmInstanceMapping::GetConnMethodsFromDestinationL(
-        const TUint32 aDestinationId,
-        RArray<TCmmConnMethodItem>& aConnMethodArray ) const
-    {
-    OstTraceFunctionEntry0( CCMMINSTANCEMAPPING_GETCONNMETHODSFROMDESTINATIONL_ENTRY );
-
-    TBool destinationFound( EFalse );
-
-    for ( TInt i = 0; i < iDestinations.Count(); i++ )
-        {
-        if ( iDestinations[i]->iId == aDestinationId )
-            {
-            destinationFound = ETrue;
-            aConnMethodArray.Reset();
-            aConnMethodArray.ReserveL( iDestinations[i]->iConnMethodItemArray.Count() );
-
-            for ( TInt j = 0; j < iDestinations[i]->iConnMethodItemArray.Count(); j++ )
-                {
-                aConnMethodArray.AppendL( iDestinations[i]->iConnMethodItemArray[j] );
-                }
-            break;
-            }
-        }
-    if ( !destinationFound )
-        {
-        User::Leave( KErrNotFound );
-        }
-
-    OstTraceFunctionExit0( CCMMINSTANCEMAPPING_GETCONNMETHODSFROMDESTINATIONL_EXIT );
-    }
-
-// ---------------------------------------------------------------------------
-// Check if the given connection method belongs to any other destination than
-// the one provided.
-// ---------------------------------------------------------------------------
-//
-TBool CCmmInstanceMapping::ConnMethodInOtherDestination(
-        const TUint32 aConnMethodId,
-        const TUint32 aDestinationId )
-    {
-    OstTraceFunctionEntry0( CCMMINSTANCEMAPPING_CONNMETHODINOTHERDESTINATION_ENTRY );
-
-    // Loop through all destinations.
-    for ( TInt i = 0; i < iDestinations.Count(); i++ )
-        {
-        // Skip the specified destination.
-        if ( iDestinations[i]->iId != aDestinationId )
-            {
-            // Loop through all connection methods in the current destination.
-            for ( TInt j = 0; j < iDestinations[i]->iConnMethodItemArray.Count(); j++ )
-                {
-                if ( iDestinations[i]->iConnMethodItemArray[j].iId == aConnMethodId )
-                    {
-                    OstTraceFunctionExit0( CCMMINSTANCEMAPPING_CONNMETHODINOTHERDESTINATION_EXIT );
-                    return ETrue;
-                    }
-                }
-            }
-        }
-
-    OstTraceFunctionExit0( DUP1_CCMMINSTANCEMAPPING_CONNMETHODINOTHERDESTINATION_EXIT );
-    return EFalse;
-    }
-
-// ---------------------------------------------------------------------------
-// Return the EasyWLAN IAP ID, zero if not found or WLAN not supported.
-// ---------------------------------------------------------------------------
-//
-TUint32 CCmmInstanceMapping::EasyWlanIdL()
-    {
-    OstTraceFunctionEntry0( CCMMINSTANCEMAPPING_EASYWLANIDL_ENTRY );
-
-    iEasyWlanId = 0;
-
-    // Check WLAN support.
-    if ( iCache.WlanSupported() )
-        {
-        CMDBRecordSet<CCDIAPRecord>* iapRecordSet =
-                new( ELeave ) CMDBRecordSet<CCDIAPRecord>( KCDTIdIAPRecord );
-        CleanupStack::PushL( iapRecordSet );
-        TRAP_IGNORE( iapRecordSet->LoadL( Session() ) );
-
-        TInt iapRecordCount( iapRecordSet->iRecords.Count() );
-        for ( TInt i = 0; i < iapRecordCount; i++ )
-            {
-            CCDIAPRecord* iapRecord = ( CCDIAPRecord* )iapRecordSet->iRecords[i];
-
-            if ( TPtrC( iapRecord->iServiceType ) == TPtrC( KCDTypeNameLANService ) &&
-                    TPtrC( iapRecord->iBearerType ) == TPtrC( KCDTypeNameLANBearer ) )
-                {
-                TUint32 serviceId = iapRecord->iService;
-
-                CCDWlanServiceRecord* wlanServ =
-                        new( ELeave ) CCDWlanServiceRecord(
-                                CCDWlanServiceRecord::TableIdL( Session() ) );
-                CleanupStack::PushL( wlanServ );
-
-                wlanServ->iWlanServiceId.SetL( serviceId );
-                if ( wlanServ->FindL( Session() ) )
-                    {
-                    wlanServ->LoadL( Session() );
-                    // Only EasyWLAN IAP has NULL in SSID field.
-                    if ( wlanServ->iWLanSSID.IsNull() ||
-                            !( TPtrC( wlanServ->iWLanSSID ).Compare( KNullDesC ) ) )
-                        {
-                        iEasyWlanId = iapRecord->RecordId();
-                        }
-                    }
-                CleanupStack::PopAndDestroy( wlanServ );
-                }
-            if ( iEasyWlanId != 0 )
-                {
-                break;
-                }
-            }
-        CleanupStack::PopAndDestroy( iapRecordSet );
-        }
-
-    OstTraceFunctionExit0( CCMMINSTANCEMAPPING_EASYWLANIDL_EXIT );
-    return iEasyWlanId;
-    }
-
-// ---------------------------------------------------------------------------
-// Find out the internet destination ID. ID is set to 0 if not found.
-// ---------------------------------------------------------------------------
-//
-void CCmmInstanceMapping::InternetDestinationIdL( TUint& aInternetDestinationId )
-    {
-    OstTraceFunctionEntry0( CCMMINSTANCEMAPPING_INTERNETDESTINATIONIDL_ENTRY );
-
-    // Set to zero in case the destination is not found.
-    aInternetDestinationId = 0;
-
-    CommsDat::CMDBRecordSet<CCDSNAPMetadataRecord>* metaSet =
-            new( ELeave )CommsDat::CMDBRecordSet<CCDSNAPMetadataRecord>(
-                    iCache.TableId( ECmmDestMetadataRecord ) );
-    CleanupStack::PushL( metaSet );
-
-    TRAP_IGNORE( metaSet->LoadL( Session() ) );
-
-    CCDSNAPMetadataRecord* metadataRecord =
-            new( ELeave ) CCDSNAPMetadataRecord(
-                    iCache.TableId( ECmmDestMetadataRecord ) );
-    CleanupStack::PushL( metadataRecord );
-
-    for ( TInt i = 0; i < metaSet->iRecords.Count(); i++ )
-        {
-        metadataRecord->SetRecordId( metaSet->iRecords[i]->RecordId() );
-        metadataRecord->LoadL( Session() );
-
-        TUint32 metadata = metadataRecord->iMetadata;
-
-        TUint32 internet = metadata &
-                CMManager::ESnapMetadataInternet;
-        TUint32 localizationValue = ( metadata &
-                CMManager::ESnapMetadataDestinationIsLocalised ) >> 4;
-        TUint32 purposeValue = ( metadata &
-                CMManager::ESnapMetadataPurpose ) >> 8;
-
-        // The first record that has a matching value in any of the 3 metadata
-        // fields will be taken as the internet snap.
-        if ( internet ||
-                ( localizationValue == CMManager::ELocalisedDestInternet ) ||
-                ( purposeValue == CMManager::ESnapPurposeInternet ) )
-            {
-            TInt id = metadataRecord->iSNAP;
-            if ( ValidDestinationId( ( TUint32 )id ) )
-                {
-                aInternetDestinationId = ( TUint )id;
-                break;
-                }
-            }
-        }
-    CleanupStack::PopAndDestroy( metadataRecord );
-    CleanupStack::PopAndDestroy( metaSet );
-
-    OstTraceFunctionExit0( CCMMINSTANCEMAPPING_INTERNETDESTINATIONIDL_EXIT );
-    }
-
-// ---------------------------------------------------------------------------
-// Add a connection method ID to deleted list. Ignores any duplicates. Also
-// removes the connection method from destination/connection method structures
-// so Refresh()-call is not needed. Use this method if the connection method
-// has not been removed from database yet.
-// ---------------------------------------------------------------------------
-//
-void CCmmInstanceMapping::AddConnMethodToDeletedListL( const TUint aConnMethodId )
-    {
-    OstTraceFunctionEntry0( CCMMINSTANCEMAPPING_ADDCONNMETHODTODELETEDLISTL_ENTRY );
-
-    iDeletedConnMethods.InsertInOrderL( aConnMethodId );
-
-    // Remove the connection method from current destination/connection method structures.
-    RemoveConnMethod( aConnMethodId );
-
-    OstTraceFunctionExit0( CCMMINSTANCEMAPPING_ADDCONNMETHODTODELETEDLISTL_EXIT );
-    }
-
-// ---------------------------------------------------------------------------
-// Remove a connection method ID from deleted list. Nothing happens if ID is
-// not found from the list.
-// ---------------------------------------------------------------------------
-//
-void CCmmInstanceMapping::RemoveConnMethodFromDeletedList( const TUint aConnMethodId )
-    {
-    OstTraceFunctionEntry0( CCMMINSTANCEMAPPING_REMOVECONNMETHODFROMDELETEDLIST_ENTRY );
-
-    TInt index = iDeletedConnMethods.FindInOrder( aConnMethodId );
-    if ( index != KErrNotFound )
-        {
-        iDeletedConnMethods.Remove( index );
-        }
-
-    OstTraceFunctionExit0( CCMMINSTANCEMAPPING_REMOVECONNMETHODFROMDELETEDLIST_EXIT );
-    }
-
-// ---------------------------------------------------------------------------
-// Add a destination ID to deleted list. Ignores any duplicates. Also removes
-// the destination from destination/connection method structures so
-// Refresh()-call is not needed. Use this method if the connection method has
-// not been removed from database yet.
-// ---------------------------------------------------------------------------
-//
-void CCmmInstanceMapping::AddDestinationToDeletedListL( const TUint aDestinationId )
-    {
-    OstTraceFunctionEntry0( CCMMINSTANCEMAPPING_ADDDESTINATIONTODELETEDLISTL_ENTRY );
-
-    iDeletedDestinations.InsertInOrderL( aDestinationId );
-
-    // Remove the destination from current destination/connection method structures.
-    RemoveDestination( aDestinationId );
-
-    OstTraceFunctionExit0( CCMMINSTANCEMAPPING_ADDDESTINATIONTODELETEDLISTL_EXIT );
-    }
-
-// ---------------------------------------------------------------------------
-// Remove a destination ID from deleted list. Nothing happens if ID is not
-// found from the list.
-// ---------------------------------------------------------------------------
-//
-void CCmmInstanceMapping::RemoveDestinationFromDeletedList( const TUint aDestinationId ) //TODO, check removal is called in all necessary places.
-    {
-    OstTraceFunctionEntry0( CCMMINSTANCEMAPPING_REMOVEDESTINATIONFROMDELETEDLIST_ENTRY );
-
-    TInt index = iDeletedDestinations.FindInOrder( aDestinationId );
-    if ( index != KErrNotFound )
-        {
-        iDeletedDestinations.Remove( index );
-        }
-
-    OstTraceFunctionExit0( CCMMINSTANCEMAPPING_REMOVEDESTINATIONFROMDELETEDLIST_EXIT );
-    }
-
-// ---------------------------------------------------------------------------
-// Remove the connection method from current destination/connection method
-// structures. This is a lot faster than calling Refresh(). Use this method if
-// the connection method has been removed from database.
-// ---------------------------------------------------------------------------
-//
-void CCmmInstanceMapping::RemoveConnMethod( const TUint32 aConnMethodId )
-    {
-    OstTraceFunctionEntry0( CCMMINSTANCEMAPPING_REMOVECONNMETHOD_ENTRY );
-
-    // Remove from list of connection methods.
-    for ( TInt i = 0; i < iConnMethodItemArray.Count(); i++ )
-        {
-        if ( iConnMethodItemArray[i].iId == aConnMethodId )
-            {
-            iConnMethodItemArray.Remove( i );
-            break;
-            }
-        }
-
-    // Remove connection method from all destinations.
-    for ( TInt i = 0; i < iDestinations.Count(); i++ )
-        {
-        for ( TInt j = 0; j < iDestinations[i]->iConnMethodItemArray.Count(); j++ )
-            {
-            if ( iDestinations[i]->iConnMethodItemArray[j].iId == aConnMethodId )
-                {
-                iDestinations[i]->iConnMethodItemArray.Remove( j );
-                break;
-                }
-            }
-        }
-
-    OstTraceFunctionExit0( CCMMINSTANCEMAPPING_REMOVECONNMETHOD_EXIT );
-    }
-
-// ---------------------------------------------------------------------------
-// Remove the connection method from current destination/connection method
-// structures. This is a lot faster than calling Refresh(). Use this method if
-// the connection method has been removed from database.
-// Also adds the ID of any changed destinations to the provided array.
-// ---------------------------------------------------------------------------
-//
-void CCmmInstanceMapping::RemoveConnMethod(
-        const TUint32 aConnMethodId,
-        RArray<TUint32>& aChangedDestinations )
-    {
-    OstTraceFunctionEntry0( DUP1_CCMMINSTANCEMAPPING_REMOVECONNMETHOD_ENTRY );
-
-    // Remove from list of connection methods.
-    for ( TInt i = 0; i < iConnMethodItemArray.Count(); i++ )
-        {
-        if ( iConnMethodItemArray[i].iId == aConnMethodId )
-            {
-            iConnMethodItemArray.Remove( i );
-            break;
-            }
-        }
-
-    // Remove connection method from all destinations.
-    for ( TInt i = 0; i < iDestinations.Count(); i++ )
-        {
-        for ( TInt j = 0; j < iDestinations[i]->iConnMethodItemArray.Count(); j++ )
-            {
-            if ( iDestinations[i]->iConnMethodItemArray[j].iId == aConnMethodId )
-                {
-                iDestinations[i]->iConnMethodItemArray.Remove( j );
-                // Add ID of changed destination into array. Ignore any error.
-                aChangedDestinations.Append( iDestinations[i]->iId );
-                break;
-                }
-            }
-        }
-
-    OstTraceFunctionExit0( DUP1_CCMMINSTANCEMAPPING_REMOVECONNMETHOD_EXIT );
-    }
-
-// ---------------------------------------------------------------------------
-// Remove the destination from current destination/connection method
-// structures. This is a lot faster than calling Refresh(). Use this method if
-// the connection method has been removed from database.
-// ---------------------------------------------------------------------------
-//
-void CCmmInstanceMapping::RemoveDestination( const TUint32 aDestinationId )
-    {
-    OstTraceFunctionEntry0( CCMMINSTANCEMAPPING_REMOVEDESTINATION_ENTRY );
-
-    for ( TInt i = 0; i < iDestinations.Count(); i++ )
-        {
-        if ( iDestinations[i]->iId == aDestinationId )
-            {
-            delete iDestinations[i];
-            iDestinations.Remove( i );
-            i--;
-            }
-        else
-            {
-            // Check also if the destination is an embedded destination
-            // anywhere, and remove that reference too.
-            TInt cmCount( iDestinations[i]->iConnMethodItemArray.Count() );
-            if ( cmCount )
-                {
-                if ( iDestinations[i]->iConnMethodItemArray[cmCount - 1].iId == aDestinationId )
-                    {
-                    iDestinations[i]->iConnMethodItemArray.Remove( cmCount - 1 );
-                    }
-                }
-            }
-        }
-
-    OstTraceFunctionExit0( CCMMINSTANCEMAPPING_REMOVEDESTINATION_EXIT );
-    }
-
-// ---------------------------------------------------------------------------
-// Remove the connection method from all destinations in the current
-// destination/connection method structures. This is a lot faster than calling
-// Refresh(). The ID of any changed destination is added to the
-// aChangedDestinations-array.
-// ---------------------------------------------------------------------------
-//
-void CCmmInstanceMapping::RemoveConnMethodFromDestinations(
-        const TUint32 aConnMethodId,
-        RArray<TUint32>& aChangedDestinations )
-    {
-    OstTraceFunctionEntry0( CCMMINSTANCEMAPPING_REMOVECONNMETHODFROMDESTINATIONS_ENTRY );
-
-    // Remove given connection method from all destinations.
-    for ( TInt i = 0; i < iDestinations.Count(); i++ )
-        {
-        for ( TInt j = 0; j < iDestinations[i]->iConnMethodItemArray.Count(); j++ )
-            {
-            if ( iDestinations[i]->iConnMethodItemArray[j].iId == aConnMethodId )
-                {
-                iDestinations[i]->iConnMethodItemArray.Remove( j );
-                // Add ID of changed destination into array. Ignore any error.
-                aChangedDestinations.Append( iDestinations[i]->iId );
-                break;
-                }
-            }
-        }
-
-    OstTraceFunctionExit0( CCMMINSTANCEMAPPING_REMOVECONNMETHODFROMDESTINATIONS_EXIT );
-    }
-
-// ---------------------------------------------------------------------------
-// Iterate through destinations to find the one identified with provided ID
-// and return its metadata.
-// ---------------------------------------------------------------------------
-//
-TUint32 CCmmInstanceMapping::DestinationMetadata(
-        const TUint32 aDestinationId ) const
-    {
-    OstTraceFunctionEntry0( CCMMINSTANCEMAPPING_DESTINATIONMETADATA_ENTRY );
-
-    TUint32 metadata( 0 );
-    for ( TInt i = 0; i < iDestinations.Count(); i++ )
-        {
-        if ( iDestinations[i]->iId == aDestinationId )
-            {
-            metadata = iDestinations[i]->iMetadata;
-            break;
-            }
-        }
-
-    OstTraceFunctionExit0( CCMMINSTANCEMAPPING_DESTINATIONMETADATA_EXIT );
-    return metadata;
-    }
-
-// End of file