/*
* Copyright (c) 2002 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: Declaration of class DRMCommon for accessing common
* DRM functions
*
*/
#ifndef DRMCOMMON_H
#define DRMCOMMON_H
#include <e32base.h>
#include <DrmRights.h>
#include <caf/caf.h>
const TUint KDrmMaxContentInfoSize = 512;
// Stub constant
_LIT( KMusDrmProtectedFileName, "protectedfile.mp4" );
// FORWARD DECLARATIONS
class TDataType;
// CLASS DECLARATION
/**
* DRMCommon: provides common DRM functions.
*
* @lib DRMCommon.dll
* @since 2.0
*/
class DRMCommon: public CBase
{
public: // Data Types
enum
{
EPlay = ContentAccess::EPlay,
EDisplay = ContentAccess::EView,
EExecute = ContentAccess::EExecute,
EPrint = ContentAccess::EPrint,
EInstall = ContentAccess::EInstall,
};
enum TConsumeAction
{
EStart,
EFinish,
};
enum
{
EOk = KErrNone,
EGeneralError = -30100,
EUnknownMIME = -30101,
EVersionNotSupported = -30102,
ESessionError = -30103,
ENoRights = KErrCANoRights,
ERightsDBCorrupted = -30105,
EUnsupported = KErrCANotSupported,
ERightsExpired = KErrCANoPermission,
EInvalidRights = -30108,
EPaddingFailed = -30109,
EFileError = -30110
};
enum TContentProtection
{
ENoDCFFile,
EForwardLocked,
ESuperDistributable
};
enum TOMALevel
{
EOMA_None,
EOMA_1_0,
EOMA_2_0
};
enum
{
EForwardLock = 0x0001,
ECombinedDelivery = 0x0002,
ESeparateDelivery = 0x0004,
ESuperDistribution = 0x0008
};
public: // Constructors and destructor
/**
* Two-phased constructor.
*/
IMPORT_C static DRMCommon* NewL(void);
/**
* Destructor.
*/
IMPORT_C virtual ~DRMCommon(void);
public: // New functions
/**
* Version
*
* Returns the version of this API.
*
* @since 2.0
* @return Version of the API
*/
//IMPORT_C static TVersion Version(void);
/**
* ServerVersion
*
* Returns the version of the DRM Engine.
*
* @since 2.0
* @return Version of the DRM Engine
*/
//IMPORT_C static TVersion ServerVersion(void);
/**
* Connect
*
* Connect to the DRM Engine.
*
* @since 2.0
* @return EOk if the connection has been made
*/
IMPORT_C TInt Connect(void);
/**
* Disconnect
*
* Disconnect the current connection.
*
* @since 2.0
* @return EOk if the connection has been disconnected
*/
IMPORT_C TInt Disconnect(void);
/**
* CheckContentRights
*
* Takes a Content URI and a rights specification.
* Checks if the specified rights can be exercised with this content
* by looking up the content URI in the rights database and checking
* the stored rights.
*
* @since 2.0
* @param aContentURI: the content URI of the content to be tested
* @param aRightsSpec: The rights to be checked defined as a bitmask
* combination of EPlay, EDisplay, EExecute and EPrint
* @return EOk if all of the given rights can be exercised, otherwise
* or if the content URI cannot be found, ENoRights
*/
//IMPORT_C TInt CheckContentRights(
// const TDesC8& aContentURI,
// TUint32 aRightsSpec);
/**
* CheckFileRights
*
* Takes a file name and a rights specification. Opens the given file
* and checks if the specified rights can be exercised with this file
* by extracting the content URI from the file, looking up the content
* URI in the rights database and checking the stored rights.
*
* @since 2.0
* @param aFileName: the name of the file to be tested.
* @param aRightsSpec: The rights to be checked defined as a bitmask
* combination of EPlay, EDisplay, EExecute and EPrint
* @return EOk if all of the given rights can be exercised, otherwise
* or if the file is not a DCF file or if the content URI cannot
* be found, ENoRights
*/
//IMPORT_C TInt CheckFileRights(
// const TDesC& aFileName,
// TUint32 aRightsSpec);
/**
* CheckFileRights
*
* Takes a file name and a rights specification. Opens the given file
* and checks if the specified rights can be exercised with this file
* by extracting the content URI from the file, looking up the content
* URI in the rights database and checking the stored rights.
*
* @since 3.0
* @param aFileHandle: file handle to the file.
* @param aRightsSpec: The rights to be checked defined as a bitmask
* combination of EPlay, EDisplay, EExecute and EPrint
* @return EOk if all of the given rights can be exercised, otherwise
* or if the file is not a DCF file or if the content URI cannot
* be found, ENoRights
*/
//IMPORT_C TInt CheckFileRights(
// RFile& aFileHandle,
// TUint32 aRightsSpec);
/**
* IsProtectedContent
*
* Takes a memory buffer containing a file and checks if it is a DCF file
* or a regular file.
*
* @since 2.0
* @param aContent: memory buffer containing a file
* @param aProtection: return parameter, true if the file is a DCF file
* @return EOk if the content could be checked.
*/
//IMPORT_C TInt IsProtectedContent(
// const TDesC8& aContent,
// TBool& aProtection);
/**
* IsProtectedFile
*
* Takes a file name and checks if it is a DCF file or a regular file.
*
* @since 2.0
* @param aFileName: the name of the file to be tested.
* @param aProtection: return parameter, true if the file is a DCF file
* @return EOk if the content could be checked.
*/
IMPORT_C TInt IsProtectedFile(
const TDesC& aFileName,
TBool& aProtection);
/**
* IsProtectedFile
*
* Takes a file name and checks if it is a DCF file or a regular file.
*
* @since 3.0
* @param aFileHandle: handle to the file to be tested.
* @param aProtection: return parameter, true if the file is a DCF file
* @return EOk if the content could be checked.
*/
//IMPORT_C TInt IsProtectedFile(
// RFile& aFileHandle,
// TBool& aProtection);
/**
* GetContentInfo
*
* Takes a memory buffer containing a DCF(or at least the header part
* of it) and returns the protection for this content, the MIME type,
* Content URI and encrypted data length in out parameters.
*
* @since 2.0
* @param aContent: memory buffer containing a DCF
* @param aProtection: return parameter for the type of protection for
* this DCF
* @param aMIMEType: return parameter for the MIME type header field
* @param aContentURI: return parameter for the content URI header field
* @param aDataLength: return parameter for the length of the encrypted
* data
* @return EOk if the information could be extracted from the DCF
*/
//IMPORT_C TInt GetContentInfo(
// const TDesC8& aContent,
// TContentProtection& aProtection,
// HBufC8*& aMIMEType,
// HBufC8*& aContentURI,
// TUint& aDataLength);
/**
* GetFileInfo
*
* Takes the name of a DCF file, opens it and returns the protection for
* this content, the MIME type, Content URI and encrypted data length in
* out parameters.
*
* @since 2.0
* @param aFileName: the name of the file to be inspected
* @param aProtection: return parameter for the type of protection for
* this DCF
* @param aMIMEType: return parameter for the MIME type header field
* @param aContentURI: return parameter for the content URI header field
* @param aDataLength: return parameter for the length of the encrypted
* data
* @return EOk if the information could be extracted from the DCF
*/
//IMPORT_C TInt GetFileInfo(
// const TDesC& aFileName,
// TContentProtection& aProtection,
// HBufC8*& aMIMEType,
// HBufC8*& aContentURI,
// TUint& aDataLength);
/**
* GetFileInfo
*
* Takes the name of a DCF file, opens it and returns the protection for
* this content, the MIME type, Content URI and encrypted data length in
* out parameters.
*
* @since 3.0
* @param aFileHandle: handle to the file to be inspected
* @param aProtection: return parameter for the type of protection for
* this DCF
* @param aMIMEType: return parameter for the MIME type header field
* @param aContentURI: return parameter for the content URI header field
* @param aDataLength: return parameter for the length of the encrypted
* data
* @return EOk if the information could be extracted from the DCF
*/
//IMPORT_C TInt GetFileInfo(
// RFile& aFileHandle,
// TContentProtection& aProtection,
// HBufC8*& aMIMEType,
// HBufC8*& aContentURI,
// TUint& aDataLength);
/**
* GetContentHeader
*
* Takes a memory buffer containing a DCF(or at least the header part of
* it) and a header name and returns the value of the header field in an
* out parameter. Return value specifies if the header has been found.
* Search is case insensitive.
*
* @since 2.0
* @param aContent: memory buffer containing a DCF
* @param aHeaderName: Name of the header to look for
* @param aHeaderValue: return parameter for value of the header
* @return EOk if the header was found
*/
//IMPORT_C TInt GetContentHeader(
// const TDesC8& aContent,
// const TDesC8& aHeaderName,
// HBufC8*& aHeaderValue);
/**
* GetFileHeader
*
* Takes the name of a DCF file and a header name, opens the DCF file and
* returns the value of the header field in an out parameter. Return value
* specifies if the header has been found. Search is case insensitive.
*
* @since 2.0
* @param aFileName: the name of the DCF file to be opened
* @param aHeaderName: Name of the header to look for
* @param aHeaderValue: return parameter for value of the header
* @return EOk if the header was found
*/
//IMPORT_C TInt GetFileHeader(
// const TFileName& aFileName,
// const TDesC8& aHeaderName,
// HBufC8*& aHeaderValue);
/**
* GetFileHeader
*
* Takes the name of a DCF file and a header name, opens the DCF file and
* returns the value of the header field in an out parameter. Return value
* specifies if the header has been found. Search is case insensitive.
*
* @since 3.0
* @param aFileHandle: handle to the DCF file
* @param aHeaderName: Name of the header to look for
* @param aHeaderValue: return parameter for value of the header
* @return EOk if the header was found
*/
//IMPORT_C TInt GetFileHeader(
// RFile& aFileHandle,
// const TDesC8& aHeaderName,
// HBufC8*& aHeaderValue);
/**
* SetContentHeader
*
* Takes a memory buffer containing a DCF(or at least the header part of
* it), a header name and the value for the header field. Sets the header
* field in the optional DCF header. If the header field has not existed
* before, it is created. Any previous value of the header field will be
* overwritten.
*
* @since 2.0
* @param aContent: memory buffer containing a DCF
* @param aHeaderName: Name of the header to set
* @param aHeaderValue: New value of the heade
* @return EOk if the header was set.
*/
//IMPORT_C TInt SetContentHeader(
// HBufC8*& aContent,
// const TDesC8& aHeaderName,
// const TDesC8& aHeaderValue);
/**
* SetFileHeader
*
* Takes the name of a DCF file, a header name and the value for the header
* field. Opens the DCF file, sets the header field in the optional DCF
* header and writes the DCF file. If the header field has not existed
* before, it is created. Any previous value of the header field will be
* overwritten.
*
* @since 2.0
* @param aFileName: the name of the DCF file to be opened
* @param aHeaderName: Name of the header to set
* @param aHeaderValue: New value of the heade
* @return EOk if the header was set.
*/
//IMPORT_C TInt SetFileHeader(
// const TDesC16& aFileName,
// const TDesC8& aHeaderName,
// const TDesC8& aHeaderValue);
/**
* SetFileHeader
*
* Takes the name of a DCF file, a header name and the value for the header
* field. Opens the DCF file, sets the header field in the optional DCF
* header and writes the DCF file. If the header field has not existed
* before, it is created. Any previous value of the header field will be
* overwritten.
*
* @since 3.0
* @param aFileHandle: handle to the DCF file
* @param aHeaderName: Name of the header to set
* @param aHeaderValue: New value of the heade
* @return EOk if the header was set.
*/
//IMPORT_C TInt SetFileHeader(
// RFile& aFileHandle,
// const TDesC8& aHeaderName,
// const TDesC8& aHeaderValue);
/**
* GetSingleRightsObject
*
* Takes a content URI, a local ID and a rights object out parameter.
* Looks up the rights object using the content URI and the local ID
* and returns it in the out parameter.
*
* @since 2.5
* @param aContentURI: the content URI of the content to be tested.
* @param aLocalID: local ID of the rights object
* @param aRightsObject: Out parameter for the rights object. It has
* to be released by the caller.
* @return EOk if the rights object could be retreived, ENoRights if
* no rights object exists.
*/
//IMPORT_C TInt GetSingleRightsObject(
// const TDesC8& aContentURI,
// TUint32 aLocalID,
// CDRMRights*& aRightsObject);
/**
* GetDetailedContentRights
*
* Takes a Content URI and an array out parameter. Fills the rights
* specification array with the available rights by looking up the content
* URI in the rights database and retrieving the stored rights. The array
* parameter will contain a list of pointers to all rights object for the
* given content URI. The rights objects themselves can be distinguished by
* their local ID.
*
* @since 2.5
* @param aContentURI: the content URI of the content to be tested.
* @param aRightsList: Out parameter for the available rights. It has to
* be released by the caller.
* @return EOk if the rights could be retreived, ENoRights if no rights
* object exists.
*/
//IMPORT_C TInt GetDetailedContentRights(
// const TDesC8& aContentURI,
// RPointerArray<CDRMRights>*& aRightsList);
/**
* GetDetailedFileRights
*
* Takes a file name and a rights specification. Opens the given file and
* fills the rights specification array with the available rights by
* looking up the content URI in the rights database and retrieving the
* stored rights. The array parameter will contain a list of pointers to
* all rights object for the given content URI. The rights objects
* themselves can be distinguished by their local ID.
*
* @since 2.5
* @param aFileName: the name of the file to be tested.
* @param aRightsList: Out parameter for the available rights.
* @return EOk if the rights could be retreived, if the file is not a DCF
* file or if the content URI cannot be found, ENoRights.
*/
//IMPORT_C TInt GetDetailedFileRights(
// const TDesC& aFileName,
// RPointerArray<CDRMRights>*& aRightsList);
/**
* GetDetailedFileRights
*
* Takes a file name and a rights specification. Opens the given file and
* fills the rights specification array with the available rights by
* looking up the content URI in the rights database and retrieving the
* stored rights. The array parameter will contain a list of pointers to
* all rights object for the given content URI. The rights objects
* themselves can be distinguished by their local ID.
*
* @since 3.0
* @param aFileHandle: handle to the file to be tested.
* @param aRightsList: Out parameter for the available rights.
* @return EOk if the rights could be retreived, if the file is not a DCF
* file or if the content URI cannot be found, ENoRights.
*/
//IMPORT_C TInt GetDetailedFileRights(
// RFile& aFileHandle,
// RPointerArray<CDRMRights>*& aRightsList);
/**
* GetActiveRights
*
* Takes a Content URI and a rights specification. Finds all rights objects
* associated with given URI and returns a possible active one. The out
* parameters will contain a pointer to the found rights object. The found
* rights object can be expired. The details about expiration and constraints
* of the rights can be retrieved with the CDRMRights::GetRightsInfo function.
*
* @since 2.5
* @param aContentURI: the content URI of the content to be tested.
* @param aRightsSpec: The rights to be checked defined as a bitmask
* combination of EPlay, EDisplay, EExecute and EPrint
* @param aRightsObject: Out parameter for the rights object. It has
* to be released by the caller.
* @return EFullRights, ERestrictedRights, EPreviewRights if a possble active
* rights object was found. ENoRights if no rights object for given
* content URI or permissions.
*/
//IMPORT_C TInt GetActiveRights(
// const TDesC8& aContentURI,
// TUint32 aRightsSpec,
// CDRMRights*& aRightsObject);
/**
* GetContentURIList
*
* Returns a list of all content URIs that have rights in the rights
* database.
*
* @since 2.5
* @param aURIList: Out parameter for the URI list.
* @return Ok if the URI list could be retreived.
*/
//IMPORT_C TInt GetContentURIList(
// RPointerArray<HBufC8>*& aURIList);
/**
* DataTypesCount
*
* Returns the number of previously registered datatypes which are
* supported by the DRM system and associated applications.
*
* @since 2.0
* @param aCount: Out parameter for the datatype count
* @return EOk if the number of datatypes has been returned correctly
*/
//IMPORT_C TInt DataTypesCount(
// TInt& aCount);
/**
* SupportedDataType
*
* Returns a specific datatype which has been registered before by giving an index
*
* @since 2.0
* @param aIndex: Number of the datatype to return
* @param aDataType: Out parameter for the datatype
* @return EOk if the datatype was returned correctly
*/
//IMPORT_C TInt SupportedDataType(
// const TInt aIndex, TDataType& aDataType);
/**
* StaticDataTypesCount
*
* Returns the number of default registered datatypes which are
* supported by the DRM system and associated applications.
*
* @since 2.0
* @param aCount: Out parameter for the static datatype count
* @return EOk if the number of datatypes has been returned correctly
*/
//IMPORT_C TInt StaticDataTypesCount(
// TInt& aCount);
/**
* RegisterDataType
*
* Registers a datatype as a supported datatype.
*
* @since 2.0
* @param aDataType: Datatype to register
* @return EOk if the datatype has been registered
*/
//IMPORT_C TInt RegisterDataType(
// const TDataType& aDataType);
/**
* UnRegisterDataType
*
* Unregisters a datatype via its index.
*
* @since 2.5
* @param aIndex: Number of the datatype to unregister
* @return EOk if the datatype has been unregistered
*/
//IMPORT_C TInt UnRegisterDataType(
// const TInt aIndex);
/**
* SupportedDRMMethods
*
* Returns the supported DRM protection methods and the OMA compliance
* level of the DRM engine
*
* @since 2.0
* @param aDRMMethod: Out parameter, bit mask containing any
* combination of EForwardLock, ECombinedDelivery,
* ESeparateDelivery etc.
* @param aOMALevel: OMA compliance of the DRM engine
* @return DRMCommon error code
*/
//IMPORT_C TInt SupportedDRMMethods(
// TInt& aDRMMethod, TOMALevel& aOMALevel);
/**
* MergeParentAndChild
*
* Merge rights with their parent rights
*
* @since 3.0
* @param aRights Rights to be merged with their parent rights
*/
//IMPORT_C void MergeParentAndChild(CDRMRights* aRights);
protected:
/**
* C++ default constructor.
*/
IMPORT_C DRMCommon(void);
/**
* 2nd phase constructor.
*/
IMPORT_C void ConstructL(void);
/**
* MapErrorCode
*
* Maps the error codes returned by the core engine to DRMCommon
* error codes.
*
* @since 2.5
* @param aCode: core error code
* @return DRMCommon error code.
*/
//IMPORT_C TInt MapErrorCode(
// const TInt aCode);
public: // Stub data
TBool iIsConnected;
/*
* If != KErrNone, next operation will fail with this code
*/
//TInt iForceFailWithCode;
};
#endif // DRMCOMMON_H
// End of File