diff -r 000000000000 -r 95b198f216e5 omadrm/drmengine/server/inc/DRMRightsData.h --- /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 +#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& + 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 iArray; + CDRMCommonData* iData; + TStreamId iCommonId; + TStreamId iKeyId; + + // Some index data + }; + +#endif // DRMRIGHTSDATA_H + +// End of File