--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/syncmlfw/dm/treemodule/inc/nsmldmddf.h Thu Dec 17 09:07:52 2009 +0200
@@ -0,0 +1,561 @@
+/*
+* Copyright (c) 2005 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 tree etc.
+*
+*/
+
+
+
+#ifndef __NSMLDMDDF_H
+#define __NSMLDMDDF_H
+
+#include <e32std.h>
+#include <e32base.h>
+#include <ecom.h>
+#include <smldmadapter.h>
+
+#include <nsmldmmodule.h>
+#include <nsmldmtreedbclient.h>
+#include "nsmldmtreedtd.h"
+#include "nsmldmhostclient.h"
+
+class CNSmlDmModule;
+
+_LIT8(KNSmlDmFormatB64, "b64");
+_LIT8(KNSmlDmFormatBool, "bool");
+_LIT8(KNSmlDmFormatChr, "chr");
+_LIT8(KNSmlDmFormatInt, "int");
+_LIT8(KNSmlDmFormatNode, "node");
+_LIT8(KNSmlDmFormatNull, "null");
+_LIT8(KNSmlDmFormatXml, "xml");
+_LIT8(KNSmlDmFormatBin, "bin");
+
+_LIT8( KNSmlDmLitSeparator8, "/" );
+_LIT ( KNSmlTxtPanicDmModule,"NSmlDmModule");
+
+// Constant holding the value of number of slashes in a DM adapter aURI to get
+// the first dynamic node.Currently DM adapter will have maximum 4 slashes
+// eg: ./SCM/Inventory/Delivered/<x*>/z ; z is a leaf or internal node,
+// Before z four slashes present
+const TInt KMaximumNoOfSlashes = 4;
+
+// ===========================================================================
+// CNSmlCallbackElement
+// ===========================================================================
+/**
+* Container class for a DM callbacks
+*
+* @since
+*/
+class CNSmlCallbackElement : public CBase
+ {
+ public:
+ ~CNSmlCallbackElement();
+ HBufC8* iUri;
+ TInt iRef;
+ TBool iNode;
+ };
+
+
+
+// ===========================================================================
+// CNSmlDmDDF
+// ===========================================================================
+
+/**
+* DM DDF Handler
+*
+* @since
+*/
+class CNSmlDmDDF : public CBase
+ {
+ public:
+
+ enum TAccess
+ {
+ EOk,
+ ENotAccess,
+ ENotExist
+ };
+
+
+ /**
+ * Destructor
+ */
+ virtual ~CNSmlDmDDF();
+
+ /**
+ * Two-phased constructor.
+ * @param aDmModule Reference to dmModule class
+ * @return Pointer to newly created module instance
+ */
+ static CNSmlDmDDF* NewL(CNSmlDmModule& aDmModule);
+
+ /**
+ * Generates xml of ddf structure
+ * @param aObject Referencet to buffer where to generata
+ * ddf xml
+ */
+ void GenerateDDFL(CBufBase& aObject);
+
+ /**
+ * Sets the server identifier
+ * @param aServer The server id of current session
+ */
+ void SetServerL(const TDesC8& aServerId);
+
+ /**
+ * Creates sessions to Host Servers, asks ddf:s and calculates checksum of
+ * all the ddf versions of plug-in adapters
+ * @return Checksum of ddf's of plug-in adapters
+ */
+ TInt IsDDFChangedL();
+
+ /**
+ * Add operation in DM protocoll
+ * @param aURI Target URI in command
+ * @param aObject Data
+ * @param aType Mime type
+ * @param aStatusRef Reference to status element
+ * @param aLargeItem Indicates if object comes in multiple messages
+ * or not
+ */
+ void AddObjectL(const TDesC8& aURI, const TDesC8& aObject,
+ const TDesC8& aType,const TInt aStatusRef, TBool aLargeItem=EFalse);
+
+ /**
+ * Replace operation in DM protocoll
+ * @param aURI Target URI in command
+ * @param aObject Data
+ * @param aType Mime type
+ * @param aStatusRef Reference to status element
+ * @param aLargeItem Indicates if object comes in multiple messages
+ * or not
+ */
+ void UpdateObjectL(const TDesC8& aURI, const TDesC8& aObject,
+ const TDesC8& aType,const TInt aStatusRef, TBool aLargeItem=EFalse,
+ // FOTA
+ TInt aTotSizeOfLarge=0
+ // FOTA end
+ );
+
+ /**
+ * Get operation in DM protocoll
+ * @param aURI Target URI in command
+ * @param aType Mime type
+ * @param aResultsRef Reference to result element
+ * @param aStatusRef Reference to status element
+ * @param aAclPass Passes acl checking if true
+ */
+ void FetchObjectL( const TDesC8& aURI, const TDesC8& aType,
+ const TInt aResultsRef,const TInt aStatusRef, TBool aAclPass=EFalse);
+
+ /**
+ * Get size property operation in DM protocoll
+ * @param aURI Target URI in command
+ * @param aType Mime type
+ * @param aResultsRef Reference to result element
+ * @param aStatusRef Reference to status element
+ */
+ void FetchObjectSizeL( const TDesC8& aURI, const TDesC8& aType,
+ const TInt aResultsRef,const TInt aStatusRef);
+
+ /**
+ * Delete operation in DM protocoll
+ * @param aURI Target URI in command
+ * @param aStatusRef Reference to status element
+ */
+ void DeleteObjectL( const TDesC8& aURI, const TInt aStatusRef);
+
+ /**
+ * Execute operation in DM protocoll
+ * @param aURI Target URI in command
+ * @param aObject Data
+ * @param aType Mime type
+ * @param aStatusRef Reference to status element
+ * @param aLargeItem Indicates if object comes in multiple messages
+ * or not
+ */
+ void ExecuteObjectL( const TDesC8& aURI, const TDesC8& aObject,
+ const TDesC8& aType, TInt aStatusRef,
+ // FOTA
+ const TDesC8& aCorrelator,
+ // FOTA end
+ TBool aLargeItem=EFalse);
+
+ /**
+ * Copy operation in DM protocoll.
+ * @param aTargetURI Target URI in command
+ * @param aSourceURI Source URI in command
+ * @param aType Mime type
+ * @param aStatusRef Reference to status element
+ */
+ void CopyObjectL( const TDesC8& aTargetURI,const TDesC8& aSourceURI,
+ const TDesC8& aType, TInt aStatusRef);
+
+ /**
+ * Check ACL rights.
+ * @param aURI Target URI in command
+ * @param aCmdType Command type
+ * or not
+ * @return True if command is allowed by acls
+ */
+ TBool CheckAclL(const TDesC8& aURI, TNSmlDmCmdType aCmdType);
+
+ /**
+ * Indicates message ending
+ */
+ void EndMessageL();
+
+ /**
+ * Gets and allocates format in DDF
+ * @param aURI Target URI in command
+ * @return pointer to format descriptor
+ */
+ HBufC8* GetFormatAllocL(const TDesC8& aURI);
+
+ /**
+ * Gets and allocates format in DDF
+ * @param aURI Target URI in command
+ * @param aObject Reference to buffer where to write data
+ * @return KErrNotFound if not found, otherwise KErrNone
+ */
+ TInt GetMimeTypeL(const TDesC8& aURI,CBufBase& aObject);
+
+
+ /**
+ * Gets and allocates case sense in DDF
+ * @param aURI Target URI in command
+ * @param aObject Reference to buffer where to write data
+ * @return KErrNotFound if not found, otherwise KErrNone
+ */
+
+ TInt CNSmlDmDDF::GetCaseSenseL(const TDesC8& aURI,CBufBase& aObject);
+
+
+ /**
+ * Gets and allocates name in DDF
+ * @param aURI Target URI in command
+ * @param aObject Reference to buffer where to write data
+ * @return KErrNotFound if not found, otherwise KErrNone
+ */
+ TInt GetNameL(const TDesC8& aURI,CBufBase& aObject);
+
+ /**
+ * Checks if node is leaf or interior node
+ * @param aURI Target URI in command
+ * @return ENSmlDmDDFLeaf,ENSmlDmDDFNode
+ * or ENSmlDmDDFNotFound
+ */
+ TNSmlDmDDFFormat IsLeafL(const TDesC8& aURI);
+
+ /**
+ * Checks URI and access type and set the member variables point to correct
+ * plug-in adapter and correct host server
+ * @param aURI Target URI in command
+ * @param aCmdType Command type
+ * @return EOk,ENotAccess or ENotExist
+ */
+ TAccess CheckURIL(const TDesC8& aURI,TNSmlDmCmdType aCmd);
+
+ /**
+ * Replace ACL operation in DM protocoll
+ * @param aURI Target URI in command
+ * @param aACL ACL data
+ * @param aStatusRef Reference to status element
+ */
+ void UpdateAclL(const TDesC8& aURI, const TDesC8& aACL,
+ const TInt aStatusRef);
+
+ /**
+ * Get ACL operation in DM protocoll
+ * @param aURI Target URI in command
+ * @param aACL Reference to buffer where to write ACL data
+ * @return Status code
+ */
+ TInt GetAclL(const TDesC8& aURI, CBufBase& aACL);
+
+ /**
+ * Get more data in case of getting largeobject
+ * @param aData Reference to buffer where to write data
+ */
+ void MoreDataL(CBufBase*& aData);
+
+ /**
+ * "Callback" method. This is called when plug-in adapter makes new
+ * new mapping, i.e. maps aLuid to aURI
+ * @param aURI Uri to be mapped
+ * @param aLuid Luid to be mapped
+ */
+ void SetMappingL( const TDesC8& aURI, const TDesC8& aLUID );
+
+ /**
+ * "Callback" method. This is called when plug-in adapter has given
+ * result to get command
+ * @param aResultRef Reference information to result element
+ * @param aObject Result data
+ * @param aType Mime type of data
+ * @param aTotalSize Total size of data. In case of large object,
+ * this is different from aObject size.
+ * @param aSessionId Id of host session, this is given in case of
+ * large object -> module keeps the information
+ * until whole item is read
+ */
+ void SetResultsL( TInt aResultsRef, CBufBase& aObject,
+ const TDesC8& aType,TInt aTotalSize,TInt8 aSessionId=KErrNotFound);
+
+ /**
+ * "Callback" method. This is called when plug-in adapter has given
+ * status to command
+ * @param aStatusRef Reference information to status element
+ * @param aErrorCode Status code from plug-in adapter
+ */
+ void SetStatusL( TInt aStatusRef, CSmlDmAdapter::TError aErrorCode );
+
+ /**
+ * Gets and allocs luid mapped to aURI. Allocs KNullDesC8 if not exist.
+ * status to command
+ * @param aURI Uri to be serched
+ * @return Pointer to allocated luid
+ */
+ HBufC8* GetLuidAllocL(const TDesC8& aURI);
+
+ /**
+ * Start atomic indication
+ */
+ void StartAtomicL();
+
+ /**
+ * Commit atomic indication
+ */
+ void CommitAtomicL();
+
+ /**
+ * Rollback atomic indication
+ */
+ void RollbackAtomicL();
+
+ /**
+ * Closes the connections to callback server and host servers.
+ * Separate function is needed, since the disconnecting cannot
+ * be made after the active scheduler of the thread is stopped.
+ */
+ void DisconnectFromOtherServers();
+
+ // FOTA
+ /**
+ * When the generic alerts are successfully sent to the remote
+ * server, the FOTA adapter needs to be informed about this.
+ * This command is chained through the DM engine.
+ */
+ void MarkGenAlertsSentL();
+ // FOTA end
+
+
+ /* For 1.2 Any adapter can send the Generic adapter,
+ Hence URI of adapter is passed
+ */
+ void MarkGenAlertsSentL(const TDesC8& aURI);
+
+ private:
+
+ enum TUriCheck
+ {
+ EPassAdapter,
+ EBeforeAdapter,
+ EUriNotFound
+ };
+
+ /**
+ * Constructor
+ */
+ CNSmlDmDDF(CNSmlDmModule& aDmModule);
+
+ /**
+ * Second phase constructor
+ */
+ void ConstructL();
+
+ /**
+ * Set the member variables point to correct plug-in adapter and correct
+ * host server and gets the access type of node
+ * @param aURI Target URI in command
+ * @param aAccess Access type is written to this parameter
+ * @return EPassAdapter,EBeforeAdapter or EUriNotFound
+ */
+ TUriCheck CheckAdapterL(const TDesC8& aURI, TUint8 &aAccess);
+
+ /**
+ * Removes end and begin slashes from aObject
+ * @param aObject Child list data from plug-in adapter
+ */
+ void RemoveEndAndBeginSlashes(CBufBase& aObject) const;
+ /**
+ * Cleans array of delete elements and updates the add node
+ * elements array
+ * @param aStatusRef Reference information to status element
+ * @param aErrorCode Status code from plug-in adapter
+ */
+ void DeleteandAddStatusRefsL( TInt aStatusRef,
+ MSmlDmAdapter::TError aErrorCode );
+
+ /**
+ * Pointer to tree dtd
+ */
+ CNSmlDmMgmtTree* iMgmtTree;
+
+ /**
+ * Reference to DM Module instance
+ */
+ CNSmlDmModule& iDmModule;
+
+ /**
+ * Tree database client
+ */
+ RNSmlDMCallbackSession iDbSession;
+
+
+ /**
+ * Array of result elements, used for cleaning the tree when result
+ * is got from plug-in adapter
+ */
+ RPointerArray<CNSmlCallbackElement> iResultRefs;
+
+ /**
+ * Array of delete elements, used for cleaning the tree when
+ * succesfull delete is executed
+ */
+ RPointerArray<CNSmlCallbackElement> iDeleteStatusRefs;
+
+ /**
+ * Array of add node elements, used for setting default acls to
+ * node, if the current server does not have acces rigths to it
+ */
+ RPointerArray<CNSmlCallbackElement> iAddNodeStatusRefs;
+
+ /**
+ * Id of current plug-in adapter
+ */
+ TUint32 iAdapterId;
+
+ /**
+ * Id of current host session
+ */
+ TUint8 iSessionId;
+
+ /**
+ * Id of current host session in case of getting large object
+ */
+ TInt8 iResultSessionId;
+
+ /**
+ * Array of host sessions
+ */
+ RArray<RNSmlDMDataSession> iSessionArray;
+
+ /**
+ * Status of host sessions
+ */
+ TUint8 iOkSessions;
+
+ /**
+ * Reference of add commands
+ * separated by commas
+ */
+ HBufC8* iAddRootNodesList;
+ };
+
+
+
+// ===========================================================================
+// CNSmlDmLinkCallback
+// ===========================================================================
+/**
+* Class for overwriting the callback interface to caller.
+* In case of internal commands, the caller (agent) is not called,
+* this module is called instead
+*
+* @since
+*/
+class CNSmlDmLinkCallback : public CBase, public MNSmlDmModuleCallBack
+ {
+ public:
+
+ /**
+ * Destructor
+ */
+ virtual ~CNSmlDmLinkCallback();
+
+ /**
+ * Two-phased constructor.
+ * @return Pointer to newly created module instance
+ */
+ static CNSmlDmLinkCallback* NewL();
+
+ /**
+ * The class is used in internal commands to overwrite the normal
+ * callback interface. This methos overwrites the normal
+ * SetResultsL function
+ * @param aResultsRef Reference to result element
+ * @param aObject Data
+ * @param aType Mime type
+ * @param aFormat Format of the object
+ * @param aTotalSize Total size
+ */
+ void SetResultsL( TInt aResultsRef, const CBufBase& aObject,
+ const TDesC8& aType, const TDesC8& aFormat,TInt aTotalSize );
+
+ /**
+ * The class is used in internal commands to overwrite the normal
+ * callback interface. This methos overwrites the normal
+ * SetStatuslL function
+ * @param aStatusRef Reference to result element
+ * @param aStatusCode Status of command
+ */
+ void SetStatusL( TInt aStatusRef, TInt aStatusCode );
+
+ /**
+ * Gets the result
+ * @param aData Reference to the data buffer, where to
+ * write result data
+ * @param aStatus Reference to status info wher to write
+ * the status of command execution
+ */
+ void GetResultsL( CBufBase*& aData, CSmlDmAdapter::TError& aStatus );
+
+ /**
+ * Gets the status
+ * @return Status code
+ */
+ TInt GetStatusL();
+
+ private:
+ /**
+ * Constructor
+ */
+ CNSmlDmLinkCallback();
+
+ private:
+ /**
+ * Status code
+ */
+ TInt iStatus;
+
+ /**
+ * Result
+ */
+ CBufBase *iResults;
+ };
+
+#endif // __NSMLDMDDF_H
\ No newline at end of file