diff -r f742655b05bf -r d38647835c2e callcontinuity/nsmldmvccadapter/inc/nsmldmvccadapter.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/callcontinuity/nsmldmvccadapter/inc/nsmldmvccadapter.h Wed Sep 01 12:29:57 2010 +0100 @@ -0,0 +1,530 @@ +/* +* Copyright (c) 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: DM Adapter class definition +* +*/ + + + +#ifndef C_NSMLDMVCCADAPTER_H +#define C_NSMLDMVCCADAPTER_H + + +#include +#include + +#include "vccunittesting.h" + +class CVccSPSettings; + +/** + * The main class of the OMA PoC DM adapter. + * Handles requests of fetching and updating settings sets and settings items. + * + * @lib nsmldmvccadapter.dll + * @since S60 ?S60_version + */ +class CNSmlDmVCCAdapter : public CSmlDmAdapter + { +public: + + /** + * Two-phased constructor. + * + * @since S60 3.2 + * @param aDmCallback The pointer to callback to return results and + * status to codes for completed commands to the + * DM framework. The interface also has + * functionality for mapping LUIDs and fetching + * from other parts of the DM Tree. + * @return A pointer to the newly created object. + */ + static CNSmlDmVCCAdapter* NewL( MSmlDmCallback* aDmCallback ); + + /** + * Two-phased constructor. + * + * @since S60 3.2 + * @param aDmCallback The pointer to callback to return results and + * status to codes for completed commands to the + * DM framework. The interface also has + * functionality for mapping LUIDs and fetching + * from other parts of the DM Tree. + * @return A pointer to the newly created object. + */ + static CNSmlDmVCCAdapter* NewLC( MSmlDmCallback* aDmCallback ); + + /** + * Destructor. + */ + virtual ~CNSmlDmVCCAdapter(); + +//from base class MSmlDmAdapter + + /** + * From MSmlDmAdapter. + * Returns current version of the DDF. + * This function is always called after DDFStructureL. + * + * @since S60 3.2 + * @param aVersion DDF version of the adapter. + */ + void DDFVersionL( CBufBase& aVersion ); + + /** + * From MSmlDmAdapter. + * Fills the DDF structure of the adapter. The adapter starts to + * fill the data structure by calling AddChildObjectL to the root + * object and so describes the DDF of the adapter. + * + * @since S60 3.2 + * @param aDDFObject Reference to the root object. + */ + void DDFStructureL( MSmlDmDDFObject& aDDF ); + + /** + * From MSmlDmAdapter. + * Creates new leaf objects, or replaces data in existing + * leaf objects. The information about the success of the command + * should be returned by calling SetStatusL function of MSmlDmCallback + * callback interface. This makes it possible to buffer the commands. + * However, all the status codes for buffered commands must be returned + * at the latest when the adapter's CompleteOutstandingCmdsL() is + * called. + * + * @since S60 3.2 + * @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, + TInt aStatusRef ); + + /** + * From MSmlDmAdapter. + * The function creates new leaf objects, or replaces data in existing + * leaf objects, in the case where data is large enough to be streamed. + * SetStatusL function of MSmlDmCallback callback interface should be + * called to inform about the success of the command. This makes it + * possible to buffer the commands. All the status codes for buffered + * commands must be returned at the latest + * when the CompleteOutstandingCmdsL() of adapter is called. + * + * @since S60 3.2 + * @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 MSmlDmAdapter. + * Deletes an object and its child objects. The information about the + * success of the command should be returned by calling SetStatusL + * function of MSmlDmCallback callback interface. + * This makes it possible to buffer the commands. All the + * status codes for buffered commands must be returned at the latest + * when the CompleteOutstandingCmdsL() of adapter is called. + * + * @since S60 3.2 + * @param aURI URI of the object + * @param aLUID LUID of the object (if the adapter have 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, + TInt aStatusRef ); + + /** + * From MSmlDmAdapter. + * Fetches the data of a leaf object. The SetStatusL should be used as + * described in UpdateLeafObjectL(). The data is returned by using the + * SetResultsL function of MSmlCallback callback interface, and may be + * streamed. + * + * @since S60 3.2 + * @param aURI URI of the object + * @param aLUID LUID of the object (if the adapter have + * 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, + TInt aResultsRef, + TInt aStatusRef ); + + /** + * From MSmlDmAdapter. + * The function fetches the size of the data of a leaf object. The size + * is in bytes, and must reflect the number of bytes that will be + * transferred when the framework calls FetchLeafObjectL. The + * SetStatusL should be used as described in FetchLeafObjectL(). The + * size value is returned by using the SetResultsL function of + * MSmlCallback callback interface, and must be a decimal integer + * expressed as a string, eg. "1234". Results from this call MUST NOT + * be streamed. + * + * @since S60 3.2 + * @param aURI URI of the object + * @param aLUID LUID of the object (if the adapter have + * 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 MSmlDmAdapter. + * Fetches URI list. The adapter returns the list of URI segments under + * the given URI be separated by slash ("/"). The URI segment names for + * new objects must be given by the adapter. The list is returned by + * calling the SetResultsL function of MSmlCallback callback interface. + * Results from this call MUST NOT be streamed. + * + * @since S60 3.2 + * @param aParentURI URI of the parent object + * @param aParentLUID LUID of the parent object (if the + * adapter have 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, + TInt aResultsRef, + TInt aStatusRef ); + + /** + * From MSmlDmAdapter. + * The function adds node object. In some cases an implementation of + * the function may be empty function, if the node object does not need + * concrete database update. Still this function may be helpful to an + * adapter, i.e. in passing mapping LUID of the node to DM Module. The + * SetStatusL should be used as described in UpdateLeafObjectL(). + * + * @since S60 3.2 + * @param aURI URI of the object + * @param aParentLUID LUID of the parent object (if the adapter have + * 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, + TInt aStatusRef ); + + /** + * From MSmlDmAdapter. + * The function implements execute command. The information about the + * success of the command should be returned by calling SetStatusL + * function of MSmlDmCallback callback interface. This makes it + * possible to buffer the commands. However, all the status codes for + * buffered commands must be returned at the latest when the + * CompleteOutstandingCmdsL() of adapter is called. + * + * @since S60 3.2 + * @param aURI URI of the command + * @param aLUID LUID of the object (if the adapter have + * 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, + TInt aStatusRef ); + + /** + * From MSmlDmAdapter. + * The function implements execute command. The information about the + * success of the command should be returned by calling SetStatusL + * function of MSmlDmCallback callback interface. This makes it + * possible to buffer the commands. + * However, all the status codes for buffered commands must be returned + * at the latest when the CompleteOutstandingCmdsL() of adapter is + * called. + * + * @since S60 3.2 + * @param aURI URI of the command + * @param aLUID LUID of the object (if the adapter have + * 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, + TInt aStatusRef ); + + /** + * From MSmlDmAdapter. + * The function implements copy command. The information about the + * success of the command should be returned by calling SetStatusL + * function of MSmlDmCallback callback interface. This makes it + * possible to buffer the commands. + * However, all the status codes for buffered commands must be returned + * at the latest when the CompleteOutstandingCmdsL() of adapter is + * called. + * + * @since S60 3.2 + * @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 MSmlDmAdapter. + * The function indicates start of Atomic command. + * + * @since S60 3.2 + */ + void StartAtomicL(); + + /** + * From MSmlDmAdapter. + * The function indicates successful end of Atomic command. The adapter + * should commit all changes issued between StartAtomicL and + * CommitAtomicL + * + * @since S60 3.2 + */ + void CommitAtomicL(); + + /** + * From MSmlDmAdapter. + * The function indicates unsuccessful end of Atomic command. The + * adapter should rollback all changes issued between StartAtomicL() + * and RollbackAtomicL(). If rollback fails for a command, adapter + * should use SetStatusL() to indicate it. + * + * @since S60 3.2 + */ + void RollbackAtomicL(); + + /** + * From MSmlDmAdapter. + * Returns ETrue if adapter supports streaming otherwise EFalse. + * + * @since S60 3.2 + * @param aItemSize size limit for stream usage + * @return TBool ETrue for streaming support + */ + TBool StreamingSupport( TInt& aItemSize ); + + /** + * From MSmlDmAdapter. + * Called when stream returned from UpdateLeafObjectL or + * ExecuteCommandL has been written to and committed. Not called when + * fetching item. + * + * @since S60 3.2 + */ + void StreamCommittedL(); + + /** + * From MSmlDmAdapter. + * The function tells the adapter that all the commands of the message + * that can be passed to the adapter have now been passed. This + * indciates that the adapter must supply status codes and results to + * any buffered commands. This must be done at latest by the time this + * function returns. This function is used at the end of SyncML + * messages, and during processing of Atomic. In the case of Atomic + * processing, the function will be followed by a call to CommitAtomicL + * or RollbackAtomicL. + * + * @since S60 3.2 + */ + void CompleteOutstandingCmdsL(); + + /** + * Implementation for cleanup item. + * Resets and destroys array of the RCSE + * entries. + * @param anArray RPointerArray pointer. + */ + static void ResetAndDestroyEntries( TAny* anArray ); + +protected: + +private: + + /** + * Constructor. + * + * @param aEcomArguments + */ + CNSmlDmVCCAdapter( TAny* aEcomArguments ); + + /** + * Second-phase constructor. + */ + void ConstructL(); + + /** + * Gets last uri segment. + * + * @since S60 3.2 + * @param aURI Descriptor to handle + * @return integer + */ + const TPtrC8 LastURISeg( const TDesC8& aURI ); + + /** + * Gets last uri segment. + * + * @since S60 3.2 + * @param aURI Descriptor to handle + * @param aResult Object data. + * @return Error status enumeration + */ + CSmlDmAdapter::TError FetchObjectL( const TDesC8& aURI, + CBufBase& aResult ); + + /** + * Converts Utf8 to Unicode. + * + * @since S60 3.2 + * @param aSource Descriptor to handle containing UTF8 data + * @return Handle to Unicode data + */ + HBufC* ConvertToUnicodeL( const TDesC8& aSource ); + + /** + * Fetches Voip profile reference + * @param aUri Uri of the wanted object + * @param aObject The result is inserted to this buffer + * @return Error code + */ + CSmlDmAdapter::TError FetchVoipConRefL( const TDesC8& aUri, + CBufBase& aObject ); + + /** + * Updates Voip profile reference (ServiceId) + * @param aUri Uri of the wanted object + * @param aObject The result is inserted to this buffer + * @return Error code + */ + CSmlDmAdapter::TError UpdateVoipConRefL( const TDesC8& aUri, + const TDesC8& aObject); + + /** + * Removes separator from the end of URI. + * @param aURI Reference to the URI. + */ + static void RemoveLastSeparator( TPtr8& aURI ); + +private: // data + + VCC_UNITTEST( T_CNSmlDmVCCAdapter ) + + /** + * VCC SP Settings object + * own + * @see VccUtils + */ + CVccSPSettings* iVCCSettings; + + /** + * Temporary object for converting Utf8 string to Unicode + * own + */ + HBufC* iTempBuf; + }; + +#endif // C_NSMLDMVCCADAPTER_H