omadrm/drmengine/server/inc/DRMRightsData.h
changeset 0 95b198f216e5
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadrm/drmengine/server/inc/DRMRightsData.h	Thu Dec 17 08:52:27 2009 +0200
@@ -0,0 +1,364 @@
+/*
+* Copyright (c) 2003 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:  Datatype for Rights Constraint
+*
+*/
+
+
+#ifndef DRMRIGHTSDATA_H
+#define DRMRIGHTSDATA_H
+
+// INCLUDES
+
+#include <e32base.h>
+#include "DRMTypes.h"
+
+// CONSTANTS
+
+// MACROS
+
+// DATA TYPES
+
+// FORWARD DECLARATIONS
+class CDRMPermission;
+class CDRMCommonData;
+class CPermanentFileStore;
+class RWriteStream;
+class TStreamId;
+
+// TYPE DEFINITIONS
+
+// FUNCTION PROTOTYPES
+
+// CLASS DECLARATION
+
+/**
+*  CDRMRightsData implements the rights database required by DRM Engine
+*
+*  @lib RightsServer.dll
+*  @since 3.0
+*/
+
+NONSHARABLE_CLASS( CDRMRightsData ) : public CBase 
+    {
+public: // Constructors and destructor
+    /**
+    * NewLC
+    *
+    * Creates an instance of the CDRMRightsData class and returns a pointer 
+    * to it. The function leaves the object into the cleanup stack
+    *
+    * @since  3.0
+    * @param    aData : The common data to store takes possession of the data
+    * @param    aKey : Key of the content
+    * @param    aRightsFile : Full pathname of the rights store
+    * @param    aFileServer : File server instance to use
+    * @return   Functional CDRMRightsData object, Function leaves if an error 
+    *           occurs.
+    */
+    static CDRMRightsData* NewLC( CDRMCommonData* aData,
+                                  const TDesC8& aKey, 
+                                  const TFileName& aRightsFile,
+                                  RFs& aFileServer );
+    
+    /**
+    * NewL
+    *
+    * Creates an instance of the CDRMRightsData class and returns a pointer 
+    * to it.
+    *
+    * @since  3.0
+    * @param    aData : The common data to store takes possession of the data
+    * @param    aKey : Key of the content
+    * @param    aRightsFile : Full pathname of the rights store
+    * @param    aFileServer : File server instance to use    
+    * @return   Functional CDRMRightsData object, Function leaves if an error 
+    *           occurs.
+    */
+    static CDRMRightsData* NewL( CDRMCommonData* aData, 
+                                 const TDesC8& aKey,
+                                 const TFileName& aRightsFile,
+                                 RFs& aFileServer );
+    /**
+    * OpenLC
+    *
+    * Opens the store and creates an instance of the CDRMRightsData class and returns
+    * a pointer to it. The function leaves the object into the cleanup stack
+    *
+    * @since  3.0
+    * @param  aRightsFile : Full pathname of the rights store
+    * @param    aFileServer : File server instance to use    
+    * @return Functional CDRMRightsData object, Function leaves if an error 
+    *         occurs.
+    */
+    static CDRMRightsData* OpenLC( const TFileName& aRightsFile,
+                                   RFs& aFileServer );
+    /**
+    * OpenL
+    *
+    * Opens the store and creates an instance of the CDRMRightsData class and returns
+    * a pointer to it.
+    *
+    * @since  3.0
+    * @param  aRightsFile : Full pathname of the rights store
+    * @param    aFileServer : File server instance to use    
+    * @return Functional CDRMRightsData object, Function leaves if an error 
+    *         occurs.
+    */
+    static CDRMRightsData* OpenL( const TFileName& aRightsFile,
+                                  RFs& aFileServer );
+
+    /*
+    * Destructor
+    */ 
+    virtual ~CDRMRightsData(); 
+
+
+public: // New functions
+
+    /**
+    * GetCommonDataL
+    * 
+    * returns a pointer a common data object
+    *
+    * @since    3.0
+    * @return   The function leaves with Symbian OS error code if an
+    *           error occurs
+    */
+    const CDRMCommonData* GetCommonDataL() const;
+
+    /**
+    * UpdateCommonDataL
+    * 
+    * Updates the common data part
+    *
+    * @since    3.0
+    * @return   The function leaves with Symbian OS error code if an
+    *           error occurs
+    */
+    void UpdateCommonDataL( CDRMCommonData *aData );        
+    
+    /**
+    * StoreNewPermissionL
+    * 
+    * Writes the data of the permission to the store and returns
+    * the stream id
+    *
+    * @since    3.0
+    * @param    aPermission : CDRMPermission class to externalize
+    * @param    aStream : the output stream to write to
+    * @return   The function leaves with Symbian OS error code if an
+    *           error occurs
+    */
+    void StoreNewPermissionL( CDRMPermission& aPermission,
+                              TDRMUniqueID& aStream );    
+    
+    /**
+    * UpdatePermissionL
+    * 
+    * Writes the data of the object into the stream
+    *
+    * @since    3.0
+    * @param    aPermission : CDRMPermission class to externalize
+    * @return   The function leaves with Symbian OS error code if an
+    *           error occurs
+    */
+    void UpdatePermissionL( const CDRMPermission& aPermission );
+    
+    /**
+    * FetchPermissionL
+    * 
+    * Reads the data of the object from the stream
+    *
+    * @since    3.0
+    * @param    aPermission : a CDRMPermission class to internalize to
+    * @param    aStream : the stream id to write the permission to
+    * @return   The function leaves with Symbian OS error code if an
+    *           error occurs
+    */
+    void FetchPermissionL( CDRMPermission& aPermission,
+                           const TDRMUniqueID& aStream ) const;
+
+    /**
+    * DeletePermissionL
+    * 
+    * Deletes the data of the object from the stream
+    *
+    * @since    3.0
+    * @param    aStream : the stream id to write the permission to
+    * @return   The function leaves with Symbian OS error code if an
+    *           error occurs
+    */
+    void DeletePermissionL( const TDRMUniqueID& aStream );
+                           
+    /**
+    * FetchPermissionsL
+    * 
+    * Reads all the permissions and puts the data into the pointer array
+    *
+    * @since    3.0
+    * @param    aPointerArray : return value pointer array of the permissions
+    * @return   The function leaves with Symbian OS error code if an
+    *           error occurs
+    */
+    void FetchAllPermissionsL( RPointerArray<CDRMPermission>& 
+                               aPointerArray );
+
+    /**
+    * DeleteAllPermissionsL
+    * 
+    * Deletes the data of the object from the stream
+    *
+    * @since    3.0
+    * @return   The function leaves with Symbian OS error code if an
+    *           error occurs
+    */
+    void DeleteAllPermissionsL();
+
+
+    /**
+    * DeleteExpiredPermissionsL
+    * 
+    * Deletes the data of the object from the stream
+    *
+    * @since    3.0
+    * @param	aTime : Current secure time for checking the expiration
+    *				    if the time is Time::NullTTime() then only
+    *				    expired non time based rights are deleted
+    * @param    aParents : ETrue if any Ro's have parents otherwise EFalse
+    * @return   The amount of permissions left in the file
+    * @leave    The function leaves with Symbian OS error code if an
+    *           error occurs
+    */   
+	TInt DeleteExpiredPermissionsL( const TTime& aTime, TBool& aParents );   
+                           
+                           
+    /**
+    * StoreKeyL
+    * 
+    * Writes the key to the store
+    *
+    * @since    3.0
+    * @return   The function leaves with Symbian OS error code if an
+    *           error occurs
+    */
+    void StoreKeyL();
+    
+    /**
+    * GetKeyL
+    * 
+    * Returns the key
+    *
+    * @since    3.0
+    * @return   The function leaves with Symbian OS error code if an
+    *           error occurs
+    */
+    HBufC8* GetKeyL() const;
+
+
+public:
+
+private:
+
+    /**
+    * CreateAndInitializeStoreL
+    * 
+    * Writes the data of index into the store root
+    *
+    * @since    3.0
+    * @param    aRightsStore : Full path filename of the rights store    
+    * @return   The function leaves with Symbian OS error code if an
+    *           error occurs
+    */
+    void CreateAndInitializeStoreL( const TFileName& aRightsStore );
+
+    /**
+    * ExternalizeIndexL
+    * 
+    * Writes the data of index into the store root
+    *
+    * @since    3.0
+    * @return   The function leaves with Symbian OS error code if an
+    *           error occurs
+    */
+    void StoreIndexL( RWriteStream& aStream ) const;
+    
+    /**
+    * InternalizeIndexL
+    * 
+    * Reads the data of the index from the store root
+    *
+    * @since    3.0
+    * @return   The function leaves with Symbian OS error code if an
+    *           error occurs
+    */
+    void FetchIndexL();
+    
+    /**
+    * FetchCommonDataL();
+    *
+    * Reads the common data from the store
+    *
+    */
+    void FetchCommonDataL();
+    
+    /**
+    * FetchKeyL
+    * 
+    * Reads the key from the store
+    *
+    * @since    3.0
+    * @return   The function leaves with Symbian OS error code if an
+    *           error occurs
+    */
+    void FetchKeyL();
+    
+    /*
+    * Default Constructor
+    */ 
+    CDRMRightsData( CDRMCommonData* aData, RFs& aFileServer );
+
+    /*
+    * 2nd phase Constructor
+    *
+    * @param    aRightsStore : Full path filename of the rights store
+    */ 
+    void ConstructL( const TFileName& aRightsStore );
+
+    /*
+    * 2nd phase Constructor
+    *
+    * @param    aRightsStore : Full path filename of the rights store
+    */ 
+    void ConstructL( const TFileName& aRightsStore,
+                     const TDesC8& aKey );
+
+private:
+    RFs& iFileServer;
+
+    CPermanentFileStore* iStore;
+    
+    TBool iKeyExists;    
+    TBuf8<16> iKey;
+    RArray<TDRMUniqueID> iArray;
+    CDRMCommonData* iData;
+    TStreamId iCommonId;
+    TStreamId iKeyId;
+   
+    // Some index data
+    };
+
+#endif      // DRMRIGHTSDATA_H
+            
+// End of File