deviceupdatesui/omadmadapters/nsmldmalwaysonadapter/inc/nsmldmalwaysonadapter.h
changeset 44 137912d1a556
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceupdatesui/omadmadapters/nsmldmalwaysonadapter/inc/nsmldmalwaysonadapter.h	Tue Jul 13 03:44:34 2010 +0530
@@ -0,0 +1,581 @@
+/*
+* 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 for handling always-on settings.
+*
+*/
+
+
+#ifndef NSMLDMALWAYSONADAPTER_H
+#define NSMLDMALWAYSONADAPTER_H
+
+#include <smldmadapter.h>
+
+#include "nsmldmalwaysonsettingstore.h"
+
+class CSmlDmAOCommandElement;
+class CNSmlDmAOSettingStore;
+
+// The DDF version must be changed if any changes in DDF structure 
+// ( built in DDFStructureL() function )
+_LIT8( KNSmlDmAOAdapterDDFVersion, "1.0" ); 
+_LIT8( KNSmlDmAOAdapterTextPlain, "text/plain" );
+
+// Names of the nodes
+// When updating KNSmlDmAOAdapterAOURI also update 
+// KNSmlDmAOAdapterURIMaxLength! */
+_LIT8(KNSmlDmAOAdapterAOURI, "./VENDORCONFIG");
+_LIT8(KNSmlDmAOAdapterAO, "VENDORCONFIG");
+_LIT8(KNSmlDmAOAdapterName, "NAME");
+_LIT8(KNSmlDmAOAdapterAwonPdpc, "AWON-PDPC");
+_LIT8(KNSmlDmAOAdapterTRetry, "T-RETRY");
+
+
+// Descriptions of the nodes
+_LIT8( KNSmlDmAOAdapterAODescription, 
+       "Always-on provides management of connections");
+_LIT8( KNSmlDmAOAdapterNameDescription, 
+       "Name of the VENDORCONFIG");
+_LIT8( KNSmlDmAOAdapterAwonPdpcDescription, 
+       "Always-on setting in home and visited network");
+_LIT8( KNSmlDmAOAdapterTRetryDescription, 
+       "T-Retry timer interval");
+
+// Leaf nodes of VENDORCONFIG node
+_LIT8( KNSmlDmAOAllLeafNodes, 
+       "NAME/AWON-PDPC/T-RETRY");
+
+// URI segment separator
+// When updating this literal also update 
+// KNSmlDmAOAdapterAPURIMaxLength and KNSmlDmAOAdapterURIMaxLength!
+_LIT8( KNSmlDmAOSeparator, "/" );
+
+// URI segment separator
+// When updating KNSmlDmAOAdapterAOURI also update 
+// KNSmlDmAOAdapterAPURIMaxLength and KNSmlDmAOAdapterURIMaxLength!
+_LIT8( KNSmlDmAOUriListSeparator, "," );
+
+// Prefix in URIs (removed for LUID mapping)
+_LIT8( KNSmlDmAOAdapterURIPrefix, "./" );
+
+// Name prefix for unnamed VENDORCONFIG nodes
+_LIT8( KNSmlDmAONamePrefix, "VENDORCONFIG" );
+
+const TInt KNSmlDmAOGranularity = 4;
+const TInt KNSmlDmAOInvalidRef = -1;
+
+// Maximum length of VENDORCONFIG URI including a separator 
+// character in URI List. Node is not calculated here.  
+// KNSmlDmAOAdapterAOURI + KNSmlDmAOSeparator + KNSmlDmAOUriListSeparator
+const TInt KNSmlDmAOAdapterURIMaxLength =  16;
+        
+/**
+ *  Always-on device management adapter
+ *
+ *  Always-on device management adapter manages settings
+ *  related to VENDORCONFIG.
+ *
+ *  @lib nsmldmalwaysonadapter
+ *  @since S60 v3.2
+ */
+class CNSmlDmAOAdapter : public CSmlDmAdapter
+    {
+    
+public:
+
+/** Possible command types */
+enum TCommandType
+    {
+    EAddCmd,
+    EGetCmd,
+    EGetSizeCmd,
+    EDeleteCmd
+    };
+
+
+    static CNSmlDmAOAdapter* NewL( MSmlDmCallback* aDmCallback );
+    
+    virtual ~CNSmlDmAOAdapter();
+
+
+// from base class CSmlDmAdapter
+
+    /**
+     *  The function returns current version of the DDF. 
+     *
+     *  @since S60 v3.2
+     *  @param aVersion DDF version of the
+     *  adapter. (filled by the adapter) 
+     */
+    void DDFVersionL( CBufBase& aDDFVersion );
+
+    /**
+     *  The function for filling the DDF structure of the adapter
+     *
+     *  @since S60 v3.2
+     *  @param aDDFObject   Reference to root object.
+    */
+    void DDFStructureL( MSmlDmDDFObject& aDDF );
+
+    /**
+     * The function creates new leaf objects, or replaces data in existing 
+     * leaf objects. The information about the success of the command is
+     * returned by calling SetStatusL function of MSmlDmCallback callback
+     * interface. 
+     *     
+     * @since S60 v3.2
+     * @param aURI         URI of the object
+     * @param aLUID        LUID of the object 
+     * @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 );
+    /**
+     * The function deletes an object and its child objects. 
+     *
+     * @since S60 v3.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 );
+
+    /**
+     * The function fetches data of a leaf object. The SetStatusL is used
+     * as described in UpdateLeafObjectL(). The data is returned by using the
+     * SetResultsL function of MSmlCallback callback interface.
+	 *
+     * @since S60 v3.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 );
+
+    /**
+     * 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. 
+	 *
+     * @since S60 v3.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 );
+
+    /**
+     * The function fetches URI list. An 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. 
+	 *
+     * @since S60 v3.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.  
+     * @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<TSmlDmMappingInfo>& aPreviousURISegmentList,
+					    TInt aResultsRef, TInt aStatusRef );
+
+    /**
+     * The function adds node object. 
+     *
+     * @since S60 v3.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 );
+    /**
+     * The adapter does not support streaming and no implementation is 
+     * provided for this function.
+     *
+     * @since S60 v3.2
+     * @param aURI         URI of the object
+     * @param aLUID        LUID of the object
+     * @param aStream      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,
+							RWriteStream*& aStream, const TDesC8& aType,
+		 					TInt aStatusRef );
+    /**
+     * The adapter does not support execute command and does not 
+     * provide implementation for this function. 
+     *
+     *  @since S60 v3.2
+     * @param aURI             URI of the command
+     * @param aLUID            LUID of the object
+     * @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 );
+    /**
+     * The adapter does not support execute command and does not 
+     * provide implementation for this function. 
+     *
+     * @since S60 v3.2
+     * @param aURI         URI of the command
+     * @param aLUID            LUID of the object 
+     * @param aStream      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,
+						  RWriteStream*& aStream, const TDesC8& aType,
+						  TInt aStatusRef );
+    /**
+     * The adapter does not support copy command and does not 
+     * provide implementation for this function. 
+     *
+     * @since S60 v3.2
+     * @param aTargetURI       Target URI for the command
+     * @param aSourceLUID      LUID of the target object 
+     * @param aSourceURI       Source URI for the command
+     * @param aSourceLUID      LUID of the source object 
+     * @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 );
+    /**
+     * Not supported
+     *  @since S60 v3.2
+    */
+    void StartAtomicL();
+    /**
+     * Not Supported     
+     *  @since S60 v3.2
+     *
+    */
+    void CommitAtomicL();
+    /**
+ 	 * Not supported.
+     *  @since S60 v3.2
+     */
+    void RollbackAtomicL();
+    /**
+     * Returns EFalse as the adapter does not support streaming
+     *
+     * @since S60 v3.2
+     * @param aItemSize size limit for stream usage
+     * @return TBool EFalse as streaming is not supported
+    */
+    TBool StreamingSupport( TInt& aItemSize );
+    /**
+     * Not supported
+     *
+     *  @since S60 v3.2
+    */  
+    void StreamCommittedL();
+    /**
+     * 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.  
+     *
+     *  @since S60 v3.2
+    */
+    void CompleteOutstandingCmdsL();
+        
+    /**
+     * Converts integer to 8bit descriptor
+     *
+     *  @since S60 v3.2
+     * @param    aLuid The integer to be converted
+     * @return    The Integer as a descriptor
+     */
+    HBufC8* IntToDes8L( TInt aLuid) const;
+    
+    /**
+     * Converts 8bit descriptor to integer
+     *
+     *  @since S60 v3.2
+     * @param    aLuid The descriptor to be converted
+     * @return    Integer value of the descriptor
+     */
+    TUint DesToIntL(const TDesC8& aLuid) const;
+
+
+private:
+
+     /**
+     * Constructor
+     */
+    CNSmlDmAOAdapter();
+
+    /**
+     * Constructor
+     * @param aDmCallback Callback object to the framework
+     */
+    CNSmlDmAOAdapter( MSmlDmCallback* aDmCallback );   
+
+    /**
+     * Second phase constructor
+     */
+    void ConstructL();
+     
+    /**
+     * Parses the last URI segment from URI
+     * @param    aURI The whole URI
+     * @return    The last URI segment
+     */
+    TPtrC8 LastURISeg(const TDesC8& aURI) const; 
+
+
+private: //data
+
+    /**
+     * Setting store object, which is called for managing settings 
+     * in CommsDat. Own.
+     */
+     CNSmlDmAOSettingStore * iSettingStore;
+        
+    };
+
+
+/**
+ *  CSmlDmAOCommandElement 
+ *
+ * Helper class, which stores a single command for a VENDORCONFIG. 
+ *  @lib nsmldmalwaysonadapter
+ *  @since S60 v3.2
+ */
+
+class CSmlDmAOCommandElement : public CBase
+    {
+
+public:
+
+    static CSmlDmAOCommandElement* NewLC( TBool aLeaf, 
+                                          TInt aStatusRef, 
+                                          TInt aResultRef, 
+                                          CNSmlDmAOAdapter::TCommandType  aCmdType, 
+                                          const TDesC8& aLastUriSeg, 
+                                          const TDesC8& aData );
+
+     ~CSmlDmAOCommandElement();
+
+    /**
+     * Returns the iExecuted member value of the object
+     *
+     * @since S60 v3.2
+     * @return The iExecuted member value of the object
+     */
+    inline TBool Executed();
+
+    /**
+     * Sets the iExecuted member value of the object
+     *
+     * @since S60 v3.2
+     * @param aExecuted Executed value for the object. 
+     */    
+    inline void SetExecuted( TBool aExecuted );
+    
+    /**
+     * Returns the iStatus member value of the object
+     *
+     * @since S60 v3.2
+     * @return The iStatus value of the object
+     */
+    inline CSmlDmAdapter::TError Status();
+    
+    /**
+     * Sets the iStatus member value of the object
+     *
+     * @since S60 v3.2
+     * @param aStatus Status value for the object. 
+     */    
+    inline void SetStatus( CSmlDmAdapter::TError aStatus ); 
+    
+    /**
+     * Returns the iLeaf member value of the object
+     *
+     * @since S60 v3.2
+     * @return The iLeaf member value of the object
+     */
+    inline TBool Leaf();
+    
+    /**
+     * Returns the iStatusRef member value of the object
+     *
+     * @since S60 v3.2
+     * @return The iStatusRef member value of the object
+     */
+    inline TInt StatusRef();
+    
+    /**
+     * Returns the iResultRef member value of the object
+     *
+     * @since S60 v3.2
+     * @return The iResultRef member value of the object
+     */
+    inline TInt ResultRef();
+    
+    /**
+     * Returns the iCmdType member value of the object
+     *
+     * @since S60 v3.2
+     * @return The iCmdType member value of the object
+     */
+    inline CNSmlDmAOAdapter::TCommandType  CmdType();        
+    
+    /**
+     * Returns the iData member value of the object
+     *
+     * @since S60 v3.2
+     * @return The iData member value of the object
+     */
+    inline const HBufC8* Data();
+    
+    /**
+     * Returns the iLastUriSeg member value of the object
+     *
+     * @since S60 v3.2
+     * @return The iLastUriSeg member value of the object
+     */
+    inline const HBufC8* LastUriSeg();
+    
+    /**
+     * Sets the iData member value of the object
+     *
+     * @since S60 v3.2
+     * @param aData Data set to the object. The data will be owned by 
+     * the command object. 
+     */    
+    inline void SetData( HBufC8* aData );
+
+private:
+
+    CSmlDmAOCommandElement( TBool aLeaf, 
+                            TInt aStatusRef, 
+                            TInt aResultRef, 
+                            CNSmlDmAOAdapter::TCommandType aCmdType );                              
+
+    void ConstructL( const TDesC8& aLastUriSeg, const TDesC8& aData );   
+
+    
+private: //data
+
+    /**
+     * Has command been executed. 
+     * Set to ETrue when command is executed.
+     */
+    TBool iExecuted;
+    
+    /**
+     * The execution status of an exeuted command. 
+     * Filled in when command is executed.
+     */    
+    CSmlDmAdapter::TError iStatus;
+    
+    
+    /**
+     * True if commend is for a leaf node, False if it is for a NAPDEF node.
+     */    
+    const TBool iLeaf;
+    
+    /**
+     * Reference for returning the status to DM framework.
+     */    
+    const TInt iStatusRef;
+    
+    /**
+     * Reference for returning result of Get command to the DM framework.
+     */    
+    const TInt iResultRef;
+    
+    /**
+     * Type of command.
+     */    
+    const CNSmlDmAOAdapter::TCommandType  iCmdType;        
+    
+
+    /**
+     * Data which is either ment to be stored to setting store 
+     * or which has been fetched from there. 
+     */
+    HBufC8* iData;
+
+    /**
+     * Last segment in the command URI, which indicates the leaf node 
+     * in question. For non leaf command empty string. 
+     */    
+    HBufC8* iLastUriSeg;
+
+    };
+    
+#include "nsmldmalwaysonadapter.inl"    
+
+#endif // NSMLDMALWAYSONADAPTER_H