--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/nsmldmbmadapter/inc/nsmldmbmadapter.h Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,887 @@
+/*
+* 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"
+* 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 adapter handling bearer management related settings
+*
+*/
+
+
+
+
+#ifndef NSMLDMBMADAPTER_H
+#define NSMLDMBMADAPTER_H
+
+#include <smldmadapter.h>
+
+#include "nsmldmbmsettingstore.h"
+
+class CSmlDmBmCommandElement;
+class CSmlDmBmSettingsElement;
+class CNSmlDmBmSettingStore;
+
+/** The DDF version must be changed if any changes in DDF structure
+( built in DDFStructureL() function ) */
+_LIT8( KNSmlDmBMAdapterDDFVersion, "1.1" );
+_LIT8( KNSmlDmBMAdapterTextPlain, "text/plain" );
+
+/** Names of the nodes */
+/** When updating KNSmlDmBMAdapterBMURI also update
+KNSmlDmBmAdapterURIMaxLength! */
+_LIT8(KNSmlDmBMAdapterBMURI, "./BearerManagementSNAP");
+_LIT8(KNSmlDmBMAdapterBM, "BearerManagementSNAP");
+_LIT8(KNSmlDmBMAdapterName, "Name");
+_LIT8(KNSmlDmBMAdapterIAPPriorityList, "IAPPriorityList");
+_LIT8(KNSmlDmBMAdapterEmbeddedSNAP, "EmbeddedSNAP");
+_LIT8(KNSmlDmBMAdapterMetadata, "Metadata");
+_LIT8(KNSmlDmBMAdapterProtected, "Protected");
+_LIT8(KNSmlDmBMAdapterHidden, "Hidden");
+
+/** Descriptions of the nodes */
+_LIT8( KNSmlDmBMAdapterBMDescription,
+ "BearerManagement provides management of Access Point groups (SNAPs)");
+_LIT8( KNSmlDmBMAdapterDynamicDescription,
+ "Node presents a group of Access Points (SNAP)");
+_LIT8( KNSmlDmBMAdapterNameDescription,
+ "Name of the Access Point group");
+_LIT8( KNSmlDmBMAdapterIAPPriorityListDescription,
+ "Comma separated list of Access Point URIs in priority order.");
+_LIT8( KNSmlDmBMAdapterEmbeddedSNAPDescription,
+ "URI of embedded Access Point group. All Access points of the Embedded \
+ SNAP are seen as also belonging to this SNAP");
+_LIT8( KNSmlDmBMAdapterMetadataDescription,
+ "32 bit integer representing SNAP metadata. Following bitmasks indicate \
+ meaning of the individual bits: \n 0x00000001 \t Internet: The SNAP is \
+ the Internet SNAP. This may only be set to one SNAP object.\n \
+ 0x00000002\tHighlight: SNAP is highlighted in certain UI dialog.\n \
+ 0x00000004\tHidden: SNAP is hidden in certain UI dialog.");
+_LIT8( KNSmlDmBMAdapterProtectedDescription,
+ "SNAP is protected with one of the following protection levels. \
+ Protected object can not be modified without NetworkControl capability \n \
+ 0 \t No protection \n 1 \t SNAP and related objects \n \
+ 2 \t SNAP name is protected.");
+_LIT8( KNSmlDmBMAdapterHiddenDescription,
+ "SNAP is set as hidden in the setting store");
+
+/** Leaf nodes of snap node */
+_LIT8( KNSmlDmBMAllLeafNodes,
+ "Name/IAPPriorityList/Metadata/Protected/Hidden/EmbeddedSNAP");
+_LIT8( KNSmlDmBMAllLeafNodesNoEmbedded,
+ "Name/IAPPriorityList/Metadata/Protected/Hidden");
+
+/** URI of for fetching IAP nodes */
+/** When updating KNSmlDmBMAdapterIAPURI also update
+KNSmlDmBmAdapterAPURIMaxLength! */
+_LIT8( KNSmlDmBMAdapterIAPURI, "./AP" );
+/** Node name of AP adapter root */
+_LIT8( KNSmlDmBMAdapterIAPNode, "AP" );
+/** URI segment separator */
+/** When updating this literal also update
+KNSmlDmBmAdapterAPURIMaxLength and KNSmlDmBmAdapterURIMaxLength! */
+_LIT8( KNSmlDmBmSeparator, "/" );
+/** URI segment separator */
+/** When updating KNSmlDmBMAdapterBMURI also update
+KNSmlDmBmAdapterAPURIMaxLength and KNSmlDmBmAdapterURIMaxLength! */
+_LIT8( KNSmlDmBmUriListSeparator, "," );
+/** Prefix in URIs (removed for LUID mapping) */
+_LIT8( KNSmlDmBmAdapterURIPrefix, "./" );
+
+/** Name prefix for unnamed snap nodes */
+_LIT8( KNSmlDmBMSNAPNamePrefix, "SNAP" );
+_LIT8( KNSmlDmBMBooleanTrue, "True" );
+_LIT8( KNSmlDmBMBooleanFalse, "False" );
+
+
+const TInt KNSmlDmBMGranularity = 4;
+const TInt KNsmlDmBmSNAPNodeDepth = 2;
+const TInt KNSmlDmBmInvalidRef = -1;
+
+/** Maximum length of snap URI including a separator character in URI List.
+Node is not calculated here. KNSmlDmBMAdapterBMURI + KNSmlDmBmSeparator +
+KNSmlDmBmUriListSeparator
+*/
+const TInt KNSmlDmBmAdapterURIMaxLength = 24;
+
+/** Maximum length of AP URI including a separator character in URI List.
+Node is not calculated here. KNSmlDmBMAdapterIAPURI + KNSmlDmBmSeparator +
+KNSmlDmBmUriListSeparator
+*/
+const TInt KNSmlDmBmAdapterAPURIMaxLength = 6;
+
+/** Maximum length of 32bit integer */
+const TInt KMaxLengthOf32bitInteger = 10;
+
+/**
+ * Bearer Management device management adapter
+ *
+ * Bearer Management device management adapter manages settings
+ * related to Service Network Access Points (SNAPs) which are
+ * used for groupin IAPs
+ *
+ * @lib nsmldmbmadapter
+ * @since S60 v3.2
+ */
+class CNSmlDmBmAdapter : public CSmlDmAdapter
+ {
+
+public:
+
+/** Possible command types */
+enum TCommandType
+ {
+ EAddCmd,
+ EGetCmd,
+ EGetSizeCmd,
+ EDeleteCmd
+ };
+
+ /**
+ * Two-phased constructor.
+ */
+ static CNSmlDmBmAdapter* NewL( MSmlDmCallback* aDmCallback );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CNSmlDmBmAdapter();
+
+
+// from base class CSmlDmAdapter
+
+ /**
+ * The function returns current version of the DDF.
+ *
+ * @since S60 v3.2
+ * @param aDDFVersion 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 aDDF 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 aURI URI of the parent object
+ * @param aLUID 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 aTargetLUID 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();
+
+ /**
+ * Function checks if a SNAP with the argument URI is buffered for
+ * later handling. If so, the function calls iSettingStore object
+ * to store the SNAP. This function is called by the iSettingStore
+ * object to check whether EmbeddedSNAP node referenced by a command is
+ * still in the buffer and needs to be stored first.
+ *
+ * @since S60 v3.2
+ * @param aURI Descriptor containing the SNAP URI
+ */
+ void StoreSnapIfBufferedL( const TDesC8& aURI );
+
+
+ /**
+ * Function returns a pointer to a HBufC object containing a SNAP URI
+ * which correcponds to the argument LUID.
+ *
+ * @since S60 v3.2
+ * @param aSnapId LUID of SNAP object
+ * @return Descriptor containing the SNAP URI.
+ */
+ HBufC8* GetSnapUriFromLuidL( const TUint aSnapId );
+
+
+ /**
+ * Function returns a pointer to HBufC object containing a
+ * comma separated list of IAP URIs according to the IAP LUIDs
+ * contained in the argument array.
+ *
+ * @since S60 v3.2
+ * @param aIdArray Array of IAP LUIDs for which the URI list is formed.
+ * @return HBufC object containing a comma separated list of IAP URIs
+ */
+ HBufC8* GetIapListL( const RArray<TUint>& aIdArray );
+
+
+ /**
+ * Function returns an array containing the LUIDs of IAP URIs listed in
+ * argument descriptor.
+ *
+ * @since S60 v3.2
+ * @param aIAPList TDesC object containing a comma separated list of IAP
+ * URIs
+ * @return Array of IAP LUIDs that correspond to the argument URI list.
+ */
+ RArray<TUint> GetIdArrayL( const TDesC8& aIAPList);
+
+
+ /**
+ * 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;
+
+ /**
+ * Converts 8bit descriptor to a boolean value
+ * @since S60 v3.2
+ * @param aBoolDes The descriptor to be converted
+ * @param aBool A pointer to a boolean where result is stored
+ * @return ETrue if conversion was succesful, otherwise EFalse
+ */
+ TBool DesToBool(const TDesC8& aBoolDes, TBool& aBool ) const;
+
+ /**
+ * Converts boolean value to 8bit descriptor
+ * @since S60 v3.2
+ * @param aBool The boolean value to be converted
+ * @return The boolean value as a descriptor
+ */
+ HBufC8* BoolToDes8LC( TBool aBool) const;
+
+
+ /**
+ * The function calls the GetLuidAllocL function of the MSmlDmCallback to
+ * get the LUID which is mapped to aURI. This function LUID is not found,
+ * the function allocates a null length string, i.e. the function
+ * allocates memory in every case.
+ * @since S60 v3.2
+ * @param aURI URI of the object.
+ */
+ HBufC8* GetLuidAllocL( const TDesC8& aURI );
+
+private:
+
+ /**
+ * Constructor
+ */
+ CNSmlDmBmAdapter();
+
+ /**
+ * Constructor
+ * @param aDmCallback Callback object to the framework
+ */
+ CNSmlDmBmAdapter( MSmlDmCallback* aDmCallback );
+
+ /**
+ * Second phase constructor
+ */
+ void ConstructL();
+
+
+ /**
+ * Searches the buffer for a SNAP with the parameter mapping name
+ * @param aMappingName Mapping Name of this SNAP
+ * @return Pointer to the CSmlDmBmSettingsElement object in buffer.
+ * The object is owned by the CNSmlDmBmAdapter.
+ */
+ CSmlDmBmSettingsElement* GetSnapIfBuffered( const TDesC8& aMappingName);
+
+ /**
+ * Returns the first URI from a list of URIs
+ * @param aURIList Comma separated list of URIs
+ * @return The first URI
+ */
+ TPtrC8 FirstURI(const TDesC8& aURIList) const;
+
+ /**
+ * Returns the number of URIs in a list of URIs
+ * @param aURIList Comma-separated list of URIs
+ * @return Number of URIs in the list.
+ */
+ TInt NumOfURIs(const TDesC8& aURIList) const;
+
+
+ /**
+ * Removes the first URI from a list of URIs
+ * @param aURIList Comma separated list of URIs
+ * @return The first URI
+ */
+ TPtrC8 RemoveFirstURI(const TDesC8& aURI) const;
+
+ /**
+ * Parses the last URI segment from URI
+ * @param aURI The whole URI
+ * @return The last URI segment
+ */
+ TPtrC8 LastURISeg(const TDesC8& aURI) const;
+
+ /**
+ * Removes the last URI segment from URI
+ * @param aURI The whole URI
+ * @return The aURI without the last URI segment
+ */
+ TPtrC8 RemoveLastURISeg(const TDesC8& aURI) const;
+
+ /**
+ * Calculates the number of URI segments
+ * @param aURI The whole URI
+ * @return The number of URI segments
+ */
+ TInt NumOfURISegs(const TDesC8& aURI) const;
+
+ /**
+ * Checks if the URI refers to predefined SNAP (of format SNAPx) in which
+ * case operations should be successful even if passed LUID is empty.
+ * Maps the URI to found id.
+ * @param aURI The whole URI
+ * @param aLUID LUID
+ * @return The SNAP ID if found
+ */
+ TInt MapPredefinedSnapsL( const TDesC8& aURI, const TDesC8& aLUID );
+
+ /**
+ * Tries to find predefined URI string (SNAPx) fronm input
+ * returns the ID.
+ * @param aURI The whole URI
+ * @return The SNAP ID if found
+ */
+ TInt GetPredefinedSnapIdFromUri( const TDesC8& aURI ) const;
+
+private: //data
+
+ /**
+ * Buffered commands. Contains a CSmlDmBmSettingsElement object
+ * for each SNAP. THese in turn contain commands for the SNAP.
+ */
+ RPointerArray<CSmlDmBmSettingsElement> iBuffer;
+
+ /**
+ * Setting store object, which is called for managing settings
+ * in CommsDat. Own.
+ */
+ CNSmlDmBmSettingStore * iSettingStore;
+
+ /**
+ * CmManager object for SNAP existence checking for
+ * direct accesses to pre-defined SNAPs
+ */
+ RCmManagerExt iCmManagerExt;
+
+ };
+
+
+/**
+ * CSmlDmBmCommandElement
+ *
+ * Helper class, which stores a single buffered command for a SNAP.
+ * @lib nsmldmbmadapter
+ * @since S60 v3.2
+ */
+
+class CSmlDmBmCommandElement : public CBase
+ {
+
+public:
+
+ /**
+ * Two-phased constructor.
+ */
+ static CSmlDmBmCommandElement* NewLC( TBool aLeaf,
+ TInt aStatusRef,
+ TInt aResultRef,
+ CNSmlDmBmAdapter::TCommandType aCmdType,
+ const TDesC8& aLastUriSeg,
+ const TDesC8& aData );
+
+ /**
+ * Destructor.
+ */
+ ~CSmlDmBmCommandElement();
+
+ /**
+ * 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 CNSmlDmBmAdapter::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 SetDataL( const TDesC8& aData );
+
+private:
+
+ CSmlDmBmCommandElement( TBool aLeaf,
+ TInt aStatusRef,
+ TInt aResultRef,
+ CNSmlDmBmAdapter::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 Snap 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 CNSmlDmBmAdapter::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;
+
+ };
+
+
+/**
+ * CSmlDmBmSettingsElement
+ *
+ * Helper class which stores information of a single SNAP object
+ * into buffer. Contains the buffered commands for the
+ * SNAP as a list of CSmlBmCommandElement objects.
+ *
+ * @lib nsmldmbmadapter
+ * @since S60 v3.2
+ */
+
+class CSmlDmBmSettingsElement : public CBase
+ {
+
+public:
+
+ /**
+ * Two-phased constructor.
+ */
+ static CSmlDmBmSettingsElement* NewLC( const TDesC8& aMappingName );
+
+ /**
+ * Destructor.
+ */
+ ~CSmlDmBmSettingsElement();
+
+ /**
+ * Returns a reference to iNodeBuf member.
+ * @since S60 v3.2
+ * @return Reference to iNodeBuf member of the object
+ */
+ inline RPointerArray<CSmlDmBmCommandElement>& NodeBuf();
+
+ /**
+ * Returns the iMappingName member value.
+ * @since S60 v3.2
+ * @return The iMappingName member value of the object
+ */
+ inline const HBufC8* MappingName();
+
+ /**
+ * Returns the iExecuted member value.
+ * @since S60 v3.2
+ * @return The iExecuted member value of the object
+ */
+ inline TBool Executed();
+
+ /**
+ * Sets the iExecuted member value.
+ * @since S60 v3.2
+ * @param aExecuted Value for the iExecuted member of the object
+ */
+ inline void SetExecuted( TBool aExecuted );
+
+ /**
+ * Returns the iLuid member value.
+ * @since S60 v3.2
+ * @return The iLuid member value of the object
+ */
+ inline TInt Luid();
+
+ /**
+ * Sets the iLuid member value.
+ * @since S60 v3.2
+ * @param aLuid Value for the iLuid member of the object
+ */
+ inline void SetLuid( TInt aLuid );
+
+
+private:
+
+ CSmlDmBmSettingsElement();
+
+ void ConstructL( const TDesC8& aMappingName );
+
+private: //data
+
+ /**
+ * Buffer of commands for this SNAP object. Commands
+ * are added as they come in from the framework and
+ * executed by the setting store.
+ */
+ RPointerArray<CSmlDmBmCommandElement> iNodeBuf;
+
+ /**
+ * Indicates whether commands for this SNAP have been executed.
+ * Set to Erue by CNsmlDmBmSettingStore when object is handled.
+ */
+ TBool iExecuted;
+
+ /**
+ * LUID (Local UID) is the CommsDat id of the SNAP node. This is
+ * filled in when SNAP object is created in CommsDat.
+ */
+ TInt iLuid;
+
+ /**
+ * Mapping name of this SNAP node. This is mapped to the
+ * iLuid when the Snap is created and has id.
+ */
+ HBufC8* iMappingName;
+ };
+
+#include "nsmldmbmadapter.inl"
+
+#endif // NSMLDMBMADAPTER_H