diff -r 05bc53fe583b -r 83ca720e2b9a ipcm_plat/bearer_settings_plugin_api/inc/cmpluginbaseeng.h --- a/ipcm_plat/bearer_settings_plugin_api/inc/cmpluginbaseeng.h Tue Aug 31 15:35:44 2010 +0300 +++ b/ipcm_plat/bearer_settings_plugin_api/inc/cmpluginbaseeng.h Wed Sep 01 12:23:51 2010 +0100 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies). +* 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" @@ -11,8 +11,7 @@ * * Contributors: * -* Description: -* IF implementation class for connection method plugins. +* Description: IF implementation class for connection method plugins. * */ @@ -24,28 +23,14 @@ #include #include -#include +#include // For REComSession #include #include -#include - -/** - * Macro for getting element id from Iap Id. - * @param iapRecId Record id of an Iap. - */ #define IAP_ELEMENT_ID( iapRecId ) (KCDTIdIAPRecord | \ KCDMaskShowFieldType | \ (iapRecId << 8)) -/** - * Macros for getting/setting diffrerent type of values from/to the records(CommsDat) - * @param record Pointer to the record which has the field requested/to be set. - * @param fieldId Id of the field to get/set the value. - * @param ***Val Value to be set. - * @return Returns the requested value in get operation. - */ - #define QUERY_HBUFC_FIELD( record, fieldId ) *STATIC_CAST(CommsDat::CMDBField*, record->GetFieldByIdL( fieldId )) #define QUERY_UINT32_FIELD( record, fieldId ) *STATIC_CAST(CommsDat::CMDBField*, record->GetFieldByIdL( fieldId )) #define QUERY_INT_FIELD( record, fieldId ) *STATIC_CAST(CommsDat::CMDBField*, record->GetFieldByIdL( fieldId )) @@ -56,23 +41,11 @@ // CONSTANTS const TInt32 KExtensionBaseLevel = 1; -const TUint32 KMaxProxyServerNameLength = 1024; +const TUint32 KDefAttrsArrayGranSize = 32; +const TUint32 KMaxProxyServerNameLength = 1000; const TUint32 KDummyBearerType = 1; -/** - * Record indexes for generic iap records in the Client instance table. - */ -const TInt KIapRecordIndex = 0; // Mandatory record -const TInt KServiceRecordIndex = 1; // Mandatory record -const TInt KNetworkRecordIndex = 2; // Mandatory record -const TInt KWAPAPRecordIndex = 3; // Mandatory record -const TInt KWAPBearerRecordIndex = 4; // Mandatory record -const TInt KMetaDataRecordIndex = 5; // Mandatory record -const TInt KLocationRecordIndex = 6; // Optional record -const TInt KProxyRecordIndex = 7; // Mandatory record (flag in record tells if in use) - - // DATA TYPES typedef enum { @@ -80,8 +53,8 @@ ECmInt, ECmText, ECmText8 - } TCMFieldTypes; - + }TCMFieldTypes; + // Attributes that are related to bearer plugin creation enum TBearerCreationCommonAttributes { @@ -90,851 +63,976 @@ * bearer creation related * attributes */ - + ECmExtensionLevel, /**< - * Return the extension level of the given + * Return the extension level of the given * bearer type. 1 means the level 1st. * (TUint32 - default: none - read only) */ - + ECmBearerCreationCommonAttributesEnd = 9999 /**< * Marks the end of bearer * creation related attributes */ }; +class CCmPluginBaseEng; +class CCmPluginBase; + /** - * Flags for Iap metadata to indicate: - * EMetaHighlight: If it's set it indicates that a connection method is - * highlighted in Agent dialog. Only one connection - * method can have this flag set. - * EMetaHiddenAgent: If it's set it indicates that an connection method is - * hidden connection method in Agent dialog. - * EMetaHotSpot: If it's set it indicates that an connection method is - * HotSpot connection method. - */ +* Validation function called before data is stored. +* @param aThis 'this' pointer of the plugin instance +* @param aAttribute attribute to be set +* @param aValue value to be checked +* @return ETrue if value is stored. +*/ +typedef TBool (*TValidationFunctionL)( CCmPluginBaseEng* aThis, + TUint32 aAttribute, + const TAny* aValue ); + +/** +* Structure of conversion table between CM attributes and +* CommsDat ids. The first element must indicate the +* range of the conversion table. iAttribId is the lowest Id, +* iCommsDatId is the highest one. The last element is a +* terminator. e.g. Proxy table: +* static const TCmAttribConvTable SProxyConvTbl[] = +* { + { ECMProxyUsageEnabled, ECMProxyRangeMax, NULL } + { ECMProxyUseProxyServer, KCDTIdUseProxyServer, NULL }, + { ECmProxyPortNumber, KCDTIdPortNumber, &CheckPortNumberValidityL }, + ... + { 0, 0 } + } +*/ +typedef struct + { + TInt iAttribId; + TInt iCommsDatId; + TValidationFunctionL iValidFuncL; + TInt iTitleId; + TInt iMaxLength; + TUint32 iAttribFlags; // see TCmConvAttribFlags + TInt iDefSettingResId; + TInt iEditorResId; + TInt iDefValueResId; + TAny* iNotUsed1; + TAny* iNotUsed2; + }TCmAttribConvTable; + +enum TCmConvAttribFlags + { + EConvNoZeroLength = 0x00000001, // Zero length NOT acceptable + EConvCompulsory = 0x00000002, + EConv8Bits = 0x00000004, + EConvReadOnly = 0x00000008, + EConvNumber = 0x00000010, + EConvIPv4 = 0x00000020, + EConvIPv6 = 0x00000040, + EConvPassword = 0x00000080, + }; + +typedef struct + { + CommsDat::CCDRecordBase* *iRecord; + TBool* iEnabled; + const TCmAttribConvTable* iConvTable; + }TCmAttrConvArrayItem; + +typedef struct + { + TInt iAttribId; + TInt iCommonAttribId; + }TCmCommonAttrConvArrayItem; + enum TCmMetaDataFields { EMetaHighlight = 0x00000001, - EMetaHiddenAgent = 0x00000002, - EMetaHotSpot = 0x00000004 + EMetaHiddenAgent = 0x00000002 }; + +// FUNCTION PROTOTYPES + +/** +* TValidationFunctionL functions. +*/ + +/** +* Function should be called if client tries to set attribute that is read-only +* @param aThis 'this' pointer of the plugin instance +* @param aAttribute not used +* @param aValue not used +* @leave KErrNotSupported in every cases +*/ +IMPORT_C TBool ReadOnlyAttributeL( CCmPluginBaseEng* aThis, + TUint32 aAttribute, + const TAny* aValue ); + +/** +* Function to check if the passed IPv4 address is valid. +* @param aThis 'this' pointer of the plugin instance +* @param aAttribute attribute client wants to set +* @param aValue TDesC* IPv4 address buffer to be checked +*/ +IMPORT_C TBool CheckIPv4ValidityL( CCmPluginBaseEng* aThis, + TUint32 aAttribute, + const TAny* aValue ); + +/** +* Function to check if the passed IPv6 address is valid. +* @param aThis 'this' pointer of the plugin instance +* @param aAttribute attribute client wants to set +* @param aValue TDesC* IPv6 address buffer to be checked +*/ +IMPORT_C TBool CheckIPv6ValidityL( CCmPluginBaseEng* aThis, + TUint32 aAttribute, + const TAny* aValue ); + +/** +* Function to check if the passed port number is valid. +* @param aThis 'this' pointer of the plugin instance +* @param aAttribute attribute client wants to set +* @param aValue TUint32 the port number to be check +*/ +IMPORT_C TBool CheckPortNumberValidityL( CCmPluginBaseEng* aThis, + TUint32 aAttribute, + const TAny* aValue ); + +/** +* Function to check if the passed record is valid. +* @param aThis 'this' pointer of the plugin instance +* @param aAttribute attribute client wants to set +* @param aValue TUint32 the record id to be checked +*/ +IMPORT_C TBool CheckRecordIdValidityL( CCmPluginBaseEng* aThis, + TUint32 aAttribute, + const TAny* aValue ); + +/** +* Function to check if the passed WAPWspOption is valid. +* @param aThis 'this' pointer of the plugin instance +* @param aAttribute attribute client wants to set +* @param TUint32 the WPSOption to be checked +*/ +IMPORT_C TBool CheckWAPWspOptionValidityL( CCmPluginBaseEng* aThis, + TUint32 aAttribute, + const TAny* aValue ); + +/** +* @param aThis 'this' pointer of the plugin instance +* @param aAttribute attribute client wants to set +* @param TUint32 the WPSOption to be checked +*/ +IMPORT_C TBool SetProxyServerNameL( CCmPluginBaseEng* aThis, + TUint32 aAttribute, + const TAny* aValue ); + +/** +* Miscellaneous utility functions. +*/ + +/** +* Check if the passed IP address is '0.0.0.0' or empty string +* @param aIpAddress IP address to be checked +*/ +IMPORT_C TBool IsUnspecifiedIPv4Address( const TDesC& aIpv4Address ); + +/** +* Check if the passed IP address is one of these: +* - empty string - +* - '0:0:0:0:0:0:0:0' +* - 'fec0:000:0000:ffff::1' +* - 'fec0:000:0000:ffff::2' +* @param aIpAddress IP address to be checked +*/ +IMPORT_C CMManager::TIPv6Types ClassifyIPv6Address( const TDesC& aIpv6Address ); // FORWARD DECLARATIONS -class CCmPluginBaseEng; +class CCmDestinationImpl; +class CCmManagerImpl; class CCDIAPMetadataRecord; - +class CCmTransactionHandler; +class CCmPluginBasePrivate; + // CLASS DECLARATION -/** - * Initialisation instance for plugin creation. Used in plugin - * construction phase. - */ NONSHARABLE_CLASS(TCmPluginInitParam) { public: - /** - * Constructor. - * @param aSessionRef Reference for open Session handle to CommsDat. - */ - IMPORT_C TCmPluginInitParam( CommsDat::CMDBSession& aSessionRef ); - - public: - /** - * Reference to CommsDat session handle. - */ - CommsDat::CMDBSession& iSessionRef; - - /** - * Reserved for future. - */ - TAny* iNotused1; - TAny* iNotused2; - }; - -// CLASS DECLARATION -/** - * This defines the data object used for moving data between - * cmm server and plugins. - */ -NONSHARABLE_CLASS( CCmClientPluginInstance ): public CBase - { + + TCmPluginInitParam( CCmManagerImpl& aCmMgr ); + public: - /** - * Two-phase constructor. Returns pointer to the new - * CCmClientPluginInstance object. - */ - IMPORT_C static CCmClientPluginInstance* NewL(); - - /** - * Two-phase constructor. Returns pointer to the new - * CCmClientPluginInstance object. - */ - IMPORT_C static CCmClientPluginInstance* NewLC(); - - /** - * Destructor - */ - IMPORT_C ~CCmClientPluginInstance(); - - private: - /** - * Default constructor. - */ - CCmClientPluginInstance(); - - /** - * Second phase constructor. - */ - void ConstructL(); - - public: - /** - * Pointer array for generic record pointers. Those are copies - * from CommsDat versions for the client usage. - */ - RPointerArray iGenRecordArray; - - /** - * Pointer array for bearer specific record pointers. Those are copies - * from CommsDat versions for the client usage. These are asked from - * the different plugins. - */ - RPointerArray iBearerSpecRecordArray; - - /** Naming way of the CM. e.g. ENamingUnique */ - CMManager::TNamingMethod iNamingMethod; - - /** Boolean to keep the information if location is enabled */ - TBool iLocationEnabled; - - /** Iap Record id of this Connection Method */ - TUint32 iIapId; + + CCmManagerImpl& iCmMgr; + TUint32 iParentDest;// Parent destination + TAny* iNotused1; + TAny* iNotused2; }; /** - * CCmPluginBaseEng is base class for every connection method plugin. - * It handles all the generic iap informations e.g. record handling - * and attribute reaquests to generic records. + * CCmPluginBaseEng is base class for every connection method plugin * - * @lib cmmpluginbase.lib - * @since S60 v5.2 + * @lib cmmanager.lib + * @since S60 v3.2 */ class CCmPluginBaseEng : public CBase { public: - /** - * Destructor. - */ - IMPORT_C virtual ~CCmPluginBaseEng(); - + + /** Destructor. */ + IMPORT_C virtual ~CCmPluginBaseEng(); + /** - * Create a new instance of the given bearer type plugin. - * Used from CMM server to avoid using slow ECom framework. - * @param aInitParam initialization data - * @return Returns CCmPluginBaseEng type pointer which represents pure - * bearer instance for the CMM server. - */ - virtual CCmPluginBaseEng* CreateInstanceL( - TCmPluginInitParam& aInitParam ) const = 0; + * Create a new instance of the given bearer type plugin. + * Used from framework to avoid using slow ECom framework. + * @param aInitParam initialization data + */ + virtual CCmPluginBaseEng* + CreateInstanceL( TCmPluginInitParam& aInitParam ) const = 0; + + public: // Attribute handlers + + /** + * Gets the value for a TInt attribute. + * @param aAttribute Identifies the attribute to be retrived. + * @return contains the requested TInt attribute. + */ + IMPORT_C virtual TUint32 + GetIntAttributeL( const TUint32 aAttribute ) const; /** - * Following GetBearerInfoXXXL methods return the values of the - * requested attributes. These values are bearerspecific so they - * don't vary between CMs with same bearer type. - * @param aAttribute An attribute identifier. - * @return Returns the value requested. If not found leaves with - * KErrNotFound error code. - */ - IMPORT_C virtual TUint32 GetBearerInfoIntL( - TUint32 aAttribute ) const = 0; - - IMPORT_C virtual TBool GetBearerInfoBoolL( - TUint32 aAttribute ) const = 0; - - IMPORT_C virtual HBufC* GetBearerInfoStringL( - TUint32 aAttribute ) const = 0; - - IMPORT_C virtual HBufC8* GetBearerInfoString8L( - TUint32 aAttribute ) const = 0; - - /** - * Checks if the plug-in can handle the Connection Method identified - * with parameter aIapId. - * @param aIapId IAPId of the AP to be checked - * @return ETrue if plug-in can handle the IAP, otherwise EFalse. - */ - virtual TBool CanHandleIapIdL( TUint32 aIapId ) const = 0; - - /** - * Checks if the plug-in can handle the given IAP record. - * @param aIapRecord IAP record to be checked - * @return ETrue if plug-in can handle the IAP, otherwise EFalse. - */ - virtual TBool CanHandleIapIdL( - CommsDat::CCDIAPRecord* aIapRecord ) const = 0; - - public: // Client interface - /** - * Loads all the records belonging to this Connection Method. - * @param aIapId Id of the IAP record. Identifies the CM - * related records to load. - */ - IMPORT_C void LoadL( TUint32 aIapId ); - - /** - * Resets and loads all the records belonging to this Connection Method. - */ - IMPORT_C void ReLoadL(); + * Gets the value for a TBool attribute. + * @param aAttribute Identifies the attribute to be retrived. + * @return contains the requested TBool attribute. + */ + IMPORT_C virtual TBool + GetBoolAttributeL( const TUint32 aAttribute ) const; /** - * Creates a new Connection Method in memory. Call UpdateL() to store - * it in CommsDat. No CommsDat transaction operation is needed for this. - * @param aCmId Predefined iapid to be used when saving to CommsDat. - * 0 means that CommsDat gives the id. - */ - IMPORT_C void CreateNewL( TUint32 aCmId ); + * Gets the value for a String16 attribute. + * @param aAttribute Identifies the attribute to be retrived. + * @return copy of the requested attribute. Ownership is passed. + */ + IMPORT_C virtual HBufC* + GetStringAttributeL( const TUint32 aAttribute ) const; + + /** + * Gets the value for a String8 attribute. + * @param aAttribute Identifies the attribute to be retrived. + * @return copy of the requested attribute. Ownership is passed. + */ + IMPORT_C virtual HBufC8* + GetString8AttributeL( const TUint32 aAttribute ) const; /** - * Creates a copy of an existing Connection Method. - * @param aClientPluginInstance The source data to create the copy from. - * @return CCmPluginBaseEng type pointer to an object which represents - * the new plugin to the CMM server. - */ - IMPORT_C CCmPluginBaseEng* CreateCopyL( - CCmClientPluginInstance* aClientPluginInstance ); + * Sets the value for a TInt attribute. + * @param aAttribute Identifies the attribute to be set. + * @param aValue The value to be set. + * @return None. + */ + IMPORT_C virtual void SetIntAttributeL( + const TUint32 aAttribute, TUint32 aValue ); /** - * Updates all records to commsdat. Data is copied from the client's copy - * to the original data. - * This method does not open/rollback/commit transaction to CommsDat. - * Caller must handle transactions. - */ - IMPORT_C virtual void UpdateL( - CCmClientPluginInstance* aClientPluginInstance ); - - /* - * Deletes all the records of this CM from the database. - * All the preventing conditions must be checked before calling this. - * This method does not open/rollback/commit transaction to CommsDat. - * Caller must handle transactions. - */ - IMPORT_C virtual void DeleteL(); - - /** - * Creates a copy of all plugin data( most of them are CommsDat data ) for a client. - * @param aClientPluginInstance An object where to copy the data. - */ - IMPORT_C void GetPluginDataL( CCmClientPluginInstance* aClientPluginInstance ); + * Sets the value for a TBool attribute. + * @param aAttribute Identifies the attribute to be set. + * @param aValue The value to be set. + * @return None. + */ + IMPORT_C virtual void SetBoolAttributeL( + const TUint32 aAttribute, TBool aValue ); /** - * Following GetXXXXAttributeL methods return the values of the - * requested attributes. Attributes are returned from the client's - * copy of the data. These values are CM specific. - * @param aAttribute An attribute identifier. - * @param aClientPluginInstance Client's copy of the data where - * to get the return value. - * @return Returns the value requested. If not found leaves with - * KErrNotFound error code. - */ - IMPORT_C TUint32 GetIntAttributeL( - TUint32 aAttribute, - CCmClientPluginInstance* aClientPluginInstance ); + * Sets the value for a String16 attribute. + * @param aAttribute Identifies the attribute to be set. + * @param aValue The value to be set. + * @return None. + */ + IMPORT_C virtual void SetStringAttributeL( + const TUint32 aAttribute, const TDesC16& aValue ); - IMPORT_C TBool GetBoolAttributeL( - TUint32 aAttribute, - CCmClientPluginInstance* aClientPluginInstance ); - - IMPORT_C HBufC* GetStringAttributeL( - TUint32 aAttribute, - CCmClientPluginInstance* aClientPluginInstance ); - - IMPORT_C HBufC8* GetString8AttributeL( - TUint32 aAttribute, - CCmClientPluginInstance* aClientPluginInstance ); + /** + * Sets the value for a String8 attribute. + * @param aAttribute Identifies the attribute to be set. + * @param aValue The value to be set. + * @return None. + */ + IMPORT_C virtual void SetString8AttributeL( + const TUint32 aAttribute, const TDesC8& aValue ); /** - * Following SetXXXXAttributeL methods set the given values - * identified with attributes. Attributes are set to the - * client's copy of the data. - * @param aAttribute An attribute identifier. - * @param aValue Value to set. - * @param aClientPluginInstance Client's copy of the data where - * to set the given value. - */ - IMPORT_C void SetIntAttributeL( - TUint32 aAttribute, - TUint32 aValue, - CCmClientPluginInstance* aClientPluginInstance ); - - IMPORT_C void SetBoolAttributeL( - TUint32 aAttribute, - TBool aValue, - CCmClientPluginInstance* aClientPluginInstance ); - - IMPORT_C void SetStringAttributeL( - TUint32 aAttribute, - const TDesC16& aValue, - CCmClientPluginInstance* aClientPluginInstance ); - - IMPORT_C void SetString8AttributeL( - TUint32 aAttribute, - const TDesC8& aValue, - CCmClientPluginInstance* aClientPluginInstance ); + * Restore the original value of the attribute from commsdat field. + * Base implementation can be used only with attributes + * stored directly in commsdat. + * @param aAttribute attribute to be restored + */ + IMPORT_C virtual void RestoreAttributeL( const TUint32 aAttribute ); + + /** + * Returns the CCmDestinationImpl* if this is an + * embedded destination CM. Otherwise returns NULL. + * @return embedded destination object or NULL + */ + IMPORT_C virtual CCmDestinationImpl* Destination() const; + + /** + * Update or if this is a new CM, creates CM in CommsDat. + * - OpenTransactionLC() + * - PrepareToUpdateRecordsL() + * - UpdateChargeCardRecordL() + * - UpdateServiceRecordL() + * - UpdateIAPRecordL() + * - UpdateLocationRecordL() + * - BearerRecordIdLC() + * - UpdateNetworkRecordL() + * - UpdateWapRecordL() + * - UpdateProxyRecordL() + * - UpdateConnPrefSettingL() + * - UpdateAdditionalRecordsL() + * - CommitTransactionL() + * @return None. + */ + IMPORT_C virtual void UpdateL(); + + /* + * Delete from the database if this CM has no more reference + * from the DN_IAP table. + * - IsMultipleReferencedL() + * - OpenTransactionLC() + * - PrepareToDeleteL() + * - Delete records (in this order) + * - IAP + * - Proxy + * - Service + * - ChargeCard + * - Network + * - Location + * - WapAP + * - WapBearer + * - DeleteAdditionalRecordsL() + * - CommitTransactionL() + * @param aForced forced delete doesn't check referencies + * @param aOneRefsAllowed ETrue if one reference from a destination is + * acceptable to delete this connection method. + */ + IMPORT_C virtual TBool DeleteL( TBool aForced, + TBool aOneRefAllowed = ETrue ); /** - * Requests CommsDat table ids to be observed for changes by the cmm - * server. This is only for generic iap related tables. - * @param aTableIdArray A reference to an array where iap related generic - * table ids are added. - */ - IMPORT_C void GetGenericTableIdsToBeObservedL( RArray& aTableIdArray ) const; - - public: // plugin interface - /** - * Creates a copy of all bearer specific CommsDat data for the client. - * Called as result of GetPluginDataL(). - * @param aRecordArray An array where the copy the records. Only - * the bearer specific implementation knows the amount and order - * of these records in the array. - */ - virtual void GetBearerSpecificRecordsL( - RPointerArray& aRecordArray ) = 0; + * Performs the basic loading of records related + * to this connection method: + * - OpenTransactionLC(); + * - PrepareToLoadRecordsL() + * - LoadIAPRecordL(); + * - load IAP + * - load WAP (AP & IP Bearer) + * - load proxy + * - load charge card + * - load network + * - load location + * - LoadServiceSettingL(); + * - LoadAdditionalRecordsL(); + */ + IMPORT_C virtual void LoadL( TUint32 aIapId ); /** - * Following GetBearerXXXXAttribute methods get only the - * fields in records in pointer arrays(parameters). - * @param aAttribute Identifier of the requested value. - * @param aGenRecordArray An array containing pointers to generic - * records of the Connection Method. - * @param aBearerSpecRecordArray An array containing pointers to bearer - * specific records of the Connection Method. aAttribute - * parameter should identify one field(integer, boolean string) - * in one of these records. - * @return Returns the requested value. In error case leaves with - * system-wide error code. - */ + * Create a new connection method in memory. + * Call UpdateL() to store it in CommsDat. + * No transaction operation is performed. + * - Creates new WAP, IAP, Network records + * - CreateNewServiceRecordL() + * - CreateAdditionalRecordsL() + * - Loads default AP name from resource + * (R_CMMANAGERENG_DEFAULT_AP_NAME) + */ + IMPORT_C virtual void CreateNewL(); + + /** + * Create a copy of the connection method: + * - CreateInstanceL() + * - CreateNewL() + * - PrepareToCopyDataL() + * - Copies data: + * - name + * - bearer type + * - records added to the convertion table + * - Calls CopyAdditionalDataL(). + */ + IMPORT_C virtual CCmPluginBaseEng* CreateCopyL() const; + + /* + * Returns true if the CM has more than one parent destination + */ + IMPORT_C virtual TInt NumOfConnMethodReferencesL(); - virtual TUint32 GetBearerIntAttributeL( - TUint32 aAttribute, - RPointerArray& aGenRecordArray, - RPointerArray& aBearerSpecRecordArray ) = 0; - - virtual TBool GetBearerBoolAttributeL( - TUint32 aAttribute, - RPointerArray& aGenRecordArray, - RPointerArray& aBearerSpecRecordArray ) = 0; + public: + + /** + * Returns a pointer to the cmmanager + * @return a pointer to the cmmanager + */ + CCmManagerImpl& CmMgr() const { return iCmMgr; }; - virtual HBufC* GetBearerStringAttributeL( - TUint32 aAttribute, - RPointerArray& aGenRecordArray, - RPointerArray& aBearerSpecRecordArray ) = 0; + IMPORT_C CommsDat::CMDBSession& Session() const; - virtual HBufC8* GetBearerString8AttributeL( - TUint32 aAttribute, - RPointerArray& aGenRecordArray, - RPointerArray& aBearerSpecRecordArray ) = 0; + /** + * Launches the settings dialog of the plugin + * + * @since S60 3.2 + * @return soft key selection + */ + virtual TInt RunSettingsL() = 0; /** - * Following SetBearerXXXXAttribute methods set only the - * fields in records in pointer arrays(parameters). They are not - * allowed to update the original records in plugins. - * @param aAttribute Identifier of the field to set. - * @param aValue The value to set. - * @param aGenRecordArray An array containing pointers to generic - * records of the Connection Method. - * @param aBearerSpecRecordArray An array containing pointers to bearer - * specific records of the Connection Method. aAttribute - * parameter should identify one field(integer, boolean string) - * in one of these records. - * @return None. - */ - - virtual void SetBearerIntAttributeL( - TUint32 aAttribute, - TUint32 aValue, - RPointerArray& aGenRecordArray, - RPointerArray& aBearerSpecRecordArray ) = 0; - - virtual void SetBearerBoolAttributeL( - TUint32 aAttribute, - TBool aValue, - RPointerArray& aGenRecordArray, - RPointerArray& aBearerSpecRecordArray ) = 0; - - virtual void SetBearerStringAttributeL( - TUint32 aAttribute, - const TDesC16& aValue, - RPointerArray& aGenRecordArray, - RPointerArray& aBearerSpecRecordArray ) = 0; - - virtual void SetBearerString8AttributeL( - TUint32 aAttribute, - const TDesC8& aValue, - RPointerArray& aGenRecordArray, - RPointerArray& aBearerSpecRecordArray ) = 0; - + * Called on a newly created connection method to initialize it properly + * with user interaction (e.g. APN setting for a packet data-, WEP-key + * setting for a WLAN connection method, etc.). + * Note: each plug-in should set its name (i.e. ECmName) in this + * function call. + * + * @since S60 3.2 + * @param aManuallyConfigure let's the plugin know if a plugin should + * be configured manually or automatically + * @return ETrue if initialization was successful and wasn't cancelled. + * EFalse, if initialization process was cancelled (i.e. user pressed + * Cancel button). + */ + virtual TBool InitializeWithUiL( TBool aManuallyConfigure ) = 0; + + /** + * Checks if the plug-in can handle the given AP. + * @param aIapId IAPId of the AP to be checked + * @return ETrue if plug-in can handle the IAP + */ + virtual TBool CanHandleIapIdL( TUint32 aIapId ) const = 0; + /** - * Inherited class can make some preraration before CCmPluginBaseEng - * would start loading bearer specific records. - */ - virtual void PreparePluginToLoadRecordsL() = 0; - + * Checks if the plug-in can handle the given AP. + * @param aIapRecord IAP record to be checked + * @return ETrue if plug-in can handle the IAP + */ + virtual TBool CanHandleIapIdL( CommsDat::CCDIAPRecord* aIapRecord ) const = 0; + /** - * Gives the plugin a possibility to do some preparing operations - * if needed. - * @param aCopyInstance Client side data instance. - */ - virtual void PrepareToCopyDataL( CCmPluginBaseEng* aCopyInstance ) = 0; - + * Return the parent destination of this connection method. + * @return parent destination of this connection method + */ + IMPORT_C CCmDestinationImpl* ParentDestination() const; + /** - * Inherited class can make some preraration before CCmPluginBaseEng - * would start to update all the records. - * @param aGenRecordArray Reference to generic records pointer array. - * @param aBearerSpecRecordArray Reference to bearer specific records - * pointer array. - */ - virtual void PreparePluginToUpdateRecordsL( - RPointerArray& aGenRecordArray, - RPointerArray& aBearerSpecRecordArray ) = 0; - + * Calls FeatureManager::FeatureSupported directly. + * @param aFeature feature ID + * @return feature support status + * @since 3.2 + */ + IMPORT_C static TBool FeatureSupported( TInt aFeature ); + /** - * Plugin can prepare to delete the Connection Method with this - * function. Called from DeleteL() before any record would be - * deleted. No records are deleted here. - */ - virtual void PrepareToDeleteRecordsL(){}; + * Function should be overriden by virtual bearer type plugins. + * Returns if the passed IAP id is linked to that connection method. + * @param aIapId IAP id to be checked + * @return ETrue if the passed IAP id is linked to that connection method. + */ + virtual TBool IsLinkedToIap( TUint32 /*aIapId*/ ){ return EFalse; } + + /** + * Function should be overriden by virtual bearer type plugins. + * Returns if the passed SNAP id is linked to that connection method. + * @param aSnapId SNAP id to be checked + * @return ETrue if the passed SNAP id is linked to that connection method. + */ + virtual TBool IsLinkedToSnap( TUint32 /*aSnapId*/ ){ return EFalse; } /** - * Loads the service record. Service record type is known and loaded by - * plugin(bearer specific) part of the implementation even if the record - * is saved to the generic side. Service record is linked to IAP record. - */ - virtual void LoadServiceRecordL() = 0; - - /** - * Creates the service records. - */ - virtual void CreateServiceRecordL() = 0; - + * Increments the reference counter. Used by the object pool. + */ + void IncrementRefCounter(); /** - * Update service record. - * @param aGenRecordArray Reference to generic records pointer array. - * @param aBearerSpecRecordArray Reference to bearer specific records - * pointer array. - */ - virtual void UpdateServiceRecordL( - RPointerArray& aGenRecordArray, - RPointerArray& aBearerSpecRecordArray ) = 0; - + * Increments the reference counter. Used by the object pool. + */ + void DecrementRefCounter(); /** - * Copies the service record. Bearer specific part knows the type of it's - * service record. - * @return Returns the service record pointer. - */ - virtual CommsDat::CCDRecordBase* CopyServiceRecordL() = 0; + * Returns the reference counter. Used by the object pool. + * @return TInt + */ + TInt GetRefCounter(); /** - * Returns the service record id of the Connection Method. - * @return Returns the id of the service record id of the Connection Method. - */ - virtual TUint32 ServiceRecordId() const = 0; + * Appends uids of connection methods - which were also created during connection method + * creation - to the array given as parameter + * @param aIapIds the array the additonal cm uids are appended to + */ + IMPORT_C virtual void GetAdditionalUids( RArray& aIapIds ); - /** - * Returns the service record name of the Connection Method. - * @param aServiceName Name of the service record the CM's iap record - * points to. - */ - virtual void ServiceRecordNameLC( HBufC* &aServiceName ) = 0; - - /** - * Inherited class loads all the bearer specific records after - * loading generic records. Called from LoadL(). - */ - virtual void LoadBearerRecordsL() = 0; - + protected: // Conversion table API + + IMPORT_C void AddConverstionTableL( + CommsDat::CCDRecordBase* *aRecord, + TBool* aEnabled, + const TCmAttribConvTable* aConvTable ); + + IMPORT_C void AddCommonConversionTableL( + const TCmCommonAttrConvArrayItem* aConvTable ); + + IMPORT_C void RemoveConversionTable( + const TCmAttribConvTable* aConvTable ); + + IMPORT_C void RemoveCommonConversionTable( + const TCmCommonAttrConvArrayItem* aConvTable ); + + protected: // Resource handling + /** - * Creates bearer specific records. - */ - virtual void CreateBearerRecordsL(){}; - + * Add file name to the resource file array. + * Open it and/or increment reference count. + * @param aName resource file name + */ + IMPORT_C void AddResourceFileL( const TDesC& aName ); + /** - * Update bearer specific records. - * @param aGenRecordArray Reference to generic records pointer array. - * @param aBearerSpecRecordArray Reference to bearer specific records - */ - virtual void UpdateBearerRecordsL( - RPointerArray& aGenRecordArray, - RPointerArray& aBearerSpecRecordArray ) = 0; - - /** - * Plugin(generic part) can delete bearer specific records - * with this function. Called from DeleteL(). - */ - virtual void DeleteBearerRecordsL() = 0; + * Remove file name from the resource file name array. + * Close the resource file and/or decrement the reference count. + * @param aName resource file name + */ + IMPORT_C void RemoveResourceFile( const TDesC& aName ); /** - * Resets the bearer specific records. - */ - virtual void ResetBearerRecords() = 0; - + * Read string from resource file. Resource file has to be + * opened prior this by calling AddResourceFileL(). + */ + IMPORT_C HBufC* AllocReadL( TInt aResourceId ) const; + + + protected: + + /** Constructor */ + IMPORT_C CCmPluginBaseEng( TCmPluginInitParam *aInitParam ); + + /** Second phase constructor */ + IMPORT_C virtual void ConstructL(); + + /** Open transaction */ + void OpenTransactionLC(); + /** - * Copies the bearer specific records to copy instance given as - * parameter. - * @param aCopyInstance Pointer to instance where to copy. - */ - virtual void CopyBearerRecordsL( CCmPluginBaseEng* aCopyInstance ) = 0; - + * Commit transaction. + * @param aError - error id + */ + void CommitTransactionL( TInt aError ); + /** - * Returns the bearer record id of the Connection Method. - * @param aRecordId Id of the bearer record this CM's iap record - * points to. - */ - virtual void BearerRecordIdL( TUint32& aRecordId ) = 0; - + * Rollback transaction. + */ + void RollbackTransaction(); + + /** Make a reset on this class. */ + IMPORT_C void Reset(); + /** - * Returns the bearer record name of the Connection Method. - * @param aBearerName Name of the bearer record this CM's iap record - * points to. - */ - virtual void BearerRecordNameLC( HBufC* &aBearerName ) = 0; + * Plug-in implementation can make its on + * cleanup in this function. + * Always called from LoadL() and + * should be called from plugin's destructor. + */ + virtual void AdditionalReset() = 0; + + /** + * Check if there's connection established with + * this connection method (IAP id). + */ + IMPORT_C virtual TBool CheckIfAlreadyConnected() const; + + protected: // virtual loader function + + /** + * Inherited class can make some preraration + * before CCmPluginBaseEng would start loading + * records from tables. + */ + IMPORT_C virtual void PrepareToLoadRecordsL(); /** - * Requests CommsDat table ids to be observed for changes by the cmm - * server. If a table used is not mentioned to be modified a bearer - * shouldn't return this. Bearers do not reset the array before adding - * ids. - * @param aTableIdArray A reference to an array where plugin must add - * the ids of the tables it want's to be observed. - */ - IMPORT_C virtual void GetBearerTableIdsToBeObservedL( - RArray& aTableIdArray ) const = 0; - - protected: - /** - * Constructor - */ - IMPORT_C CCmPluginBaseEng( TCmPluginInitParam *aInitParam ); - - /** - * Second phase constructor - */ - IMPORT_C virtual void ConstructL(); - - /** - * Checks if the ECmName attribute was set since the last update. - * If so, name is updated in passed record - * @param aSrcRecord record to be checked against - * @param aDestRecord record to be checked against aSrcRecord - */ - IMPORT_C void CheckIfNameModifiedL( - CommsDat::CCDRecordBase* aSrcRecord, - CommsDat::CCDRecordBase* aDestRecord ) const; - - /** - * Plugins can check DNS setting with this function. - * Suggested to be called from PrepareToUpdateRecordsL(). - * It checked the DNS server addresses, moves secord into - * first if first is dynamic, and update DNSFromServer field - * according to address values. - * @param aIPv6 passed DNS server address are in IPv6 form - * @param aDNS1 first DNS server address - * @param aDNS1 secord DNS server address - * @param aDNSFromServer DNS address from server flag - */ - IMPORT_C void CheckDNSServerAddressL( - TBool aIPv6, - CommsDat::CMDBField& aDNS1, - CommsDat::CMDBField& aDNS2, - CommsDat::CMDBField& aDNSFromServer ); + * Inherited class can load any additional + * records after CCmPluginBaseEng finished. + */ + virtual void LoadAdditionalRecordsL(){}; /** - * Copies the values and attributes of all fields from aSource-record - * into aDestination record. - * Does not copy the record element ID. Also, does not touch any field - * in aDestination-record that is NULL in aSource-record. - * @param aSource The record that is copied from. - * @param aDestination The record that is copied to. - */ - IMPORT_C void CopyRecordFieldsL( - CommsDat::CMDBRecordBase& aSource, - CommsDat::CMDBRecordBase& aDestination ); + * Load service record. Default implementation can + * create only factory supported record instances. + */ + IMPORT_C virtual void LoadServiceSettingL(); - private: + protected: // virtual update functions + /** - * Handles all the Connection Method data copying to instance given as - * parameter. This is called from CreateCopyL(). - * @ param aCopyInstance Pointer to plugin to copy the data. - */ - void CopyDataL( CCmPluginBaseEng* aCopyInstance ); - + * Check if connection method data is valid, before + * it would be persisted to commsdat. + * If invalid data found, set its attribute id in + * iInvalidAttribute. + * Base class implementation must be called from + * overridden one. + */ + IMPORT_C virtual void PrepareToUpdateRecordsL(); + /** - * Handles all the Connection Method related record copying. Called from - * CopyDataL(). - * @ param aCopyInstance Pointer to plugin to copy the data. - */ - void CopyRecordsL( CCmPluginBaseEng* aCopyInstance ); + * Inherited class can update its additional + * records here. + */ + virtual void UpdateAdditionalRecordsL(){}; /** - * Copies the record identified by aRecordIdentifier to copy instance. - * @param aRecordIdentifier Identifies the record which is copied copy. - * @param aCopyInstance Pointer to plugin to copy the data. - */ - void CopyRecordDataL( - TUint32 aRecordIdentifier, - CCmPluginBaseEng* aCopyInstance ); - - /** - * Creates proxy record and sets the proxy settings enabled for this - * Connection Method. - */ - void EnableProxyL( TBool aEnable ); - - /** - * Creates location record and sets the location enabled for this - * Connection Method. - */ - void EnableLocationL( TBool aEnable ); + * Update service record. + */ + IMPORT_C virtual void UpdateServiceRecordL(); /** - * Calls all the loading methods. - */ - void DoLoadL( TUint32 aIapId ); - - /** - * Loads IAP record. - * @param aIapId Identifies the IAP record to load. - */ - void LoadIAPRecordL( TUint32 aIapId ); - - /** - * Loads proxy record related to this IAP. This is called as a result - * of calling LoadL(). - */ - void LoadProxyRecordL(); - - /** - * Loads network record related to this IAP. This is called as a result - * of calling LoadL(). - */ - void LoadNetworkRecordL(); + * Return the service table name and record id + * of this connection in the service table. + * @param - aServiceName name of the service table + * this connection method points to. + * @param - aRecordId record id in the service table. + */ + virtual void ServiceRecordIdLC( HBufC* &aServiceName, + TUint32& aRecordId ) = 0; /** - * Loads location record related to this IAP. This is called as a result - * of calling LoadL(). - */ - void LoadLocationRecordL(); - - /** - * Loads WAP AP and WAP IP records related to this IAP. This is called as a result - * of calling LoadL(). - */ - void LoadWapRecordL(); - - /** - * Loads iap metadata record related to this IAP. This is called as a result - * of calling LoadL(). - */ - void LoadMetadataRecordL(); + * Return the bearer table name and record id + * of this connection in the bearer table. + * @param - aBearerName name of the bearer table + * this connection method points to. + * @param - aRecordId record id in the bearer table. + */ + virtual void BearerRecordIdLC( HBufC* &aBearerName, + TUint32& aRecordId ) = 0; + protected: // virtual delete function + /** - * Following methods are called as a result of calling method UpdateL(). - * Each method overwrites the original data in memory with the client copy - * of that data. Client data has all the possible changes set by client. - * After overwrite the data is written to CommsDat. - * @param aClientPluginInstance The client copy of the original data with the - * possible changes. - */ - void UpdateIAPRecordL( CCmClientPluginInstance* aClientPluginInstance ); - void UpdateProxyRecordL( CCmClientPluginInstance* aClientPluginInstance ); - void UpdateConnPrefSettingL(); - void UpdateNetworkRecordL( CCmClientPluginInstance* aClientPluginInstance ); - void UpdateLocationRecordL( CCmClientPluginInstance* aClientPluginInstance ); - void UpdateWapRecordL( CCmClientPluginInstance* aClientPluginInstance ); - void UpdateMetadataRecordL( CCmClientPluginInstance* aClientPluginInstance ); - void UpdateServiceRecordL( CCmClientPluginInstance* aClientPluginInstance ); + * Plugin can prepare to delete the connection method + * with this function. Called from DeleteL() before + * any record would be deleted. Do NOT delete any + * record here. + */ + virtual void PrepareToDeleteRecordsL(){}; + + /** + * Plugin can delete additional, bearer specific record + * with this function. Called from DeleteL(). + */ + virtual void DeleteAdditionalRecordsL(){}; + + protected: // virtual create function + + /** + * Plugin has to create and initialize its bearer specific object + * that points to the service record here. Pointer has to be stored in + * iServiceRecord data member. + * Do NOT store service record in CommsDat yet. + */ + virtual void CreateNewServiceRecordL() = 0; + + /** + * Plugin can create and initialize its bearer specific record(s) here. + * Do NOT store them in CommsDat yet. + */ + virtual void CreateAdditionalRecordsL(){}; + + protected: /** - * Creates new wap records. + * Called from CreateCopyL(). + * Plugin can prepare for copying every records + * added to the conversion tables. + * + * @param aDestInst copy attributes into this plugin instance + */ + virtual void PrepareToCopyDataL( CCmPluginBaseEng& /*aDestInst*/ ) const {}; + + /** + * Copy data of the connection method that is not + * added to the conversion table. (e.g. bearer specific + * flags) + * + * @param aDestInst copy attributes into this plugin instance + */ + virtual void CopyAdditionalDataL( CCmPluginBaseEng& /*aDestInst*/ ) const {}; + + private: + + void EnableProxyL( TBool aEnable ); + void EnableChargeCardL( TBool aEnable ); + void EnableLocationL( TBool aEnable ); + + // Loader functions + void DoLoadL( TUint32 aIapId ); + void LoadIAPRecordL( TUint32 aIapId ); + void LoadChargeCardSettingL( TUint32 aChargeCardId ); + void LoadProxySettingL(); + void LoadNetworkSettingL(); + void LoadLocationSettingL(); + void LoadWapRecordL(); + void LoadSeamlessnessRecordL(); + + // Updater functions + void UpdateIAPRecordL(); + void UpdateProxyRecordL(); + void UpdateChargeCardRecordL(); + void UpdateConnPrefSettingL(); + void UpdateNetworkRecordL(); + void UpdateLocationRecordL(); + void UpdateWapRecordL(); + void UpdateSeamlessnessRecordL(); + + /** + * No WAP record found in load process, + * but client wants to set start page. */ void NewWapRecordL(); - + /** - * Searches the WAP records related to this iap. This is called as a - * result of LoadL(). - * @return Returns pointer to WAP IP record. If it's not found NULL is - * returned. - */ + * Create a new metadata record. + * @param aSetDef ETrue if setting default seamlessness valud is needed + * @return create metadata record point + */ + CCDIAPMetadataRecord* NewSeamlessnessRecordL( TBool aSetDef ); + CommsDat::CCDWAPIPBearerRecord* FindWAPRecordL(); + CCDIAPMetadataRecord* FindSeamlessnessRecordL(); /** - * Creates a new metadata record. - * @param aSetDef ETrue if setting default seamlessness value is needed - * @return Returns metadata record pointer. - */ - CCDIAPMetadataRecord* NewMetadataRecordL( TBool aSetDef ); - - /** - * Searches the metadata record belonging to this iap. This is called as a - * result of LoadL(). - * @return Returns pointer to WAP IP record. If it's not found NULL is - * returned. - */ - CCDIAPMetadataRecord* FindMetadataRecordL(); //TODO, check comment, return value... - - /** - * Set attribute flag on the given record. - * @param aRecord Record to be set. - * @param aAttribute Attribute to be set. + * Set attribute flag on the given record + * @param aRecord record to be set + * @param aAttribute e.g. ECDHidden * @param aSet ETrue to set, EFalse to clear */ - void SetAttribute( - CommsDat::CCDRecordBase* aRecord, - TUint32 aAttribute, - TBool aSet ); - + void SetAttribute( CommsDat::CCDRecordBase* aRecord, + TUint32 aAttribute, + TBool aSet ); + /** * Copy the attributes of the source record to the destination. * @param aSrcRecord record of which attributes are copied * @param ADstRecord record of which attributes are set */ - void CopyAttributes( - CommsDat::CCDRecordBase* aSrcRecord, - CommsDat::CCDRecordBase* aDstRecord ); - - - /** - * Returns the default location record id. - * @return Returns the default location record id. - */ - TUint32 GetLocationIdL() const; - - private: + void CopyAttributes( CommsDat::CCDRecordBase* aSrcRecord, + CommsDat::CCDRecordBase* aDstRecord ); /** - * Gives a possibility to make some prerarations before - * starting to load bearer specific records. - */ - void PrepareToLoadRecordsL(); + * Find field element associated with the passed attribute. + * @param aAttribute aatribute to find + * @aType type of the attribute (e.g. bool, int or string) + */ + TValidationFunctionL FindFieldL( TUint32 aAttribute, + TCMFieldTypes aType, + CommsDat::CMDBElement* &aElement ) const; + + + /** + * Return Location id + * @return location id + */ + TUint32 GetLocationIdL() const; + + /** + * Search for common attribute and convert it to plugin specific one. + * @param aAttribute common attribute id + * @return bearer specific attribute id + */ + TUint32 CheckForCommonAttribute( const TUint32 aAttribute ) const; + + /** + * Returns the common attribute for the bearer specific attribute. + * Panics if there is no matching common attribute. + * @param aAttribute bearer specific attribute + * @return common attribute + */ + TUint32 CommonAttribute( const TUint32 aAttribute ) const; + + public: // Util functions + + IMPORT_C CommsDat::TMDBElementId IAPRecordElementId() const; + + IMPORT_C TBool IsProtected() const; + + TBool SetProxyServerNameL( const TDesC& aProxyServer ); /** - * Gives a possibility to make some prerarations before - * starting to update bearer specific records. - */ - void PrepareToUpdateRecordsL( - CCmClientPluginInstance* aClientPluginInstance ); - - /** - * Returns the element id of the iap record. - * @return Returns the element id of the iap record. - */ - CommsDat::TMDBElementId IAPRecordElementId() const; + * Return the coversion table item of the attribute + * @param aAttribute attribute of which conversion item is requested + * @return conversion table item + */ + IMPORT_C const TCmAttribConvTable* ConvTableItem( TUint32 aAttribute ); /** - * Checks the protection attribute of the IAP. - * @return Returns ETrue if the IAP is protected. Otherwise returns - * EFalse. - */ - TBool IsProtected() const; + * Function to set up DNS addresses and DNS address from server flag. + * Can be used with both IPv4 and IPv6 attribute. + * Passed bearer specific attributes must be defined in common conversion + * table. + * @param aSrv1Attr first DNS server address attribute + * @param aSrv1 DNS first DNS server address + * @param aSrv2Attr second DNS server address + * @param aSrv2 DNS second DNS server address attribute + * @param aAddrFromSrvAttr DNS address from server flag attribute + * @param aIPv6 ETrue if passed addresses are in IPv6 form + */ + IMPORT_C void SetDNSServerAddressL( TUint32 aSrv1Attr, + const TDesC& aSrv1, + TUint32 aSrv2Attr, + const TDesC& aSrv2, + TUint32 aAddrFromSrvAttr, + TBool aIPv6 ); /** - * Sets the name of the proxy server to proxy record. If name's - * length is 0, proxyport is set to 0 and proxyserver usage - * boolean is set to EFalse. If the name is longer than 0, - * boolean is set to ETrue. - * @param aProxyServer Address to be set. - * @param Record pointer where to set. - */ - void SetProxyServerNameL( - const TDesC& aProxyServer, - CommsDat::CCDRecordBase* aProxyRecord ); + * Plugins can check DNS setting with this function. + * Suggested to be called from PrepareToUpdateRecordsL(). + * It checked the DNS server addresses, moves secord into + * first if first is dynamic, and update DNSFromServer field + * according to address values. + * @param aIPv6 passed DNS server address are in IPv6 form + * @param aDNS1 first DNS server address + * @param aDNS1 secord DNS server address + * @param aDNSFromServer DNS address from server flag + */ + IMPORT_C void CheckDNSServerAddressL( TBool aIPv6, + CommsDat::CMDBField& aDNS1, + CommsDat::CMDBField& aDNS2, + CommsDat::CMDBField& aDNSFromServer ); + protected: + /** - * Sets a name to IAP. - * @param aName Name to set. - * @param aClientPluginInstance Client copy of data where to set the - * name. UpdateL() updates the name to the CommsDat. - */ - void SetNameL( - const TDesC& aName, - CommsDat::CCDRecordBase* aIapRecord, - const CMManager::TNamingMethod aNamingMethod ); + * Checks if the ECmName attribute was set since the last update. + * If so, name is updated in passed record + * @param aRecord record to be checked against iIapRecord + */ + IMPORT_C void CheckIfNameModifiedL( CommsDat::CCDRecordBase* aRecord ) const; + + /** + * Returns the global priority of the passed bearer type + * @param aServiceType bearer type of which priority is requested + * @return global bearer priority + */ + IMPORT_C TInt GlobalBearerPriority( const TDesC& aServiceType ) const; + + /** + * Returns the global UI priority of the passed bearer type + * @param aServiceType bearer type of which priority is requested + * @return global UI bearer priority + */ + IMPORT_C TInt GlobalUiBearerPriority( const TDesC& aServiceType ) const; - /** - * Following methods are called as a result of SetNameL() to - * make a valid name of the given string. - */ - HBufC* DoMakeValidNameL( const TDesC& aName, const TUint32& aIapId ); - HBufC* EnsureMaxLengthLC( const TDesC& aName, TBool& aChanged ); + private: // Util functions + + HBufC* DoMakeValidNameL( const TDesC& aName ); + HBufC* EnsureMaxLengthLC( const TDesC& aName, + TBool& aChanged ); + TPtrC GetPrefix( const TDesC& aName ); TInt GetPostfix( const TDesC& aName, const TDesC& aPrefix ); - TBool IsValidNameL( const TDesC& aNameText, const TUint32& aIapId ); + + TBool IsValidNameL( const TDesC& aNameText ); HBufC* EscapeTextLC( const TDesC& aLiteral ); - void SetDefaultNameL( const TDesC& aName ); - + + void SetNameL( const TDesC& aName ); + + TCmAttrConvArrayItem* ConversionTable( TUint32 aAttribute ) const; + CommsDat::CMDBElement& FieldByAttributeL( const TCmAttrConvArrayItem* aItem, + const TUint32 aAttribute, + TInt& aIndex ) const; + /** - * Check if the passed IP address is '0.0.0.0' or empty string - * @param aIpAddress IP address to be checked + * Writes the passed text into the passed attribute. + * @param aAttribute The attribute to write into + * @param aValue The value to write */ - TBool IsUnspecifiedIPv4Address( const TDesC& aIpv4Address ); + void GenericStringWriterL( const TUint32 aAttribute, + const TDesC16& aValue ); + + /** + * Returns the common attribute for the bearer specific attribute, if + * it is mapped to any. Otherwise, it returns the original attribute. + * @param aAttribute bearer specific attribute + * @return common/original attribute + */ + TUint32 MappedCommonAttribute( const TUint32 aAttribute ) const; + public: /** - * Check if the passed IP address is one of these: - * - empty string - - * - '0:0:0:0:0:0:0:0' - * - 'fec0:000:0000:ffff::1' - * - 'fec0:000:0000:ffff::2' - * @param aIpAddress IP address to be checked + * Indicates if the Id is valid or if this is a new object which sitll + * haven't been updated. + * Used by the object pool. + * @return TBool */ - CMManager::TIPv6Types ClassifyIPv6Address( const TDesC& aIpv6Address ); - - public: // Data - - // Required attribute for the framework - // (An identifier used during destruction) - TUid iDtor_ID_Key; - TUint32 iBearerType; - - protected: - /** - * Reference to cmm's session handle. Initialised at the construction - * phase. - */ - CommsDat::CMDBSession& iSession; + TBool IdIsValid(); /** - * Generic record pointers. + * Sets iIdIsValid attribute + * Used by the object pool. + */ + void SetIdValidity(TBool validity); + + /** + * Scans aDests for destinations that may be valid parents + * for this plugin and removes those that may not. The function may be + * overriden by virtual bearer type plugins. + * @param aDests The array of destination IDs to be filtered. + */ + virtual void FilterPossibleParentsL( RArray& /*aDests*/ ) {} + + /** + * Sets the predefined id for the plugin. This should only be + * used by cmmanager framework. */ - CommsDat::CCDIAPRecord* iIapRecord; - CommsDat::CCDProxiesRecord* iProxyRecord; - CommsDat::CCDRecordBase* iServiceRecord; - CommsDat::CCDNetworkRecord* iNetworkRecord; - CommsDat::CCDLocationRecord* iLocationRecord; - CommsDat::CCDWAPAccessPointRecord* iWapAPRecord; - CommsDat::CCDWAPIPBearerRecord* iWapIPBearerRecord; - CCDIAPMetadataRecord* iMetaDataRecord; + IMPORT_C void SetPreDefinedId( const TUint32 aPreDefId ); + + public: /** - * IAP record id of the CM. 0 means that this is not stored to CommsDat - * yet. If in UpdateL phase iap record has an id but iIapId == 0 --> - * predefined iap id - */ - TUint32 iCmId; + * Check if there is space to save record + * @return ETrue if space is available; otherwise leave with KLeaveWithoutAlert + */ + IMPORT_C TBool CheckSpaceBelowCriticalLevelL() const; - private: - /** - * Naming method of the CM. - */ - CMManager::TNamingMethod iNamingMethod; + public: // Data + + // Required attribute for the framework + // (An identifier used during destruction) + TUid iDtor_ID_Key; + + protected: - /** - * Table id of the iap metadata table. - */ - CommsDat::TMDBElementId iMetadataTableId; + CCmManagerImpl& iCmMgr; //< Not owned + TUint32 iParentDest; // id of the parent destinaton + + // IAP id of the CM. 0 means that this is a newly + // created one. + TUint32 iIapId; + TUint32 iBearerType; //< Should be set by plugin + //< constructor + + CommsDat::CCDIAPRecord* iIapRecord; // created by base class + CommsDat::CCDProxiesRecord* iProxyRecord; // optional + CommsDat::CCDRecordBase* iServiceRecord; // created by plugin + CommsDat::CCDChargecardRecord* iChargeCardRecord; // optional + CommsDat::CCDNetworkRecord* iNetworkRecord; // created by base class + CommsDat::CCDLocationRecord* iLocationRecord; // optional + + TBool iChargeCardEnabled; + TBool iLocationEnabled; - /** - * Identifies if the location is enabled. - */ - TBool iLocationEnabled; + TUint32 iInvalidAttribute; + + private: // Data + + CCmPluginBasePrivate* iPriv; + //Reference counter for the object pool + TInt iRefCounter; + //indicates if the Id is valid or not (for the object pool) + TBool iIdIsValid; + // Predefined connection method id(iap id) + TUint32 iPreDefIapId; + friend class CCmPluginBase; }; - + #endif // CMPLUGINBASEENG_H