diff -r 000000000000 -r 95b198f216e5 omadrm/drmengine/server/inc/DRMContextDB.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/omadrm/drmengine/server/inc/DRMContextDB.h Thu Dec 17 08:52:27 2009 +0200 @@ -0,0 +1,451 @@ +/* +* 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 DRMCONTEXTDB_H +#define DRMCONTEXTDB_H + +// INCLUDES + +#include +#include + + +// CONSTANTS + +// MACROS + +// DATA TYPES + +// FORWARD DECLARATIONS +class CDRMRIContext; +class CDRMDomainContext; +class CPermanentFileStore; +class RWriteStream; +class TStreamId; + +// TYPE DEFINITIONS + +// FUNCTION PROTOTYPES + +// CLASS DECLARATION + +/** +* CDRMContextDB implements the rights database required by DRM Engine +* +* @lib RightsServer.dll +* @since 3.0 +*/ + +NONSHARABLE_CLASS( CDRMContextDB ) : public CBase + { +public: // Constructors and destructor + + /** + * NewLC + * + * Creates an instance of the CDRMContextDB class and returns a pointer + * to it. The function leaves the object into the cleanup stack + * + * @since 3.0 + * @param aRightsIssuerContextFile : Full pathname of the ri context file + * @param aDomainContextFile : Full pathname of the domain context file + * @param aFileServer : File server instance to use + * @return Functional CDRMContextDB object, Function leaves if an error + * occurs. + */ + static CDRMContextDB* NewLC( const TFileName& aRightsIssuerContextFile, + const TFileName& aDomainContextFile, + RFs& aFileServer ); + + /** + * NewL + * + * Creates an instance of the CDRMContextDB class and returns a pointer + * to it. + * + * @since 3.0 + * @param aRightsIssuerContextFile : Full pathname of the ri context file + * @param aDomainContextFile : Full pathname of the domain context file + * @param aFileServer : File server instance to use + * @return Functional CDRMContextDB object, Function leaves if an error + * occurs. + */ + static CDRMContextDB* NewL( const TFileName& aRightsIssuerContextFile, + const TFileName& aDomainContextFile, + RFs& aFileServer ); + /** + * OpenLC + * + * Opens the store and creates an instance of the CDRMContextDB class and returns + * a pointer to it. The function leaves the object into the cleanup stack + * + * @since 3.0 + * @param aRightsIssuerContextFile : Full pathname of the ri context file + * @param aDomainContextFile : Full pathname of the domain context file + * @param aFileServer : File server instance to use + * @return Functional CDRMContextDB object, Function leaves if an error + * occurs. + */ + static CDRMContextDB* OpenLC( const TFileName& aRightsIssuerContextFile, + const TFileName& aDomainContextFile, + RFs& aFileServer ); + /** + * OpenL + * + * Opens the store and creates an instance of the CDRMContextDB class and returns + * a pointer to it. + * + * @since 3.0 + * @param aRightsIssuerContextFile : Full pathname of the ri context file + * @param aDomainContextFile : Full pathname of the domain context file + * @param aFileServer : File server instance to use + * @return Functional CDRMContextDB object, Function leaves if an error + * occurs. + */ + static CDRMContextDB* OpenL( const TFileName& aRightsIssuerContextFile, + const TFileName& aDomainContextFile, + RFs& aFileServer ); + + /* + * Destructor + */ + virtual ~CDRMContextDB(); + + +public: // New functions + + + /** + * StoreDomainContextL + * + * Writes the data of the domain context to the stream store + * + * @since 3.0 + * @param aContext : CDRMDomainContext class to externalize + * @return The function leaves with Symbian OS error code if an + * error occurs + */ + void StoreDomainContextL( const CDRMDomainContext& aContext ); + + /** + * FetchDomainContextL + * + * Reads the data of the object from the stream store + * + * @since 3.0 + * @param aContext : a CDRMDomainContext class to internalize to + * with the domain id set to the requested id + * @return The function leaves with Symbian OS error code if an + * error occurs + */ + void FetchDomainContextL( CDRMDomainContext& aContext ) const; + + /** + * FetchDomainContextL + * + * Reads the data of the object from the stream + * + * @since 3.0 + * @param aContext : a CDRMDomainContext class to internalize to + * with the domain id set to the requested id + * @param aStream : stream to read from + * @return The function leaves with Symbian OS error code if an + * error occurs + */ + void FetchDomainContextL( CDRMDomainContext& aContext, + const TInt32& aStream ) const; + + /** + * DeleteDomainContextL + * + * Deletes the data of the object from the stream store + * + * @since 3.0 + * @param aDomainID : the domain to delete + * @return The function leaves with Symbian OS error code if an + * error occurs + */ + void DeleteDomainContextL( const TDesC8& aDomainID ); + + + /** + * StoreRightsIssuerContextL + * + * Writes the data of the rights issuer context to the stream store + * + * @since 3.0 + * @param aPermission : CDRMPermission class to externalize + * @return The function leaves with Symbian OS error code if an + * error occurs + */ + void StoreRightsIssuerContextL( const CDRMRIContext& aContext ); + + /** + * FetchRightsIssuerContextL + * + * Reads the data of the object from the stream store + * + * @since 3.0 + * @param aContext : a CDRMRightsIssuerContext class to internalize to + * with the domain id set to the requested id + * @return The function leaves with Symbian OS error code if an + * error occurs + */ + void FetchRightsIssuerContextL( CDRMRIContext& aContext ) const; + + /** + * FetchRightsIssuerContextL + * + * Reads the data of the object from the stream + * + * @since 3.0 + * @param aContext : a CDRMRightsIssuerContext class to internalize to + * with the domain id set to the requested id + * @param aStream : stream to read from + * @return The function leaves with Symbian OS error code if an + * error occurs + */ + void FetchRightsIssuerContextL( CDRMRIContext& aContext, + const TInt32& aStream ) const; + /** + * DeleteRightsIssuerContextL + * + * Deletes the data of the object from the stream store + * + * @since 3.0 + * @param aRightsIssuerID : the rights issuer to delete + * @return The function leaves with Symbian OS error code if an + * error occurs + */ + void DeleteRightsIssuerContextL( const TDesC8& aRightsIssuerID ); + + + /** + * WhiteListURLExistsL + * + * Goes through all the Rights Issuer contexts and checks if the given URL + * is in one of them. + * + * @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 + */ + TBool WhiteListURLExistsL( const TDesC8& aRightsIssuerURL ); + + + /** + * DeleteExpiredDomainContextsL + * + * Deletes the expired domain contexts + * + * @since 3.0 + * @param aTime : the reference time, all contexts before this time will be + * deleted + * @return The function leaves with Symbian OS error code if an + * error occurs + */ + void DeleteExpiredDomainContextsL( const TTime& aTime ); + + + /** + * DeleteExpiredRightsIssuerContextsL + * + * Deletes the expired domain contexts + * + * @since 3.0 + * @param aTime : the reference time, all contexts before this time will be + * deleted + * @return The function leaves with Symbian OS error code if an + * error occurs + */ + void DeleteExpiredRightsIssuerContextsL( const TTime& aTime ); + + /** + * + * DeleteAllL + * + * Deletes all stored RI and Domain contexts + * + * @since 3.0 + * @param aRightsIssuerContextFile: Full pathname of the ri context file + * @param aDomainContextFile: Full pathname of the domain context file + * + * @return The function leaves with Symbian OS error code if an + * error occurs + * + */ + void DeleteAllL( const TFileName& aRightsIssuerContextFile, + const TFileName& aDomainContextFile ); + + /** + * + * FetchAllRightsIssuerContextsL + * + * Retrieves all stored RI contexts in a pointer array + * + * @since 3.2 + * @param aContexts: RPointerArray for storage of the RI contexts + * + * @return The function leaves with Symbian OS error code if an + * error occurs + * + */ + void FetchAllRightsIssuerContextsL( RPointerArray& aContexts) const; + + /** + * + * UpdateRightsIssuerContextL + * + * Updates the metering status of the RI context + * + * @since 3.2 + * @param aContext: The RI context which has the updated data + * + * @return The function leaves with Symbian OS error code if an + * error occurs + * + */ + void UpdateRightsIssuerContextL( const CDRMRIContext& aContext ); + +private: + + /** + * CreateAndInitializeRIStoreL + * + * Writes the data of index into the store root + * + * @since 3.0 + * @param aRightsStore : Full path filename of the ri context store + * @return The function leaves with Symbian OS error code if an + * error occurs + */ + void CreateAndInitializeRIStoreL( const TFileName& aRIStore ); + + /** + * CreateAndInitializeDomainStoreL + * + * Writes the data of index into the store root + * + * @since 3.0 + * @param aRightsStore : Full path filename of the domain context store + * @return The function leaves with Symbian OS error code if an + * error occurs + */ + void CreateAndInitializeDomainStoreL( const TFileName& aDomainStore ); + + /** + * StoreDomainIndexL + * + * 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 StoreDomainIndexL( RWriteStream& aStream ) const; + + /** + * FetchDomainIndexL + * + * 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 FetchDomainIndexL(); + + /** + * StoreRightsIssuerIndexL + * + * 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 StoreRightsIssuerIndexL( RWriteStream& aStream ) const; + + /** + * FetchRightsIssuerIndexL + * + * 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 FetchRightsIssuerIndexL(); + + /* + * Default Constructor + */ + CDRMContextDB( RFs& aFileServer ); + + /* + * 2nd phase Constructor + * + * @param aRightsStore : Full path filename of the rights store + */ + void ConstructL( const TFileName& aRightsIssuerContextFile, + const TFileName& aDomainContextFile ); + +private: + + NONSHARABLE_CLASS( TContextIndex ) + { + public: + + TBuf8 iContextID; + TInt32 iStreamID; + + static TInt Compare( const TContextIndex& aFirst, + const TContextIndex& aSecond ) + { + return aFirst.iContextID.Compare( aSecond.iContextID ); + }; + + static TBool Match( const TContextIndex& aFirst, + const TContextIndex& aSecond ) + { + if( aFirst.iContextID.Compare( aSecond.iContextID ) ) + { + return EFalse; + } + return ETrue; + }; + + }; + + RFs& iFileServer; + + // File stores + CPermanentFileStore* iDomainStore; + CPermanentFileStore* iRightsIssuerStore; + + // Index arrays + RArray iDomainArray; + RArray iRightsIssuerArray; + + // Some index data + }; + +#endif // DRMCONTEXTDB_H + +// End of File