omadrm/drmengine/roapstorage/inc/DRMRIContext.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:52:27 +0200
changeset 0 95b198f216e5
permissions -rw-r--r--
Revision: 200949 Kit: 200951

/*
* Copyright (c) 2004 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 the Common Rights Database Data
*
*/


#ifndef DRMRICONTEXT_H
#define DRMRICONTEXT_H

// INCLUDES

#include <e32base.h>
#include <hash.h>
#include "RoapMessage.h"

// CONSTANTS

// MACROS

// DATA TYPES

// FORWARD DECLARATIONS
class RReadStream;
class RWriteStream;

// TYPE DEFINITIONS

// FUNCTION PROTOTYPES

// CLASS DECLARATION

/**
*  CDRMRIContext implements a datatype for the common data for a single
*  content identifier
*
*  @lib RightsServer.dll
*  @since 3.0
*/

class CDRMRIContext : public CBase 
    {
    
    public: // Constructors and destructor
        
        /**
        * NewLC
        *
        * Creates an instance of the CDRMRIContext class and returns a pointer 
        * to it. The function leaves the object into the cleanup stack
        *
        * @since    3.0
        * @param    aRIID : Rights issue identifier SHA1_HASH
        * @param    aRiAlias: RI Alias, extracted from RoapTrigger        
        * @param    aVersion : Selected version KMaxRoapVersionLength
        * @param    aAlgorithms : Algorithm strings
        * @param    aRIURLs : Rights issuer urls,
        * @param    aRightsIssuerURL: An URL that can be used for contactig the RI
        *                             (e,g, in the case where RI Context is expired)
        * @param    aExpiryTime : Expiration time
        * @param    aChain: The RI ceritificate chain
        * @param    aResponses: The OCSP responses for validating certificates
        *                       in the RI certificate chain
        * @param    aSelectedDeviceRoot: The selected certificate chain that is
        *           used for wrapping the REKs and Domain Keys. Presented as a
        *           public key hash of the root certificate
        * @param    aIsMeteringAllowed: Wheter metering is allowed for this RI
        *  
        * @return   Functional CDRMRIContext object, Function leaves if an error 
        *           occurs.
        */
        IMPORT_C static CDRMRIContext* NewLC( const TDesC8& aRIID,
                                              const TDesC8& aRiAlias,
                                              const TDesC8& aVersion,
                                              const RPointerArray< HBufC8 >& aAlgorithms,
                                              const RPointerArray< HBufC8 >& aRIURLs,
                                              const TDesC8& aRightsIssuerURL,
                                              const TTime& aExpiryTime,
                                              const RPointerArray< HBufC8 >& aChain,
                                              const RPointerArray< HBufC8 >& aResponses,
                                              const TUint8 aDeviceCertCached,
                                              const TDesC8& aSelectedDeviceRoot,
                                              const TUint8 aIsMeteringAllowed = ETrue );
        
        /**
        * NewL
        *
        * Creates an instance of the CDRMRIContext class and returns a pointer 
        * to it.
        *
        * @since    3.0
        * @param    aRIID : Rights issue identifier SHA1_HASH
        * @param    aRiAlias: RI Alias, extracted from RoapTrigger            
        * @param    aVersion : Selected version KMaxRoapVersionLength
        * @param    aAlgorithms : Algorithm strings
        * @param    aRIURLs : Rights issuer urls
        * @param    aExpiryTime : Expiration time
        * @param    aChain: The RI ceritificate chain
        * @param    aResponses: The OCSP responses for validating certificates
        *                       in the RI certificate chain        
        * @param    aSelectedDeviceRoot: The selected certificate chain that is
        *           used for wrapping the REKs and Domain Keys. Presented as a
        *           public key hash of the root certificate
        * @param    aIsMeteringAllowed: Wheter metering is allowed for this RI        
        *  
        * @return   Functional CDRMRIContext object, Function leaves if an error 
        *           occurs.
        */
        IMPORT_C static CDRMRIContext* NewL( const TDesC8& aRIID,
                                             const TDesC8& aRiAlias,        
                                             const TDesC8& aVersion,
                                             const RPointerArray< HBufC8 >& aAlgorithms,
                                             const RPointerArray< HBufC8 >& aRIURLs,
                                             const TDesC8& aRightsIssuerURL,
                                             const TTime& aExpiryTime,
                                             const RPointerArray< HBufC8 >& aChain,
                                             const RPointerArray< HBufC8 >& aResponses,
                                             const TUint8 aDeviceCertCached,
                                             const TDesC8& aSelectedDeviceRoot,
                                             const TUint8 aIsMeteringAllowed = ETrue );

        /**
        * NewLC
        *
        * Creates an instance of the CDRMRIContext class and returns a pointer 
        * to it. The function leaves the object into the cleanup stack
        *
        * @since    3.0
        * @return   Functional CDRMRIContext object, Function leaves if an error 
        *           occurs.
        */
        IMPORT_C static CDRMRIContext* NewLC();
        
        /**
        * NewL
        *
        * Creates an instance of the CDRMRIContext class and returns a pointer 
        * to it.
        *
        * @since    3.0
        * @return   Functional CDRMRIContext object, Function leaves if an error 
        *           occurs.
        */
        IMPORT_C static CDRMRIContext* NewL();

        /**
        * Destructor
        */
        IMPORT_C virtual ~CDRMRIContext();
        
  public: // Get and set functions
        
        /**
        * RIID
        * 
        * Returns a constant TDesC8 reference to the rights issuer id
        *
        * @since    3.0
        * @return   a const reference to the rights issuer id
        */        
        IMPORT_C const TDesC8& RIID() const;
        
        /**
        * RIAlias
        * 
        * Returns a constant TDesC8 reference to the rights issuer alias
        *
        * @since    3.2
        * @return   a const reference to the rights issuer alias
        */
        IMPORT_C const TDesC8& RIAlias() const;
        
        
        /**
        * Version
        * 
        * Returns a constant TDesC8 reference to the version
        *
        * @since    3.0
        * @return   a const reference to the rights issuer id
        */        
        IMPORT_C const TDesC8& Version() const;
        

        /**
        * Algorithms
        * 
        * Returns a constant reference to the algorithm pointer array
        *
        * @since    3.0
        * @return   a const reference to a pointer array with the algorithms
        */        
        IMPORT_C const RPointerArray< HBufC8 >& Algorithms() const;  


        /**
        * RIURLs
        * 
        * Returns a constant reference to the url pointer array
        *
        * @since    3.0
        * @return   a const reference to a pointer array with the right issuer
        *           urls
        */        
        IMPORT_C const RPointerArray< HBufC8 >& RIURLs() const;
        
        
        /**
        * RIURLs
        * 
        * Returns a constant reference to the rights issuer url
        *
        * @since    3.0
        * @return   a const reference to a the rights issuer url
        */
        IMPORT_C const TDesC8& RightsIssuerURL() const;


        /**
        * ExpiryTime
        *
        * Returns a constant reference to the expiration time
        *
        * @since    3.0
        * @return   a cont reference to the expiration time
        */
        IMPORT_C const TTime ExpiryTime() const;

        
        /**
        * CertificateChain
        * 
        * Returns a constant reference to the algorithm pointer array
        *
        * @since    3.0
        * @return   a const reference to a pointer array with the algorithms
        */       
        IMPORT_C const RPointerArray< HBufC8 >& CertificateChain() const;


        /**
        * OCSPResponse
        * 
        * Returns a constant reference to the algorithm pointer array
        *
        * @since    3.0
        * @return   a const reference to a pointer array with the algorithms
        */        
        IMPORT_C const RPointerArray< HBufC8 >& OCSPResponse() const;
        

        /**
        * DeviceCertCached
        * 
        * Returns an indication if the RI has stored the Device certificate or not
        *
        * @since    3.0
        * @return   EFalse or ETrue
        */         
        IMPORT_C TUint8 DeviceCertCached() const;
        
        /**
        * SelectedDeviceRoot
        * 
        * Returns a constant TDesC8 reference to the selected Device root
        *
        * @since    3.0
        * @return   a const reference to the selected Device root
        */      
        IMPORT_C const TDesC8& SelectedDeviceRoot() const;

        /**
        * IsMeteringAllowed
        * 
        * Checks wheter metering is allowed for a this RightsIssuer
        *
        * @since    3.2
        */        
        IMPORT_C TUint8 IsMeteringAllowed() const; 

        /**
        * SetRIIDL
        * 
        * Sets the rights issuer identifier, overwrites the previous one 
        * if one exits
        *
        * @since    3.0
        * @param    aRIID : Rights Issuer Identifier        
        * @return   The function leaves with Symbian OS error code if an
        *           error occurs
        */        
        IMPORT_C void SetRIIDL( const TDesC8& aRIID );


        /**
        * SetRightsIssuerURLL
        * 
        * Sets the RI URL, deletes the old one
        *
        * @since    3.0
        * @param    aRightsIssuerURL : a reference to the new rights issuer url
        */ 
        IMPORT_C void SetRightsIssuerURLL( const TDesC8& aRightsIssuerURL );        
        
         /**
        * SetVersionL
        * 
        * Sets the version, overwrites the previous one if one exits
        *
        * @since    3.0
        * @param    aVersion : version string       
        * @return   The function leaves with Symbian OS error code if an
        *           error occurs
        */        
        IMPORT_C void SetVersionL( const TDesC8& aRIID );    
           

        /**
        * SetAlgorithmsL
        * 
        * Sets the algorithms, deletes the old ones
        *
        * @since    3.0
        * @param    aAlgorithms : a pointer array with the used algorithms
        * @return   a pointer to the content id or null
        */        
        IMPORT_C void SetAlgorithmsL( const RPointerArray< HBufC8 >& aAlgorithms ); 
        
        
        /**
        * SetRIURLsL
        * 
        * Sets the algorithms, deletes the old ones
        *
        * @since    3.0
        * @param    aRIURLs : a pointer array with the rights issuer urls       
        * @return   a pointer to the content id or null
        */        
        IMPORT_C void SetRIURLsL( const RPointerArray< HBufC8 >& aRIURLs );        
             
        /**
        * SetExpiryTimeL
        * 
        * Sets the expiration time to the given value
        *
        * @since    3.0
        * @param    aExpiryTime : the expiration time        
        * @return   The function leaves with Symbian OS error code if an
        *           error occurs
        */        
        IMPORT_C void SetExpiryTimeL( const TTime& aExpiryTime );

         /**
        * SetCertificateChainL
        * 
        * Sets the certificate chain
        *
        * @since    3.0
        * @param    aChain : the certificate chain        
        * @return   The function leaves with Symbian OS error code if an
        *           error occurs
        */          
        IMPORT_C void SetCertificateChainL( const RPointerArray< HBufC8 >& aChain );
        
         /**
        * SetOCSPResponseL
        * 
        * Sets the OCSP responses
        *
        * @since    3.0
        * @param    aResponses : the OCSP responses      
        * @return   The function leaves with Symbian OS error code if an
        *           error occurs
        */         
        IMPORT_C void SetOCSPResponseL( const RPointerArray< HBufC8 >& aResponses );
        
         /**
        * SetDeviceCertCached
        * 
        * Sets the indication whether the RI has stored the Device public key or not
        *
        * @since    3.0
        * @param    aIsCached : The certificate caching indication (ETrue/EFalse)     
        */         
        IMPORT_C void SetDeviceCertCached( TUint8& aIsCached );

        /**
        * WhiteListURLExistsL
        * 
        * Checks the white list to see if the url is in the list
        *
        * @since    3.0
        * @param    aURL : the URL to look for       
        * @return   ETrue if the url is in the white list
        *           EFalse if it is not
        */    
        IMPORT_C TBool WhiteListURLExistsL( const TDesC8& aURL ) const;
        
        
        /**
        * SetSelectedDeviceRoot
        * 
        * Sets the selected Device root, overwrites the previous one 
        * if one exits
        *
        * @since    3.0
        * @param    aSelectedDeviceRoot : Hash of the root certificate public key
        */        
        IMPORT_C void SetSelectedDeviceRoot( const TDesC8& aSelectedDeviceRoot );

        /**
        * SetMeteringStatus
        * 
        * Sets the value for metering to be enabled or disabled
        *
        * @since    3.2
        * @param    aIsAllowed : ETrue if set to allowed, EFalse if not allowed
        */        
        IMPORT_C void SetMeteringStatus( const TBool aIsAllowed );               
                     
    public: // Storing functions
        /**
        * ExternalizeL
        * 
        * Writes the data of the object into the stream
        *
        * @since    3.0
        * @param    aStream : the output stream to write to
        * @return   The function leaves with Symbian OS error code if an
        *           error occurs
        */
        IMPORT_C void ExternalizeL( RWriteStream& aStream ) const;
        
        /**
        * InternalizeL
        * 
        * Reads the data of the object from the stream
        *
        * @since    3.0
        * @param    aStream : the output stream to write to
        * @return   The function leaves with Symbian OS error code if an
        *           error occurs
        */
        IMPORT_C void InternalizeL( RReadStream& aStream );   


        /**
        * ImportL
        * 
        * Reads the data of the object from the descriptor and initialized the 
        * object accordingly
        *
        * @since    3.0
        * @param    aBuffer : the buffer containing the data of the imported object
        * @return   None, The function leaves with Symbian OS error code if an
        *           error occurs
        */
        IMPORT_C void ImportL( const TDesC8& aBuffer );
    
        /**
        * ExportL
        * 
        * Writes the data of the object into an HBufC8 and returns a pointer
        * to it. The caller is responsible for deleting the object.
        *
        * @since    3.0
        * @return   Returns an HBufC8* containing the data of the object,
        *           The function leaves with Symbian OS error code if an
        *           error occurs
        */
        IMPORT_C HBufC8* ExportL() const; 
       
        
        /**
        * Size
        *
        * Returns the size of the externalized object
        *
        * @since    3.0
        * @return   the amount of bytes the externalize object occupies
        */           
        IMPORT_C TInt Size() const;
        
    private:
        /**
        * Default constructor
        */
        CDRMRIContext();    
    
        /**
        * ConstructL
        *
        * Second phase constructor
        *
        * @since    3.0
        * @param    aRIID : Rights issuer identifier SHA1_HASH
        * @param    aRiAlias : Rights issuer alias from RoapTrigger        
        * @param    aVersion : Selected version KMaxRoapVersionLength
        * @param    aAlgorithms : Algorithm strings
        * @param    aRIURLs : Rights issuer urls,
        * @param    aRightsIssuerURL: An URL that can be used for contactig the RI
        *                             (e,g, in the case where RI Context is expired)
        * @param    aExpiryTime : Expiration time
        * @param    aChain: The RI ceritificate chain
        * @param    aResponses: The OCSP responses for validating certificates
        *                       in the RI certificate chain
        * @param    aSelectedDeviceRoot: The selected certificate chain that is
        *           used for wrapping the REKs and Domain Keys. Presented as a
        *           public key hash of the root certificate
        * @param    aIsMeteringAllowed: Wheter metering is allowed for this RI
        *        
        * @return   Functional CDRMRIContext object, Function leaves if an error 
        *           occurs.
        */  
        void ConstructL( const TDesC8& aRIID,
                         const TDesC8& aRiAlias,
                         const TDesC8& aVersion,
                         const RPointerArray< HBufC8 >& aAlgorithms,
                         const RPointerArray< HBufC8 >& aRIURLs,
                         const TDesC8& aRightsIssuerURL,
                         const TTime& aExpiryTime,
                         const RPointerArray< HBufC8 >& aChain,
                         const RPointerArray< HBufC8 >& aResponses,
                         const TUint8 aDeviceCertCached,
                         const TDesC8& aSelectedDeviceRoot,
                         const TUint8 aIsMeteringAllowed );

        /**
        * Assignment operator - Prevented
        */
        CDRMRIContext& operator =( const CDRMRIContext& );    
    
        /**
        * Copy constructor - Prevented
        */
        CDRMRIContext( const CDRMRIContext& );                

        /**
        * WriteInt64L
        * 
        * Writes the 64 bit integer to the stream
        *
        * @since    3.0
        * @param    aWrite : the 64 bit integer to write
        * @param    aStream : the output stream to write to
        * @return   The function leaves with Symbian OS error code if an
        *           error occurs
        */
        void WriteInt64L( const TInt64& aWrite, RWriteStream& aStream ) const;

        /**
        * ReadInt64L
        * 
        * Reads the 64 bit integer from the stream
        *
        * @since    3.0
        * @param    aRead : the 64 bit integer read
        * @param    aStream : the output stream to write to
        * @return   The function leaves with Symbian OS error code if an
        *           error occurs
        */
        void ReadInt64L( TInt64& aRead, RReadStream& aStream ); 


    private: // Internal Data
    
        // Rights Issuer identifier
        TBuf8<SHA1_HASH> iRIID;
        
        // Rights Issuer Alias
        HBufC8* iRiAlias;
        
        // Selected Version
        TBuf8<Roap::KMaxRoapVersionLength> iVersion;
        
        // Selected Algorithms
        RPointerArray< HBufC8 > iAlgorithms;
        
        // Domain name white list
        RPointerArray< HBufC8 > iRIURLs;
        
        // Rights issuer URL
        HBufC8* iRightsIssuerURL;
        
        // Rights issuer context expiry time
        TTime iExpiryTime;

        // Rights issuer certificate chain        
        RPointerArray<HBufC8> iCertificateChain;

        // OCSP responses for validating certificates       
        RPointerArray<HBufC8> iOcspResponse;

        // Certificate caching indication (has an RI stored the Device certificate)        
        TUint8 iDeviceCertCached;
        
        // The selected Device certificate chain
        TBuf8<SHA1_HASH> iSelectedDeviceRoot;
        
        // The status of metering allowance
        TUint8 iIsMeteringAllowed;
    };

#endif      // DRMRICONTEXT_H   
            
// End of File