inc/DRMHelperServer.h
author Shabe Razvi <shaber@symbian.org>
Fri, 17 Sep 2010 17:32:40 +0100
branchRCL_3
changeset 78 b72c2d56e34a
parent 0 95b198f216e5
permissions -rw-r--r--
Re-merge fixes for Bug 1993 and Bug 2121

/*
* 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:  the server implementation of DRM Helper
*
*/


#ifndef DRMHELPERSERVER_H
#define DRMHELPERSERVER_H

// INCLUDES
#include <e32base.h>
#include "DRMHelperCommon.h"
#include <DRMEventObserver.h>
#include <caf/caf.h>
#include <DRMRightsClient.h> // RDRMRightsClient
// DATA TYPES
// FORWARD DECLARATIONS
class CEndTimeBased;
class CEndTimeFactory;
class RWriteStream;
class RReadStream;
class CDRMNotifier;
class CIdleObserver;
class CDRMRights;
class CConfigObserver;
class CDRMPermission;
class CEnvironmentChangeNotifier;

// CLASS DECLARATION
class TTimeBased
    {
    public:
        void SetStart(const TTime& aStart) {iStartTime = aStart;};
        void SetEnd(const TTime& aEnd) {iEndTime = aEnd;};
        const TTime& StartTime(){return iStartTime;};
        const TTime& EndTime(){return iEndTime;};
    private:
        TTime iStartTime;
        TTime iEndTime;
    };


/**
*  This class implements the DRM5 Helper Server functionality.
*
*  @lib DRMHelperServer.exe
*  @since S60Rel3.0
*/


