diff -r 000000000000 -r 5a93021fdf25 cmmanager/cmmgr/Framework/Inc/cmmanagerimpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmmanager/cmmgr/Framework/Inc/cmmanagerimpl.h Thu Dec 17 08:55:21 2009 +0200 @@ -0,0 +1,1009 @@ +/* +* Copyright (c) 2006 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 connection method manager +* +*/ + +#ifndef CMMANAGERIMPL_H +#define CMMANAGERIMPL_H + +// User Includes +#include "cmmanager.hrh" +#include "cmobjectpool.h" +#include "cmconnectionmethodinfo.h" +#include +#include +#include +#include + +// System Includes +#include +#include +#include +#include // RFs +#include // RResourceFile +#include +#include + +// Forward Declarations +class CCmTransactionHandler; +class CCmDestination; +class CCmDestinationExt; +class CCmDestinationImpl; +class CCmPluginBaseEng; +class CCmPluginBase; +class CImplementationInformation; +class TBearerPriority; +class RConeResourceLoader; +class CCmConnectionMethodInfo; +class CGulIcon; +class CCDGlobalBearerTypePriorizationRecord; +class CCDDataMobilitySelectionPolicyRecord; +class TCmPluginInitParam; +class CCmDestinationData; +class RCmManagerExt; +class MCmCommsDatWatcher; +class CCmCommsDatNotifier; + +// DATA TYPES +typedef RPointerArray RImplInfoPtrArray; +typedef CCDGlobalBearerTypePriorizationRecord CCmBearerPriRec; +typedef CCDDataMobilitySelectionPolicyRecord CCDSnapRecord; + +typedef struct + { + RResourceFile iFile; // resource file handler + TFileName iFName; // resource filename + TInt iRefs; // number of references to this res file + }TResourceFiles; + +/*#ifdef _DEBUG +void DumIapTableL( CommsDat::CMDBSession& aSession ); +#define DUMP_IAP_TBL( session ) DumIapTableL( (session) ); +#else // _DEBUG +#define DUMP_IAP_TBL( session ) +#endif // _DEBUG*/ + +/** + * Implementation of connection method manager + * + * @lib cmmanager.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CCmManagerImpl ) : public CBase + { + // Construction/Destruction + public: + + /** Epoc constructor */ + static CCmManagerImpl* NewL( TBool aCreateTables = ETrue ); + + /** Destructor */ + virtual ~CCmManagerImpl(); + + protected: + + /** First stage constructor */ + CCmManagerImpl(); + + /** Epoc constructor */ + void ConstructL(); // second-phase constructor + + public: // Transaction handling API + + void OpenTransactionLC( TBool aSetAttribs = ETrue ); + void CommitTransactionL( TInt aError ); + void RollbackTransaction(); + + // This will be called when the first UI view is on + void StartCommsDatNotifierL(); + + public: // Basic CM attribute query API + + /** + * GetBearerInfoXXX function can be used to query + * bearer informantion that doesn't belong + * to a specific connection method, such as + * ECmCoverage or ECmDefaultPriority etc. + * HBuf ownership is passed to the caller + */ + IMPORT_C TUint32 GetBearerInfoIntL( TUint32 aBearerType, + TUint32 aAttribute ) const; + IMPORT_C TBool GetBearerInfoBoolL( TUint32 aBearerType, + TUint32 aAttribute ) const; + IMPORT_C HBufC* GetBearerInfoStringL( TUint32 aBearerType, + TUint32 aAttribute ) const; + IMPORT_C HBufC8* GetBearerInfoString8L( TUint32 aBearerType, + TUint32 aAttribute ) const; + + /** + * GetConnectionMethodInfoXXX function can be used to + * query any, non-bearer specific information about + * a given connection method. This can be e.g. ECmBearerType, + * ECmName, ECmStartPage etc. + * HBuf ownership is passed to the caller + */ + IMPORT_C TUint32 GetConnectionMethodInfoIntL( + TUint32 aCmId, + TUint32 aAttribute ) const; + IMPORT_C TBool GetConnectionMethodInfoBoolL( + TUint32 aCmId, + TUint32 aAttribute ) const; + IMPORT_C HBufC* GetConnectionMethodInfoStringL( + TUint32 aCmId, + TUint32 aAttribute ) const; + IMPORT_C HBufC8* GetConnectionMethodInfoString8L( + TUint32 aCmId, + TUint32 aAttribute ) const; + + + //========================================================================= + // Creation/Destruction API + // + public: + + /** + * Creates a Destination by the given name + * + * @since 3.2 + * @param aName the name of the new destination + * @return CCmDestination*, ownership is passed to the caller + */ + CCmDestinationImpl* CreateDestinationL( const TDesC& aName ); + + /** + * Creates a Destination by the given name + * + * @since 3.2 + * @param aName the name of the new destination + * @param aDestId Predefined id for the destination + * @return CCmDestination*, ownership is passed to the caller + */ + CCmDestinationImpl* CreateDestinationL( const TDesC& aName, + TUint32 aDestId ); + + + /** + * Creates a connection method does not belong to any destination + * + * @since 3.2 + * @param aImplementationUid - implementation uid of the connection + * method + * @param aParentDestination - the destination which holds the + * connection method, NULL means there is + * no parent + * @return CCmPluginBase* + */ + CCmPluginBase* CreateConnectionMethodL( TUint32 aBearerType, + CCmDestinationImpl* aParentDestination = NULL ); + + /** + * Creates a connection method does not belong to any destination + * + * @since 3.2 + * @param aImplementationUid - implementation uid of the connection + * method + * @param aConnMethodId Predefined id for the connection method + * @param aParentDestination - the destination which holds the + * connection method, NULL means there is + * no parent + * @return CCmPluginBase* + */ + CCmPluginBase* CreateConnectionMethodL( TUint32 aBearerType, + TUint32 aConnMethodId, + CCmDestinationImpl* aParentDestination = NULL ); + + /** + * Creates a connection method does not belong to any destination + * + * @since 3.2 + * @param pluginBaseEng - Object to put in the pool + * @return CCmPluginBase* + */ + CCmPluginBase* CreateConnectionMethodL( + CCmPluginBaseEng* pluginBaseEng ); + + /** + * Insert a connection method does not belong to any destination + * API doesn't use CCmPluginBase. So, nothing returns + * + * @param pluginBaseEng - Object to put in the pool + */ + void InsertConnectionMethodL( + CCmPluginBaseEng* pluginBaseEng ); + + /** + * Creates a connection method does not belong to any destination + * + * @since 3.2 + * @param aBearerType - implementation uid of the connection + * method + * @param aParams - the destination which holds the + * connection method, NULL means there is + * no parent + * @return CCmPluginBaseEng* + */ + CCmPluginBaseEng* DoCreateConnectionMethodL( TUint32 aBearerType, + TCmPluginInitParam& aParams ); + + /** + * Creates a connection method does not belong to any destination + * + * @since 3.2 + * @param aBearerType Implementation uid of the connection + * method + * @param aParams Initialization params for the plugin. + * @param aConnMethodId Predefined id for the connection method. + * @return CCmPluginBaseEng* + */ + CCmPluginBaseEng* DoCreateConnectionMethodL( TUint32 aBearerType, + TCmPluginInitParam& aParams, TUint32 aConnMethodId ); + + //========================================================================= + // Getter-Setter API + // + public: + + /** + * Calls FeatureManager::FeatureSupported directly. + * + * @since 3.2 + * @param aFeature feature ID + * @return feature support status + * @since 3.2 + */ + static TBool FeatureSupported( TInt aFeature ); + + /** + * Obsolete + */ + IMPORT_C CCmPluginBaseEng* ConnectionMethodL( TUint32 aCmId ); + + /** + * Return the connection method queried by it's ID + * + * @since 3.2 + * @param aCmId + * @return CCmPluginBase* + */ + IMPORT_C CCmPluginBase* GetConnectionMethodL( TUint32 aCmId ); + + /** + * Return the list of connection methods do not belongs to any + * destination + * + * @since 3.2 + * @param aCMArray on return it is the array of IAP ids. + * @param aCheckBearerType If ETrue only connection methods with + * supported bearer types are returned + * @param aLegacyOnly when set to ETrue only Legacy IAP ids will + * be returned + * @param aEasyWlan when set to ETrue EasyWlan id is returned, too + * @param aSortByBearer if ETrue the CMs will be ordered according + * to global bearer priority + */ + IMPORT_C void ConnectionMethodL( RArray& aCMArray, + TBool aCheckBearerType = ETrue, + TBool aLegacyOnly = ETrue, + TBool aEasyWlan = EFalse, + TBool aSortByBearer = EFalse ); + /** + * Return an array of all destinations + * + * @since 3.2 + * @param aDestArray on return it returns an array of destination ids + */ + IMPORT_C void AllDestinationsL( RArray& aDestArray ); + + /** + * Return the number of destinations + * + * @since 3.2 + * @return the number of destinations + */ + inline TUint DestinationCountL() { return iDestinationCount; } + + /** + * Return the destination implementation to which a specified + * connection method belongs, search is by destination ID ( the + * id which is made by RECORD_FROM_ELEMENT_ID from the elementID) + * If the destination implementation is allready in the object + * pool returns it. If it is not in the pool than puts it in the + * pool using the GetDestinationL funciton. + * + * @since 3.2 + * @param aId + * @return a pointer to a destination + */ + IMPORT_C CCmDestinationImpl* DestinationL( TUint32 aId ); + + /** + * Removes the destination implementation + * from the object pool + * + * @since 3.2 + * @param aId + */ + IMPORT_C void RemoveDestFromPool( CCmDestinationImpl* aDestination ); + + /** + * Removes the destination implementation + * from the object pool + * + * @since 3.2 + * @param aId + */ + void RemoveDestFromPool( CCmDestinationData* aDestination ); + + /** + * Removes the cm + * from the object pool + * + * @since 3.2 + */ + void RemoveCMFromPoolL( CCmPluginBaseEng* aCM ); + + /** + * Removes the cm + * from the object pool + * + * @since 3.2 + */ + void RemoveCMFromPoolL( CCmPluginBase* aCM ); + + /** + * The destination have been updated if it was a new destination + * than the zero id must be changed to the new one + * + * @param aDestination - the destination to change + */ + void DestinationUpdated( CCmDestinationImpl* aDestination ); + + /** + * Copie a connection method belonging to one destination to + * another. The connection method becomes shared. + * + * @since 3.2 + * @param aTargetDestination target destination + * @param aConnectionMethodId connection method to be copied + * @return index in the Connection Method list + */ + TInt CopyConnectionMethodL( CCmDestinationImpl& aTargetDestination, + CCmPluginBase& aConnectionMethod ); + + /** + * Move a connection method belonging to one destination to + * another. The connection method is removed from the source destination + * + * @since 3.2 + * @param aSourceDestination source destination + * @param aTargetDestination target destination + * @param aConnectionMethod connection method to be moved + * @return index in the Connection Method list which the connection + * method has been moved to + */ + TInt MoveConnectionMethodL( CCmDestinationImpl& aSourceDestination, + CCmDestinationImpl& aTargetDestination, + CCmPluginBase& aConnectionMethod ); + + /** + * Remove connection method from the destination + * + * @since 3.2 + * @param aDestination destination the connection method is attached to + * @param aConnectionMethod connection method to be removed + */ + void RemoveConnectionMethodL( CCmDestinationImpl& aDestination, + CCmPluginBase& aConnectionMethod ); + + /** + * Return the copy of the bearer priority array. Ownership is passed. + * + * @since 3.2 + * @param aArray bearer priority array + */ + void BearerPriorityArrayL( RArray& aArray ) const; + + /* + * Update bearer priority array + * + * @since 3.2 + * @param aArray array with new global bearer priority + */ + void UpdateBearerPriorityArrayL( const RArray& aArray ); + + /** + * Clean up passed global bearer priority array. Delete + * the elements and calls Reset and Close on the array. + * + * @since 3.2 + * @param aArray array to be cleaned up + */ + void CleanupGlobalPriorityArray( RArray& aArray ) const; + + /** + * Search service type in the global priority table and + * Return its priority. + * + * @since 3.2 + * @param aUiPriority ETrue if UI priority is requested + * @param aServiceType serched service type + * @return priority of the service type or KErrNotFound + */ + TInt GlobalBearerPriority( TBool aUiPriority, + const TDesC& aServiceType ) const; + + /* + * Query all of the supported bearer types. + * + * @since 3.2 + * @param aArray list of all supported bearer types. + */ + void SupportedBearersL( RArray& aArray ) const; + + /* + * Return "Uncategorized" icon. + * This fucton leaves if the client does not have a valid UI context + * + * @since 3.2 + * @return CGulIcon icon of uncategorized connection methods. + */ + CGulIcon* UncategorizedIconL() const; + + /** + * Returns the id of the EasyWlan connection method. + * + * @since S60 3.2 + * @return id of the EasyWLan connection method. 0 if not found + */ + IMPORT_C TUint32 EasyWlanIdL(); + + /** + * Create a SNAP record object and load it if record id not 0. + * @param aRecordId record Id. 0 means create only + * @return created/loaded SNAP record + */ + CCDSnapRecord* SNAPRecordL( TUint32 aRecordId ) const; + + CCDSnapRecord* CreateSNAPRecordL( TUint32 aRecordId ) const; + + /** + * Tells the CmManager that the given default connection is deleted, + * and it sets Default Connection to Always Ask (default value). + * + * @since S60 3.2 + */ + void HandleDefConnDeletedL( TCmDefConnValue& aDCSetting ); + /** + * Returns the default connection method/SNAP. + * + * @since S60 3.2 + */ + void ReadDefConnL( TCmDefConnValue& aDCSetting ); + /** + * Stores the default connection method/SNAP. + * + * @since S60 3.2 + */ + void WriteDefConnL( const TCmDefConnValue& aDCSetting ); + /** + * Returns the default connection method/SNAP. + * + * @since S60 3.2 + */ + void ReadDefConnWoTransL( TCmDefConnValue& aDCSetting ); + /** + * Stores the default connection method/SNAP. + * + * @since S60 3.2 + */ + void WriteDefConnWoTransL( const TCmDefConnValue& aDCSetting ); + /** + * Returs ETrue if Default Connection feature is supported. + * + * @since S60 3.2 + */ + TBool IsDefConnSupported(); + /** + * Check if memory low so that process can continue + */ + TBool IsMemoryLow(); + /** + * Returns the general connection settings. + */ + void ReadGenConnSettingsL( TCmGenConnSettings& aGenConnSettings ); + /** + * Replaces the general connection settings. + */ + void ReplaceGenConnSettingsL( const TCmGenConnSettings& aGenConnSettings ); + /** + * Writes the general connection settings. + */ + void WriteGenConnSettingsL( const TCmGenConnSettings& aGenConnSettings ); + + + //========================================================================= + // Resource handling + // + public: + + /** add resource file */ + void AddResourceFileL( TFileName& aName ); + + /** + * Remove resource file from array only if + * the reference count is zero. + * @param aName name of the resource file to be removed + */ + void RemoveResourceFile( TFileName& aName ); + + /** + * Read string from resource + * + * @since 3.2 + * @param aResourceId resource id of the localized string + * @return localized string + */ + HBufC* AllocReadL( TInt aResourceId ) const; + + //========================================================================= + // CM related functions + // + public: + + /** + * Return the number of references to the given connection method id + * in the DN_IAP table + * + * @since 3.2 + * @param aId ID of the connection method + * @param aRecSet entire record set of the detination table + * @return number of references to the connection method in DN_IAP table + */ + TUint32 NumOfConnMethodReferencesL( + TUint32 aId, + CommsDat::CMDBRecordSet* aRecSet = NULL + ); + + /** + * Indicates is at least one non-"level 1 protected" destinations + * + * @since S60 3.2 + * @return ETrue if at least one level 1 protected destination + */ + TBool HasUnprotectedDestinationsL(); + + /** + * Walks through every connection methods to find out + * if the passed connection method is linked to any of them. + * @param aPlugin connection method to be checked + * @return ETrue if linked + */ + TBool IsIapLinkedL( const CCmPluginBaseEng& aPlugin ); + + /** + * Removes all references to this CM from SNAP table. + */ + void RemoveAllReferencesL( const CCmPluginBaseEng& aPlugin ); + + /** + * Removes all references to this CM from SNAP table without + * transaction to commsdat. + */ + void RemoveAllReferencesWoTransL( const CCmPluginBaseEng& aPlugin ); + + /** + * Return the bearer type of connection method. + * + * @since 3.2 + * @param aId id of the connection method + * @return bearer type of the connection method + */ + TUint32 BearerTypeFromCmIdL( TUint32 aCmId ); + + /** + * Return the bearer type of connection method. + * + * @since 3.2 + * @param aIapRecord CommsDat record of the connection method + * @return bearer type of the connection method + */ + TUint32 BearerTypeFromIapRecordL( CommsDat::CCDIAPRecord* aIapRecord ) const; + + private: + + /** + * Find and create a connection method. + * + * @since 3.2 + * @param aCmId id of the connection method + * @aParentDest parent destination of the connection method. Can be NULL. + */ + CCmPluginBase* DoFindConnMethodL( TUint32 aCmId, + CCmDestinationImpl* aParentDest ); + + /** + * Find and create a connection method. + * + * @since 3.2 + * @param aCmId id of the connection method + * @aParentDest parent destination of the connection method. Can be NULL. + */ + CCmPluginBaseEng* DoFindConnMethL( TUint32 aCmId, + CCmDestinationImpl* aParentDest ); + + /** + * Check the existence of tables we need. + * Creates if it is not exist, get the table id otherwise + */ + void CheckTablesL(); + + public: + + /** + * Return the destination network table ID + * + * @since 3.2 + * @return iDestinationTableId element id of the destination table + */ + inline CommsDat::TMDBElementId DestinationTableId() const { return iDestinationTableId; }; + + /** + * Return Global Bearer Type Priorization Table ID + * + * @since 3.2 + * @return element id of the bearer type priority. + */ + inline CommsDat::TMDBElementId BearerTypePriorizationTableId() const { return iBearerTypePriorizationTableId; }; + + /** + * Return the Destination network - Icon table ID + * + * @since 3.2 + * @return element id of the icon table. + */ + inline CommsDat::TMDBElementId IconTableId() const { return iIconTableId; }; + + /** + * Return true if help is on in the FeatureManager + * + * @since 3.2 + * @return TBool. + */ + inline TBool IsHelpOn() const { return iHelp; }; + + /** + * Return the Seamlessness table ID + * + * @since 3.2 + * @return element id of the seamlessness table. + */ + inline CommsDat::TMDBElementId SeamlessnessTableId() const { return iSeamlessnessTableId; }; + + /** + * Checks if the current environment has the given capability. + * Leaves with KErrPermissionDenied if capability is missing. + * + * @since 3.2 + * @param aCapability capability to be checked + */ + static void HasCapabilityL( TCapability aCapability ); + + /** + * Return an array of all IAP records. + * @return array of all IAP records + */ + CommsDat::CMDBRecordSet* AllIapsL(); + + /** + * Return all the SNAP record. Filtering can be made on + * passed SNAP elemented id. + * @return array of SNAP records + */ + CommsDat::CMDBRecordSet* + CCmManagerImpl::AllSNAPRecordsL( TUint32 aSnapElementId ); + + public: + + CommsDat::CMDBSession& Session() const; + + /** + * Wraps this implementation to an RCmManagerExt. OWNERSHIP IS NOT PASSED + * , SO NEVER CLOSE aCmManagerExt!!! + * + * @since 3.2 + * @param aCmManagerExt class to wrap implementation into + */ + + IMPORT_C void WrapCmManager( RCmManagerExt& aCmManagerExt ); + + /** Remove the virtual methods from the passed list + * + * @since 3.2 + * @param aCmDataArray array that contains the connection methods to be filtered + */ + IMPORT_C void FilterOutVirtualsL( RPointerArray& aCmDataArray ); + + /** Create a 'flat list' of connection methods of a given destination + * ( connection methods inside embedded destinations which are in the destination, + * are also present in the list ) and + * order them according to the bearer type prioritisation rules + * and return the result in aCmArray. + * + * @since 3.2 + * @param aDestination destination that contains the connection methods + * for uncategorised connection methods, use KDestItemUncategorized + * @param aCmArray array to return the result + */ + + IMPORT_C void CreateFlatCMListL( TUint32 aDestination , + RPointerArray& aCmArray ); + + /** Create a 'flat list' of connection methods of a given destination + * ( connection methods inside embedded destinations which are in the destination, + * are also present in the list ) and + * order them according to the bearer type prioritisation rules + * and return the result in aCmArray. + * LC version + * + * @since 3.2 + * @param aDestination destination that contains the connection methods + * for uncategorised connection methods, use KDestItemUncategorized + * @param aCmArray array to return the result + */ + IMPORT_C void CreateFlatCMListLC( TUint32 aDestination , + RPointerArray& aCmArray ); + + + /** Get a list of uncategorised connection methods in an RPointerArray + * contains the parameters passed to ConnectionMethodL + * + * @since 3.2 + * @param aCmArray the returned list of uncategorised connection methods + * @param aCheckBearerType see ConnectionMethodL + * @param aLegacyOnly see ConnectionMethodL + * @param aEasyWlan see ConnectionMethodL + * @param aSortByBearer see ConnectionMethodL + */ + void AppendUncatCmListL(RPointerArray& aCmArray, + TBool aCheckBearerType = ETrue, + TBool aLegacyOnly = ETrue, + TBool aEasyWlan = EFalse, + TBool aSortByBearer = EFalse ); + + /** Get a list of uncategorised connection methods in an RPointerArray + * contains the parameters passed to ConnectionMethodL + * LC version + * + * @since 3.2 + * @param aCmArray the returned list of uncategorised connection methods + * @param aCheckBearerType see ConnectionMethodL + * @param aLegacyOnly see ConnectionMethodL + * @param aEasyWlan see ConnectionMethodL + * @param aSortByBearer see ConnectionMethodL + */ + void AppendUncatCmListLC(RPointerArray& aCmArray, + TBool aCheckBearerType = ETrue, + TBool aLegacyOnly = ETrue, + TBool aEasyWlan = EFalse, + TBool aSortByBearer = EFalse ); + + /** + * Returns a list of references to the connection methods in the destination. + * + * @since 3.2 + * @param aPluginArray A pointer array to hold the values + * ownership is passed + */ + void AppendCmListL( TUint32 aDestintaionId, RPointerArray& aCmArray); + + /** + * Returns a list of references to the connection methods in the destination. + * + * @since 3.2 + * @param aPluginArray A pointer array to hold the values + * ownership is passed + */ + // and puts it on the CleanupStack + void AppendCmListLC( TUint32 aDestintaionId, RPointerArray& aCmArray); + + /** + * Returns a list of references to the connection methods in the supported uid list . + * + * @since 3.2 + * @param aPluginArray A pointer array to hold the values + * ownership is passed + */ + void AppendCmListFromUidsL( RArray& cmIdList, RPointerArray& aCMArray ); + + /** + * Returns internet destination id. If internety destination is not found then -1 is returned. + * + * @since 5.0 + * @return Internet destination id + */ + TUint32 GetInternetDestinationIdL(); + + /** + * Register aWatcher as watcher for change of CommsDat + */ + IMPORT_C void WatcherRegisterL( MCmCommsDatWatcher* aWatcher ); + + /** + * UnRegister current watcher + */ + IMPORT_C void WatcherUnRegister(); + + /* + * Find if aDest is still existed if some change is watched + */ + IMPORT_C TBool DestinationStillExistedL( CCmDestinationImpl* aDest ); + + /* + * Find if an Iap is still existed if some change is watched + * + * The Iap, as parameter, is contained in the instance aPlugin + */ + IMPORT_C TBool IapStillExistedL( const CCmPluginBaseEng& aPlugin ); + + /* + * Find if an Iap is still in aDest if some change is watched + * + * The Iap, as parameter, is contained in the instance aPlugin + */ + IMPORT_C TBool IsIapStillInDestL( CCmDestinationImpl* aDest, const CCmPluginBaseEng& aPlugin ); + + private: + + /** + * Creates bearer priority array + * + * @since 3.2 + */ + void CreateBearerPriorityArrayL(); + + /** + * Look for the given resource file in the resource + * file array and return the index value of it. + * + * @since 3.2 + * @param aName resource file name, not localized + * @return index of the resource file in the array + */ + TInt FindResourceFile( TFileName& aName ) const; + + /** + * Build an array of all bearer specific plugins. + * + * @since 3.2 + */ + void BuildPluginArrayL(); + + /** + * Return the copy of the bearer priority array. Ownership is passed. + * + * @since 3.2 + * @param aArray bearer priority array + */ + void CopyBearerPriorityArrayL( RArray& aArray ) const; + + /** + * Return if the IAP record points to an EasyWLan service record. + * + * @since 3.2 + * @param aIapRecord IAP record to be checked + * @return ETrue if AP is EasyWLan + */ + TBool IsEasyWLanL( CommsDat::CCDIAPRecord* aIapRecord ) const; + + /** + * Replaces the Default Connection record with the new one. + * + * @since 3.2 + * @param aDCSetting Default Connection value to set + */ + void ReplaceDefConnRecordL( const TCmDefConnValue aDCSetting ); + + /** + * Combines two lists of CCmPluginBase pointers into one, according to default + * priority order + * + * @since 3.2 + * @param aCmArray first list of connection methods to combine + * @param aCmLinkedArray second list of connection methods to combine + */ + void CombineArraysForPriorityOrderL( + RPointerArray& aCmArray , + RPointerArray& aCmLinkedArray ); + + + /** + * Gets the destination for the given element ID + * + * @since 3.2 + * @param aCmId The element ID of the destination + * @return Id of the parent + */ + TUint32 ParentDestinationL( TUint32 aCmId ); + + /** + * Returns the default general connection values. + * + * @since 9.2 + * @param aGenConnSettings The general connection settings structure + */ + void SetGenConnSettingsToDefault( TCmGenConnSettings& aGenConnSettings ); + + /** + * Leaves if no sufficient is available for creation operations + * + * @since 9.2 + */ + void CheckAvailableSpaceL(); + + /** + * Get Snap Table ID from CommsDat + */ + TUint32 GetSnapTableIdL(); + +#include "cmmanagerimpl.inl" + //========================================================================= + // Member data + + private: + + CCmTransactionHandler* iTrans; + + RFs iFs; + CArrayPtrFlat* iResourceFiles; + + // Destination network table ID + CommsDat::TMDBElementId iDestinationTableId; + //Global Bearer Type Priorization Table + CommsDat::TMDBElementId iBearerTypePriorizationTableId; + // Destination network - Icon table + CommsDat::TMDBElementId iIconTableId; + // Destination network - Icon table + CommsDat::TMDBElementId iSeamlessnessTableId; + // Default Connection table + CommsDat::TMDBElementId iDefConnTableId; + // Bearer priorities + RArray* iBearerPriorityArray; + + CArrayPtrFlat* iPlugins; + + CCmConnectionMethodInfo* iPluginImpl; + + TUint iDestinationCount; + + CCMObjectPool* iObjectPool; + + // for the FeatureManager + TBool iIsFeatureManagerInitialised; + TBool iHelp; + TBool iDefConnSupported; + TBool iCreateTables; + TBool iWLan; + + // For CommsDat watcher + CCmCommsDatNotifier* iCommsDatIapNotifier; + CCmCommsDatNotifier* iCommsDatSnapNotifier; + private: + + friend class CCmDestinationImpl; + friend class CCMObjectPool; + friend class CCmConnectionMethodInfo; + }; + +#endif // CMMANAGERIMPL_H