--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tsrc/drmstub/inc/drmcommon.h Thu Dec 17 08:44:37 2009 +0200
@@ -0,0 +1,697 @@
+/*
+* 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