diff -r 000000000000 -r 307788aac0a8 sipplugins/sippdevmgmtsipadapter/inc/nsmldmsipadapter.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sipplugins/sippdevmgmtsipadapter/inc/nsmldmsipadapter.h Tue Feb 02 01:03:15 2010 +0200 @@ -0,0 +1,573 @@ +/* +* Copyright (c) 2004-2007 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Device Management SIP Settings Adapter +* +*/ + + +#ifndef __NSMLDMSIPADAPTER_H__ +#define __NSMLDMSIPADAPTER_H__ + +// INCLUDES +#include + +// CLASS DECLARATION +class CSIPProfileRegistryObserver; +class CSIPManagedProfileRegistry; +class CSIPManagedProfile; + +/** +* CNSmlDmSIPAdapter +* OMA DM Adapter for Nokia SIP. +* +* @lib nsmldmsipadapter.lib +* @since S60 3.0. +*/ +class CNSmlDmSIPAdapter : public CSmlDmAdapter, + public MSIPProfileRegistryObserver + + { + public: + + static CNSmlDmSIPAdapter* NewL( MSmlDmCallback* aDmCallback ); + static CNSmlDmSIPAdapter* NewLC( MSmlDmCallback* aDmCallback ); + + virtual ~CNSmlDmSIPAdapter(); + + private: // Functions from base classes + + /** + * From base class MsmlDmAdapter + * Returns DDF version of the adapter. + * + * @since S60 3.0. + * @param aVersion for returning DDF version of adapter + */ + void DDFVersionL( CBufBase& aDDFVersion ); + + /** + * From base class MsmlDmAdapter + * Builds DDF structure of the adapter. + * + * @since S60 3.0. + * @param aDDF for returning DDF structure of adapter + */ + void DDFStructureL( MSmlDmDDFObject& aDDF ); + + /** + * From base class MsmlDmAdapter + * Updates leaf object value. + * + * @since S60 3.0. + * @param aURI URI of the object. + * @param aLUID LUID of the object (if the adapter has earlier + * returned a LUID to the DM Module). For new + * objects, this is the LUID inherited through the + * parent node. + * @param aObject Data of the object. + * @param aType MIME type of the object. + * @param aStatusRef Reference to correct command, i.e. this reference + * must be used when calling the SetStatusL of this + * command. + */ + void UpdateLeafObjectL( + const TDesC8& aURI, + const TDesC8& aLUID, + const TDesC8& aObject, + const TDesC8& aType, + const TInt aStatusRef ); + + /** + * From base class MsmlDmAdapter + * Updates leaf object value. Not supported. + * + * @since S60 3.0. + * @param aURI URI of the object. + * @param aLUID LUID of the object (if the adapter has earlier + * returned a LUID to the DM Module). For new + * objects, this is the LUID inherited through the + * parent node. + * @param aStream Data of the object. Adapter should create write + * stream and return, when data is written to + * stream by DM agent, StreamCommittedL() is called + * by DM engine. + * @param aType MIME type of the object. + * @param aStatusRef Reference to correct command, i.e. this reference + * must be used when calling the SetStatusL of this + * command. + */ + void UpdateLeafObjectL( + const TDesC8& aURI, + const TDesC8& aLUID, + RWriteStream*& aStream, + const TDesC8& aType, + TInt aStatusRef ); + + /** + * From base class MsmlDmAdapter + * Deletes an object. + * + * @since S60 3.0. + * @param aURI URI of the object. + * @param aLUID LUID of the object (if the adapter has earlier + * returned LUID to the DM Module). + * @param aStatusRef Reference to correct command, i.e. this reference + * must be used when calling the SetStatusL of this + * command. + */ + void DeleteObjectL( + const TDesC8& aURI, + const TDesC8& aLUID, + const TInt aStatusRef ); + + /** + * From base class MsmlDmAdapter + * Fetches a leaf object. + * + * @since S60 3.0. + * @param aURI URI of the object. + * @param aLUID LUID of the object (if the adapter has earlier + * returned LUID to the DM Module). + * @param aType MIME type of the object. + * @param aResultsRef Reference to correct results, i.e. this + * reference must be used when returning the result + * by calling the SetResultsL. + * @param aStatusRef Reference to correct command, i.e. this + * reference must be used when calling the SetStatusL of + * this command. + */ + void FetchLeafObjectL( + const TDesC8& aURI, + const TDesC8& aLUID, + const TDesC8& aType, + const TInt aResultsRef, + const TInt aStatusRef ); + + /** + * From base class MsmlDmAdapter + * Lists all children of given URI. + * + * @since S60 3.0. + * @param aParentURI URI of the parent object. + * @param aParentLUID LUID of the parent object (if the adapter has + * earlier returned LUID to the DM Module). + * @param aPreviousURISegmentList URI list with mapping LUID + * information, which is known by DM engine. An + * adapter can use this information when verifying + * if old objects still exists. An adapter also + * knows what objects are new to DM engine and can + * provide LUID mapping for them. + * aPreviousURISegmentList parameter (see above) + * helps to recognise new objects. + * @param aResultsRef Reference to correct results, i.e. this + * reference must be used when returning the result + * by calling the SetResultsL. + * @param aStatusRef Reference to correct command, i.e. this + * reference must be used when calling the + * SetStatusL of this command. + */ + void ChildURIListL( + const TDesC8& aURI, + const TDesC8& aLUID, + const CArrayFix& aPreviousURISegmentList, + const TInt aResultsRef, + const TInt aStatusRef ); + + /** + * From base class MsmlDmAdapter + * Adds a node. + * + * @since S60 3.0. + * @param aURI URI of the object. + * @param aParentLUID LUID of the parent object (if the adapter has + * earlier returned LUID to the DM Module). + * @param aStatusRef Reference to correct command, i.e. this + * reference must be used when calling the + * SetStatusL of this command. + */ + void AddNodeObjectL( + const TDesC8& aURI, + const TDesC8& aParentLUID, + const TInt aStatusRef ); + + /** + * From base class MsmlDmAdapter + * Executes command. Not supported. + * + * @since S60 3.0. + * @param aURI URI of the command. + * @param aLUID LUID of the object (if the adapter has earlier + * returned LUID to the DM Module). + * @param aArgument Argument for the command. + * @param aType MIME type of the object. + * @param aStatusRef Reference to correct command, i.e. this reference + * must be used when calling the SetStatusL of this + * command. + * + */ + void ExecuteCommandL( + const TDesC8& aURI, + const TDesC8& aLUID, + const TDesC8& aArgument, + const TDesC8& aType, + const TInt aStatusRef ); + + /** + * From base class MsmlDmAdapter + * Executes command. Not supported. + * + * @since S60 3.0. + * @param aURI URI of the command. + * @param aLUID LUID of the object (if the adapter has earlier + * returned LUID to the DM Module). + * @param aStream Argument for the command. Adapter should create + * write stream and return, when data is written to + * stream by DM agent, StreamCommittedL() is called + * by DM engine. + * @param aType MIME type of the object. + * @param aStatusRef Reference to correct command, i.e. this reference + * must be used when calling the SetStatusL of this + * command. + * + */ + void ExecuteCommandL( + const TDesC8& aURI, + const TDesC8& aLUID, + RWriteStream*& aStream, + const TDesC8& aType, + const TInt aStatusRef ); + + /** + * From base class MsmlDmAdapter + * Copies command. Not supported. + * + * @since S60 3.0. + * @param aTargetURI Target URI for the command. + * @param aSourceLUID LUID of the target object (if one exists, and if + * the adapter has earlier returned a LUID to the + * DM Module). + * @param aSourceURI Source URI for the command. + * @param aSourceLUID LUID of the source object (if the adapter has + * earlier returned a LUID to the DM Module). + * @param aType MIME type of the objects. + * @param aStatusRef Reference to correct command, i.e. this + * reference must be used when calling the + * SetStatusL of this command. + * + */ + void CopyCommandL( + const TDesC8& aTargetURI, + const TDesC8& aTargetLUID, + const TDesC8& aSourceURI, + const TDesC8& aSourceLUID, + const TDesC8& aType, + TInt aStatusRef ); + + /** + * From base class MsmlDmAdapter + * Fetches the size of a leaf object. + * + * @since S60 3.0. + * @param aURI URI of the object. + * @param aLUID LUID of the object (if the adapter has earlier + * returned LUID to the DM Module). + * @param aType MIME type of the object. + * @param aResultsRef Reference to correct results, i.e. this + * reference must be used when returning the result + * by calling the SetResultsL. + * @param aStatusRef Reference to correct command, i.e. this + * reference must be used when calling the + * SetStatusL of this command. + * + */ + void FetchLeafObjectSizeL( + const TDesC8& aURI, + const TDesC8& aLUID, + const TDesC8& aType, + TInt aResultsRef, + TInt aStatusRef ); + + /** + * From base class MsmlDmAdapter + * + * @since S60 3.0. + * + */ + void StartAtomicL(); + + /** + * From base class MsmlDmAdapter + * + * @since S60 3.0. + * + */ + void CommitAtomicL(); + + /** + * From base class MsmlDmAdapter + * + * @since S60 3.0. + * + */ + void RollbackAtomicL(); + + /** + * From base class MsmlDmAdapter + * @since S60 3.0. + * @param aItemSize size limit for stream usage + * @return TBool ETrue for streaming support + * + */ + TBool StreamingSupport( TInt& aItemSize ); + + /** + * From MsmlDmAdapter + * + * @since S60 3.0. + * + */ + void StreamCommittedL(); + + /** + * From MsmlDmAdapter + * + * @since S60 3.0. + * + */ + void CompleteOutstandingCmdsL(); + + private: + + CNSmlDmSIPAdapter( TAny* aEcomArguments ); + void ConstructL(); + + /** + * Fetches an object and stores fetch result to aResult. + * + * @since S60 3.0. + * @param aURI URI of the object to be fetched. + * @param ALUID Local UID of the object to be fetched. + * @param aResult Handle for storing fetch result. + * @return DM status. + */ + CSmlDmAdapter::TError FetchObjectL( const TDesC8& aURI, + const TDesC8& aLUID, + CBufBase& aResult ); + + /** + * From base class MSIPProfileRegistryObserver. + * An event related to SIP Profile has occurred. + * + * @param aProfileId a profile Id + * @param aEvent an occurred event + */ + void ProfileRegistryEventOccurred( TUint32 aProfileId, + MSIPProfileRegistryObserver::TEvent aEvent); + + /** + * From base class MSIPProfileRegistryObserver. + * An asynchronous error has occurred related to SIP profile + * Event is send to those observers, who have the + * corresponding profile instantiated. + * + * @param aProfileId the id of failed profile + * @param aError an occurred error + */ + void ProfileRegistryErrorOccurred( TUint32 aProfileId, TInt aError ); + + /** + * Loads SIP profile information + * @since S60 3.0. + */ + void LoadProfilesL(); + + /** + * Converts descriptor to int. + * @since Series 60 2.8 + * @param aDes descriptor to convert. + * @return TInt. Converted value. + */ + TInt DesToInt(const TDesC8& aDes ); + + /** + * Removes last uri segment from aURI + * @since S60 3.0. + * @param aDes Descriptor to handle + * @return pointer to uri + */ + TPtrC8 RemoveLastURISeg( const TDesC8& aURI ); + + /** + * Gets number of uri segments. + * @since S60 3.0. + * @param aURI Descriptor to handle + * @return TInt. Number of URI segments. + */ + TInt NumOfURISegs( const TDesC8& aURI ); + + /** + * Find profile location from aURI + * @since S60 3.0. + * @param aURI Descriptor to look for + * @return Profile ID location. + */ + TInt FindHexProfile( const TDesC8& aURI ); + + /** + * Gets last uri segment. + * @since S60 3.0. + * @param aURI Descriptor to handle + * @return Pointer to URI + */ + TPtrC8 LastURISeg( const TDesC8& aURI ); + + /** + * Removes ./ from uri + * @since S60 3.0. + * @param aURI Descriptor to handle + * @return pointer to uri + */ + TPtrC8 RemoveDotSlash( const TDesC8& aURI ); + + /** + * Set conref value according to aObject + * @since S60 3.0. + * @param aObject URI to look from AP adapter + * @return Access point ID number + */ + TInt SetConRefL( const TDesC8& aObject, const TInt& aProfileid ); + + /** + * Get Access Point URI reference from AP adapter + * @since S60 3.0. + * @param aObject Object to insert found URI. + * @param aIapID IapID to look. + */ + TBool GetConRefL( CBufBase& aObject, const TInt& aProfileId ); + + /** + * Check for duplicate providerName and rename if same + * @since S60 3.0. + * @param aProfile Profile to check. + * @param aProfileId ProfileId to be skipped in check. + */ + void CheckDuplicateNameL( CSIPManagedProfile& aProfile, + const TInt& aProfileId ); + + /** + * Get SNAP ID. + * @since S60 3.2. + * @param aUri URI from which to find SNAP ID. + * @return SNAP ID. + */ + TUint32 SnapIdL( const TDesC8& aUri ); + + /** + * Set SNAP URI. + * @since S60 3.2. + * @param aObject Object in which found URI is set. + * @param aSnapId SNAP ID from which to find URI. + * @return ETrue if successful, EFalse if not. + */ + MSmlDmAdapter::TError GetSnapUriL( TDes8& aObject, TUint32 aSnapId ); + + /** + * Update method for OutboundProxy node. + * @since S60 3.2. + * @param aProfileId ID of the profile to be updated. + * @param aUri URI of the object to be updated. + * @param aObject Value to be updated. + * @return DM status. + */ + MSmlDmAdapter::TError UpdateOutboundProxyNodeL( TUint32 aProfileId, + const TDesC8& aUri, const TDesC8& aObject ); + + /** + * Update method for RegistrarServer node. + * @since S60 3.2. + * @param aProfileId ID of the profile to be updated. + * @param aUri URI of the object to be updated. + * @param aObject Value to be updated. + * @return DM status. + */ + MSmlDmAdapter::TError UpdateRegistrarServerNodeL( TUint32 aProfileId, + const TDesC8& aUri, const TDesC8& aObject ); + + /** + * Fetch method for OutboundProxy node. + * @since S60 3.2. + * @param aUri URI of the object to be fetched. + * @param aLuid LUID of the object to be fetched. + * @param aSegmentResult Fetch result object. + * @return DM status. + */ + MSmlDmAdapter::TError FetchOutboundProxyNodeL( TUint32 aProfileId, + const TDesC8& aUri, TDes8& aSegmentResult ); + + /** + * Fetch method for RegistrarServer node. + * @since S60 3.2. + * @param aUri URI of the object to be fetched. + * @param aLuid LUID of the object to be fetched. + * @param aSegmentResult Fetch result object. + * @return DM status. + */ + MSmlDmAdapter::TError FetchRegistrarServerNodeL( TUint32 aProfileId, + const TDesC8& aUri, TDes8& aSegmentResult ); + + private: // Data + + /** + * Handle for returning data to DM module. + * Own. + */ + MSmlDmCallback* iDmCallback; + + /** + * Object for handling SIP profile settings. + * Own. + */ + CSIPManagedProfileRegistry* iSIPManagedProfileRegistry; + + /** + * Array of pointers to all loaded SIP profiles. + * Own. + */ + CArrayPtrFlat* iProfiles; + + /** + * Status of DM module. + */ + TInt iStatus; + + /** + * Array for knowing if there are modifications to profiles in memory. + */ + RArray iModifications; + + /** + * Handle for returning results to dm-module. + * Own. + */ + CBufBase *iResults; + + private: // Friend classes + + #ifdef TEST_EUNIT + public: + friend class UT_CNSmlDmSIPAdapter; + #endif + }; + +#endif // __NSMLDMSIPADAPTER_H__