class CDRMHelperServer : public CServer2 , MDRMEventObserver
    {
    public:  // Constructors and destructor
        
         /**
         * Two-phased constructor.
         * @since S60Rel3.0
         * @return Pointer to newly created server instance. And
         *  push the oject into cleanup stack
         */
        static CDRMHelperServer* NewLC();

        /**
         * Destructor.
         * @since S60Rel3.0
         */
        ~CDRMHelperServer();


        
    public: // New functions

        /**
         * Startup starts the actual DRM Helper server after initializing
         * the cleanup stack and active scheduler.
         * @since S60Rel3.0
         * @return system error code if error happens
         */
        static TInt Startup();

        /**
         * HandleExpiredL handle expiration case for one item.
         * @since S60Rel3.0
         * @param aUri the specific content uri for this item.
         * @param aTimes the times that this case has been informed .
         */
        void HandleExpiredL( CEndTimeBased*& aItem );

        /**
         * HandleIdleL inform all the cases that right is about to expire
         * @since S60Rel3.0
         */
        void HandleIdleL();

        /**
         * UpdateL update items
         * @since S60Rel3.0
         * @param aUri the specific content uri for this item.
         * @param aPermType permission type
         * @param aRegType regist type
         * @param aAutoType automatic type
         */
        void UpdateL();
        void UpdateL( const TDesC8& aUri );
        void UpdateL( const TDesC8& aUri , const TUint8& aPermType );
        void UpdateL( const TDesC8& aUri , const TUint8& aPermType , const TUint8& aRegType );
        void UpdateL( 
                const TDesC8& aUri , 
                const TUint8& aPermType , 
                const TUint8& aRegType , 
                const TUint8& aAutoType );

        /**
         * RegisterL register one item with specific content uri.
         * @since S60Rel3.0
         * @param aUri the specific content uri for this item.
         * @param aPermType permission type
         * @param aRegType regist type
         * @param aAutoType automatic type
         */
        void RegisterL( 
                        const TDesC8& aUri , 
                        const TUint8& aPermType , 
                        const TUint8& aRegType , 
                        const TUint8& aAutoType );


        /**
         * IsRegistered register one item with specific content uri.
         * @since S60Rel3.0
         * @param aUri the specific content uri for this item.
         * @param aPermType permission type
         * @param aRegType regist type
         * @param aAutoType automatic type
         * @return ETrue if registered, otherwise EFalse
         */
        TBool IsRegistered(
                        const TDesC8& aUri , 
                        const TUint8& aPermType , 
                        const TUint8& aRegType , 
                        const TUint8& aAutoType );
        /**
         * IsRegistered register one item with specific content uri.
         * @since S60Rel3.0
         * @param aUri the specific content uri for this item.
         * @param aPermType permission type
         * @param aRegType regist type
         * @return ETrue if registered, otherwise EFalse
         */
        TBool IsRegistered(
                        const TDesC8& aUri , 
                        const TUint8& aPermType , 
                        const TUint8& aRegType  );                


        /**
         * IsRegistered register one item with specific content uri.
         * @since S60Rel3.0
         * @param aUri the specific content uri for this item.
         * @param aRegType regist type
         * @return ETrue if registered, otherwise EFalse
         */
        TBool IsRegistered2(
                        const TDesC8& aUri , 
                        const TUint8& aRegType,
                        const TUint8& aAutoType  );

        /**
         * RemoveL remove one item with specific content uri. 
         * @since S60Rel3.0
         * @param aPermType permission type
         * @param aRegType regist type
         * @param aAutoType automatic type
         * @param aUri the specific content uri for this item.
         */
        void RemoveL(
                        const TDesC8& aUri , 
                        const TUint8& aPermType , 
                        const TUint8& aRegType , 
                        const TUint8& aAutoType );

        /**
         * StoreL store the list into data file
         * @since S60Rel3.0
         */
        void StoreL();

        /**
         * RestoreL restore the list from data file 
         * @since S60Rel3.0
         */
        void RestoreL();

        /**
         * ExternalizeL externalize the list into data file
         * @param aStream the data file stream.
         * @since S60Rel3.0
         */
        void ExternalizeL(RWriteStream& aStream) const;

        /**
         * InternalizeL internalize the list from data file
         * @param aStream the data file stream.
         * @since S60Rel3.0
         */
        void InternalizeL(RReadStream& aStream);

        /**
         * RemoveAllL remove all the items in the list
         * @since S60Rel3.0
         */
        void RemoveAllL();

        /**
         * GetNotificationL register one item to notifier in order to get notification if rights changed
         * @since S60Rel3.0
         * @param aUri the content uri for the item.
         */
        void GetNotificationL(const TDesC8& aUri);

        /**
         * RemoveNotificationL unregister item from notifier
         * @since S60Rel3.0
         * @param aUri the content uri for the item.
         */
        void RemoveNotificationL(const TDesC8& aUri);

        /**
         * UiTimeChanged 
         * 
         * callback function for CEnvironmentChangeNotifier when UI time is changed 
         * @since S60Rel2.6
         * @param aPointer a Helper Server instance
         */        
        static TInt UiTimeChanged(void* aPointer);

    public: // Functions from base classes
         /**
         * HandleEventL from MDRMEventObserver
         * @since S60Rel3.0
         * @param aEvent an event from DRM notifier
         */
        void HandleEventL( MDRMEvent* aEvent ); 
    protected:  // New functions
        
    protected:  // Functions from base classes
        //class CServer
        /**
         * RunError.
         * @since S60Rel3.0
         * @param aError Error code from RunL function.
         * @return An error is returned if RunError() cannot process the
         * error.
         */
        TInt RunError( TInt aError );
        
    private:
        /**
         * C++ default constructor.
         * @since S60Rel3.0
         */
        CDRMHelperServer();
        
        /**
         * By default Symbian 2nd phase constructor is private.
         * @since S60Rel3.0
         */
        void ConstructL();

        /**
         * @function PanicClient
         * @semantics panic the client
         * @param aMessage the message channel to the client
         * @param aReason the reason code for the panic.
         */
        static void PanicClient(const RMessage2& aMessage, TDRMHelperServPanic aReason);

        /*!
         * @function PanicServer
         * @semantics panic the server
         * @param aReason the reason code for the panic.
         */
        static void PanicServer(TDRMHelperServPanic aReason);

        /**
         * StartupL called by StartUp
         * @since S60Rel3.0 
         */
        static void StartupL();

        /**
         * CheckExpiration check the expiration info for one content uri
         * @since S60Rel3.0
         * @param aUri content uri.
         * @param aEndTime end time for rights.
         * @param aPermType permission type
         * @param aRegType regist type
         * @return CDRMRights::EFullRights or DRMCommon::ENoRights or EOk
         */
        void CheckExpirationL( 
                const TDesC8& aUri , 
                const TUint8& aPermType , 
                const TUint8& aRegType , 
                TTime& aEndTime );

        /**
         * SetKeyValueL set key value for CenRep structure
         * @since S60Rel3.0
         * @param aKeyValue key value.
         */
        void SetKeyValueL( const TDesC8& aKeyValue , const TUint8& aRegType );
        
        /**
         * FormatKeyValueL format key value for CenRep structure
         * 
         * @since S60Rel3.0
         * @param aBuf key value. it is pushed into cleanup stack
         * @param aUri the specific content uri for this item.
         * @param aTimes the times that this case has been informed.
         * @param aMark 'E' if expired 'V' if about to expire
         */
        void FormatKeyValueLC( HBufC8*& aBuf , CEndTimeBased*& aItem , const TDesC8& aMark );

        /**
         * CheckPermission get time based info from permission
         * 
         * @since S60Rel3.0
         * @param aPermission permission from DRM Rights database
         * @param aPermType permission type
         * @param aTime to store start and end time
         * @param aInterval to store time interval
         * @param aIndividual to check invididual constraints
         * @return 
         */        
        void CheckPermission(
                CDRMPermission* aPermission ,
                const TUint8& aPermType , 
                TTimeBased& aTime , 
                TTimeIntervalSeconds& aInterval,
                const RPointerArray<HBufC8>& aIndividual );
        
        ContentAccess::TIntent MapPermissionType(TUint8 aPermType);
    private: // Functions from base classes
        // Class CServer
        /** 
         * NewSessionL
         * @since S60Rel3.0
         */
        CSession2* NewSessionL( const TVersion& aVersion,
                                       const RMessage2& aMessage ) const;
        
    public:     // Data
        //opcodes used in message passing between client and server
        enum TDRMHSServiceType
            {
            EActive = 101,
            EPassive = 102
            };
    protected:  // Data
        
    private:    // Data
        CEndTimeFactory* iEndTimeFactory;  
        CDRMNotifier* iNotifier;
        CIdleObserver* iIdleObserver;
        CEnvironmentChangeNotifier* iUiTimeNotifier;
        RFs iFs;
        RDRMRightsClient iDrm;
    public:     // Friend classes
        
    protected:  // Friend classes
        
    private:    // Friend classes

};



#endif      // DRMHELPERSERVER_H   
            
// End of File