--- a/cmmanager/cmmgr/cmmserver/inc/cmmcache.h Tue Aug 31 15:35:44 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,645 +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:
-* Database cache manager.
-*
-*/
-
-
-#ifndef CMMCACHE_H_
-#define CMMCACHE_H_
-
-#include <e32base.h>
-#include <metadatabase.h>
-#include <commsdattypesv1_1.h>
-#include <cmgenconnsettings.h>
-
-#include "cmmserverdefs.h"
-#include "cmmbearerpriority.h"
-#include "cmmconnmethodstruct.h"
-#include "cmmconnmethoditem.h"
-
-// Forward declarations.
-class CCmmDestinationStruct;
-class CCmPluginBaseEng;
-class CCmmListenerManager;
-class CCmmInstanceMapping;
-
-class CCmmDestinationInstance;
-class CCmmConnMethodInstance;
-
-class CCmmTransactionHandler;
-class CCmManagerImpl;
-class CCmmBearerPriorityCache;
-
-
-/**
- * A simple class to group a temporary ID and a database assigned valid ID
- * together as a single structure.
- *
- * Used e.g. when updating a newly received real ID to datastructures
- * containing a certain temporary ID.
- */
-NONSHARABLE_CLASS( TCmmIdStruct )
- {
-public:
- inline TCmmIdStruct() : iRealId( 0 ), iTemporaryId( 0 )
- {
- }
- inline TCmmIdStruct( TUint32 aRealId, TUint32 aTemporaryId )
- :
- iRealId( aRealId ),
- iTemporaryId( aTemporaryId )
- {
- }
-public:
- TUint32 iRealId;
- TUint32 iTemporaryId;
- };
-
-
-/**
- * The CmmCache-class oversees all database operations.
- *
- * It manages the cached database data and handles all interactions between
- * that data and the client sessions.
- *
- * It provides access to the CCmmInstanceMapping-class, that keeps track of the
- * overall structure of destinations and connection methods in the database.
- *
- * It also manages the database listeners that keep track of database changes
- * caused by outside sources.
- */
-NONSHARABLE_CLASS( CCmmCache ) : public CBase
- {
-public:
- /**
- * NewL.
- */
- static CCmmCache* NewL(
- CCmManagerImpl* aCmManagerImpl,
- CArrayPtrFlat<const CCmPluginBaseEng>* aPlugins );
-
- /**
- * NewLC.
- */
- static CCmmCache* NewLC(
- CCmManagerImpl* aCmManagerImpl,
- CArrayPtrFlat<const CCmPluginBaseEng>* aPlugins );
-
- /**
- * Destructor.
- */
- ~CCmmCache();
-
-private:
- /**
- * Constructor.
- *
- * @param aPlugins Reference to supported plugin array.
- */
- CCmmCache(
- CCmManagerImpl* aCmManagerImpl,
- CArrayPtrFlat<const CCmPluginBaseEng>* aPlugins );
-
- /**
- * Second phase constructor.
- */
- void ConstructL();
-
-public:
- void OpenDestinationL(
- CCmmDestinationInstance& aDestinationInstance,
- const TUint32 aId );
-
- /**
- * Refresh the data contained in aDestinationInstance. This means reloading
- * the data from database if necessary. After this call the contents of
- * aDestinationInstance will reflect the current state in the database.
- */
- void RefreshDestinationL(
- CCmmDestinationInstance& aDestinationInstance );
-
- void CreateDestinationL(
- CCmmDestinationInstance& aDestinationInstance,
- const TDesC& aName,
- const TUint32 aId );
-
- void OpenConnMethodL(
- CCmmConnMethodInstance& aConnMethodInstance,
- CCmmDestinationInstance* aDestinationInstance,
- const TUint32 aId );
-
- /**
- * Refresh the data contained in aConnMethodInstance. This means reloading
- * the data from database if necessary. After this call the contents of
- * aConnMethodInstance will reflect the current state in the database.
- */
- void RefreshConnMethodL(
- CCmmConnMethodInstance& aConnMethodInstance );
-
- void CreateConnMethodL(
- CCmmConnMethodInstance& aConnMethodInstance,
- CCmmDestinationInstance* aDestinationInstance,
- const TUint32 aBearerType,
- const TUint32 aConnMethodId );
-
- /**
- * Creates a copy of the given client instance (copy of the connection
- * method to the cache). The copy is created from the commsdat data
- * (changes not updated will not be shown in the copy).
- * @param aNewConnMethodInstance The copy instance to be created.
- * @param aConnMethodInstance The source instance to be copied.
- */
- void CreateCopyOfConnMethodL(
- CCmmConnMethodInstance& aNewConnMethodInstance,
- CCmmConnMethodInstance& aConnMethodInstance );
-
- /**
- * Reloads a destination record if needed and copies the latest version to
- * the session instance given as parameter.
- */
- void LoadDestinationRecordL(
- CCmmDestinationInstance& aDestinationInstance,
- TCmmDbRecords aDestRecordType );
-
- /**
- * Saves the modifications in aDestinationInstance into the database. Also
- * all connection methods inside this destination are updated (including
- * any embedded destination).
- */
- void UpdateDestinationL( CCmmDestinationInstance& aDestinationInstance );
-
- /**
- * Saves the modifications in aConnMethodInstance into database. The second
- * attribute aTemporaryHandle must be true if the connection method
- * instance is only a temporary one created for the duration of this update
- * process only.
- */
- void UpdateConnMethodL(
- CCmmConnMethodInstance& aConnMethodInstance,
- TBool aTemporaryHandle );
-
- /**
- * Deletes the destination refered by aDestinationInstance from the
- * database. In case other sessions have open handles to the same
- * destination, the status is updated to deleted state, but it is not yet
- * removed from database. (ID must be kept reserved in commsdat until all
- * handles are closed).
- */
- void DeleteDestinationL(
- CCmmDestinationInstance& aDestinationInstance,
- TBool aForced = EFalse );
-
- /**
- * Deletes a connection method as part of destination update operation. It
- * is already checked that the connection method given as parameter can be
- * deleted and a transaction is already open.
- */
- void DeleteConnMethodAsPartOfDestinationUpdateL( const TUint32 aConnMethodId );
-
- /**
- * Deletes a connection method as part of destination delete operation. It
- * is already checked that the connection method given as parameter can be
- * deleted and a transaction is already open.
- */
- void DeleteConnMethodAsPartOfDestinationDeleteL( const TUint32 aConnMethodId );
-
- /**
- * Basic connection method delete. Removes a connection method from any
- * destination it might belong to, and then deletes it.
- */
- void DeleteConnMethodL( CCmmConnMethodInstance& aConnMethodInstance );
-
- TBool DestinationExistsWithId( const TUint32 aId );
- TBool DestinationExistsWithNameL( const TDesC& aName, const TUint32 aDestinationId );
- TBool DestinationOpenWithId( const TUint32 aId );
- TBool NotSavedDestinationOpenWithNameL( const TDesC& aName, const TUint32 aDestinationId );
-
- TBool ConnMethodExistsWithId( const TUint32 aConnMethodId );
- TBool ConnMethodOpenWithId( const TUint32 aConnMethodId );
-
- TBool DestinationExistsWithMetadataLocalizedL(
- CCmmDestinationInstance& aDestinationInstance,
- const TUint32 aValue );
- TBool DestinationExistsWithMetadataPurposeL(
- CCmmDestinationInstance& aDestinationInstance,
- const TUint32 aValue );
-
- void DbChangeDetectedL( const TUint32 aTableId );
- void DbChangeError( const TUint32 aTableId );
-
- void CloseDestination( CCmmDestinationInstance& aDestinationInstance );
- void CloseConnMethod( CCmmConnMethodInstance& aConnMethodInstance );
-
- /**
- * Returns a reference to the CommsDat session.
- */
- CommsDat::CMDBSession& Session() const;
-
- /**
- * Finds out the bearer type and priority of the service type from given
- * IAP record.
- */
- void BearerInfoFromIapRecordL(
- CommsDat::CCDIAPRecord* aIapRecord,
- TUint32& aBearerType,
- TUint& aBearerPriority ) const;
-
- /**
- * Finds out the priority of the service type in given IAP record.
- */
- void BearerPriorityFromIapRecordL(
- CommsDat::CCDIAPRecord* aIapRecord,
- TUint& aBearerPriority ) const;
-
- /**
- * Finds out the bearer type of a connection method from given IAP record.
- */
- void BearerTypeFromIapRecordL(
- CommsDat::CCDIAPRecord* aIapRecord,
- TUint32& aBearerType ) const;
-
- /**
- * Loads and initializes a connection method instance.
- * @param aConnMethodInstance Reference to connection method instance
- * beeing initialized.
- * @param aConnMethodId ID of the connection method beeing opened.
- */
- void OpenConnectionMethodInstanceL(
- CCmmConnMethodInstance& aConnMethodInstance,
- const TUint32 aConnMethodId );
-
- /**
- * Returns Connection Method specific integer value. CM is loaded(if not loaded already)
- * to get the value.
- * @param aCmId Identifier of the Connection Method.
- * @param aAttribute The identifier of the requested value.
- * @return Returns the requested integer value if found. Otherwise leaves with error code
- * KErrNotFound.
- */
- TUint32 GetConnectionMethodInfoIntL(
- const TUint32 aCmId,
- const TUint32 aAttribute );
-
- /**
- * Returns Connection Method specific boolean value. CM is loaded(if not loaded already)
- * to get the value.
- * @param aCmId Identifier of the Connection Method.
- * @param aAttribute The identifier of the requested value.
- * @return Returns the requested boolean value if found. Otherwise leaves with error code
- * KErrNotFound.
- */
- TBool GetConnectionMethodInfoBoolL(
- const TUint32 aCmId,
- const TUint32 aAttribute );
-
- /**
- * Returns Connection Method specific 16 bit string value.
- * CM is loaded(if not loaded already) to get the value.
- * @param aCmId Identifier of the Connection Method.
- * @param aAttribute The identifier of the requested value.
- * @return Returns the requested string value if found. Otherwise leaves with error code
- * KErrNotFound.
- */
- HBufC* GetConnectionMethodInfoStringL(
- const TUint32 aCmId,
- const TUint32 aAttribute );
-
- /**
- * Returns Connection Method specific 8 bit string value.
- * CM is loaded(if not loaded already) to get the value.
- * @param aCmId Identifier of the Connection Method.
- * @param aAttribute The identifier of the requested value.
- * @return Returns the requested string value if found. Otherwise leaves with error code
- * KErrNotFound.
- */
- HBufC8* GetConnectionMethodInfoString8L(
- const TUint32 aCmId,
- const TUint32 aAttribute );
-
- /**
- * Returns bearer specific integer value. IAP does not need to be loaded for this.
- * @param aBearerType The type of the plugin to be asked.
- * @param aAttribute The identifier of the requested value.
- * @return Returns the requested integer value if found. Otherwise leaves with error code
- * KErrNotFound.
- */
- TUint32 GetBearerInfoIntL(
- const TUint32 aBearerType,
- const TUint32 aAttribute );
-
- /**
- * Returns bearer specific boolean value. IAP does not need to be loaded for this.
- * @param aBearerType The type of the plugin to be asked.
- * @param aAttribute The identifier of the requested value.
- * @return Returns the requested boolean value if found. Otherwise leaves with error code
- * KErrNotFound.
- */
- TBool GetBearerInfoBoolL(
- const TUint32 aBearerType,
- const TUint32 aAttribute );
-
- /**
- * Returns bearer specific 16 bit string value. IAP does not need to be loaded for this.
- * @param aBearerType The type of the plugin to be asked.
- * @param aAttribute The identifier of the requested value.
- * @return Returns the requested string value if found. Otherwise leaves with error code
- * KErrNotFound.
- */
- HBufC* GetBearerInfoStringL(
- const TUint32 aBearerType,
- const TUint32 aAttribute );
-
- /**
- * Returns bearer specific 8 bit string value. IAP does not need to be loaded for this.
- * @param aBearerType The type of the plugin to be asked.
- * @param aAttribute The identifier of the requested value.
- * @return Returns the requested string value if found. Otherwise leaves with error code
- * KErrNotFound.
- */
- HBufC8* GetBearerInfoString8L(
- const TUint32 aBearerType,
- const TUint32 aAttribute );
-
- /**
- * Find and return a copy of a connection method item matching the given ID.
- * Returns KErrNotFound, if the connection method is not found.
- */
- TInt GetConnMethodItem(
- const TUint32 aConnMethodId,
- TCmmConnMethodItem& aConnMethodItem ) const;
-
- /**
- * Returns all conenction method IDs. Unsupported connection methods are
- * included if aCheckBearerType is set to EFalse.
- */
- void GetAllConnMethodsL(
- RArray<TUint32>& aConnMethodArray,
- TBool aCheckBearerType ) const;
-
- /**
- * Returns the number of destinations the provided connection method
- * belongs to.
- */
- TInt DestinationsContainingConnMethod( const TUint32 aConnMethodId ) const;
-
- /**
- * Return the EasyWLAN IAP ID, zero if not found or WLAN not supported.
- */
- TUint32 EasyWlanIdL() const;
-
- /**
- * Check if WLAN is supported on phone.
- */
- TBool WlanSupported() const;
-
- /**
- * Find out the internet destination ID. Set to 0 if not found.
- */
- void InternetDestinationIdL( TUint& aInternetDestinationId ) const;
-
- /**
- * Return the number of destinations in database.
- */
- TInt GetDestinationCount() const;
-
- /**
- * Returns all the valid Destinations
- */
- void GetDestinationsL( RArray<TUint32>& aDestinationArray ) const;
-
- /**
- * Returns all the valid connection methods under given destination.
- */
- void GetConnMethodsFromDestinationL(
- const TUint32 aDestinationId,
- RArray<TCmmConnMethodItem>& aConnMethodArray ) const;
-
- /**
- * Copies the bearer priority array's contents to aArray.
- */
- void CopyBearerPriorityArrayL( RPointerArray<CCmmBearerPriority>& aArray ) const;
-
- /**
- * Updates the bearer priority array with the contents of aArray.
- */
- void UpdateBearerPriorityArrayL( const RPointerArray<CCmmBearerPriority>& aArray );
-
- TBool ConnMethodInOtherDestination(
- const TUint32 aConnMethodId,
- const TUint32 aDestinationId );
- TUint32 NextFreeTemporaryId();
-
- /**
- * Read general connection settings from database.
- */
- void ReadGenConnSettingsL( TCmGenConnSettings& aGenConnSettings ) const;
-
- /**
- * Write general connection settings to database.
- */
- void WriteGenConnSettingsL( const TCmGenConnSettings& aGenConnSettings );
-
- /**
- * Enumerates connections and checks if the given connection method is
- * connected.
- * @param aCmId Id of the connection method to be checked.
- * @return Returns ETrue if the CM is connected and EFalse if it's not
- * connected.
- */
- TBool CheckIfCmConnected( const TUint32 aCmId ) const;
-
- /**
- * Enumerates connections and checks if any of the connection methods in
- * the given destination is connected.
- * If pointer to destination instance is given, then information about
- * relevant connection methods is retrieved from that. Otherwise the
- * information is retrieved from instance mapping using the given ID.
- */
- TBool DestinationConnectedL(
- const TUint32 aDestinationId,
- CCmmDestinationInstance* aDestinationInstance = NULL ) const;
-
- /**
- * Check from database if the given destination is an embedded destination
- * in any other destination.
- */
- TBool DestinationIsEmbedded( const TUint32 aDestinationId ) const;
-
- /**
- * Check from database if the given destination has an embedded destination.
- */
- TBool DestinationHasEmbedded( const TUint32 aDestinationId ) const;
-
- /**
- * Check from database if the given destination is pointed to by any
- * virtual IAP.
- */
- TBool DestinationPointedToByVirtualIap( const TUint32 aDestinationId ) const;
-
- /**
- * Check from database if the given connection method is pointed to by any
- * virtual IAP.
- */
- TBool ConnMethodPointedToByVirtualIap( const TUint32 aConnMethodId ) const;
-
- /**
- * 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 ConnMethodInDestinationButLocked(
- const TUint32 aConnMethodId,
- const TUint32 aDestinationId ) const;
-
- /**
- * Remove all references to the given connection method from the
- * datamobility selection policy records. Then update instance mapping to
- * reflect the current database state, and notify any possible client
- * handles for the changed destinations.
- */
- void RemoveAllReferencesToConnMethodL(
- CCmmConnMethodInstance& aConnMethodInstance );
-
- /**
- * Update the ID of a new destination from temporary ID to real ID after a
- * successful update to database.
- */
- void RefreshDestinationId( const TCmmIdStruct& aIdStruct );
-
- /**
- * Update the ID of a new connection method from temporary ID to real ID
- * after a successful update to database.
- */
- void RefreshConnMethodId( const TCmmIdStruct& aIdStruct );
-
- /**
- * During destination update, after updating connection methods inside the
- * destination, the database records containing the information of what
- * connection methods are inside the destination need to be updated with
- * real IDs for any newly created connection methods. These real IDs are
- * held in the temporary array iUpdatedConnMethods until successful commit
- * to database. This method is used to find out those real IDs before that.
- */
- void TranslateTemporaryId( const TUint32 aTemporaryId, TUint32& aRealId ) const;
-
- /**
- * Check if the given connection method can have all references removed and
- * made into an uncategorized connection method.
- */
- void CheckIfConnMethodReferencesCanBeRemovedL(
- const CCmmConnMethodInstance& aConnMethodInstance );
-
- /**
- * Check if given connection method is referenced from any protected destination.
- */
- void CheckIfConnMethodBelongsToProtectedDestinationL(
- const CCmmConnMethodInstance& aConnMethodInstance,
- TBool& aBelongsToProtectedDestination );
-
- /**
- * Check if the given connection method can be deleted.
- */
- void CheckIfConnMethodCanBeDeletedL( const CCmmConnMethodInstance& aConnMethodInstance );
-
- /**
- * Check if the given destination can be deleted.
- */
- void CheckIfDestinationCanBeDeletedL( const CCmmDestinationInstance& aDestinationInstance );
-
- /**
- * Return the requested table ID.
- */
- CommsDat::TMDBElementId TableId( TCmmDbRecords aRecord );
-
-private:
- TInt FindDestinationFromCache( const TUint32 aId );
- TInt FindNotSavedDestinationFromCacheL( const TDesC& aName, const TUint32 aDestinationId );
-
- TInt FindConnMethodFromCache( const TUint32 aConnMethodId );
-
- void ReplaceGenConnSettingsL( const TCmGenConnSettings& aGenConnSettings );
-
- /**
- * Opens a transaction and deletes the given connection method.
- */
- void DeletePluginL( CCmmConnMethodStruct& aConnMethodStruct );
-
- /**
- * Initiate the deletion of given destination if none of the connection
- * methods inside it are connected.
- */
- void DeleteDestinationForcedL( CCmmDestinationInstance& aDestinationInstance );
-
- /**
- * Informs all the loaded iaps if something related to their tables
- * changed in commsdat.
- */
- void NotifyPluginsForTableChangesL( const TUint32 aTableId );
-
-private:
- // Monitors changes in the database.
- CCmmListenerManager* iListenerManager; // Owned.
-
- // Contains the current destination/connection method structure.
- CCmmInstanceMapping* iInstanceMapping; // Owned.
-
- // Array of currently opened destinations.
- RPointerArray<CCmmDestinationStruct> iDestinationArray; // Owned.
-
- // Array of currently opened connection methods.
- RPointerArray<CCmmConnMethodStruct> iConnMethodArray; // Owned.
-
- // Temporary array to hold information about connection methods that are
- // deleted during a database transaction. This information is needed
- // immediately when the database transaction is successfully commited.
- RArray<TCmmIdStruct> iDeletedConnMethods; // Owned.
-
- // Temporary arrays to hold information about connection methods that are
- // updated during a database transaction. This information is needed
- // immediately when the database transaction is successfully commited.
- RArray<TCmmIdStruct> iUpdatedConnMethods; // Owned.
- RPointerArray<CCmmConnMethodInstance> iUpdatedConnMethods2; // Does not own contents.
-
- // Temporary arrays to hold information about destinations that are updated
- // during a database transaction. This information is needed immediately
- // when the database transaction is successfully commited.
- RArray<TCmmIdStruct> iUpdatedDestinations; // Owned.
- RPointerArray<CCmmDestinationInstance> iUpdatedDestinations2; // Does not own contents.
-
- // Transaction handler for CommsDat operations. Created and owned by
- // CCmManagerImpl.
- CCmmTransactionHandler* iTrans; // Not owned.
-
- // Pointer to bearer priority array.
- CCmmBearerPriorityCache* iBearerPriorityCache; // Owned.
-
- CArrayPtrFlat<const CCmPluginBaseEng>* iPlugins; // Not owned.
-
- // Connection method manager.
- CCmManagerImpl* iCmManagerImpl; // Not owned.
-
- // Counter to generate new unique IDs. These are used to link new objects
- // without valid IDs between session side and cache.
- TUint32 iCurrentTemporaryId;
-
- // Destination network table ID.
- CommsDat::TMDBElementId iSnapTableId;
- // Destination metadata table ID.
- CommsDat::TMDBElementId iSnapMetadataTableId;
- };
-
-#endif // CMMCACHE_H_
-
-// End of file