omadrm/drmengine/server/inc/DRMRightsServer.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 16 Apr 2010 15:14:55 +0300
changeset 23 493788a4a8a4
parent 0 95b198f216e5
child 48 c68061d56109
permissions -rw-r--r--
Revision: 201011 Kit: 201015

/*
* 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:  DRM3 Engine manages all DRM related database operations.
*
*/


#ifndef CDRMRIGHTSSERVER_H
#define CDRMRIGHTSSERVER_H

//  INCLUDES
#include <e32base.h>
#include <f32file.h>
#include <abclient.h>
#include "drmcommonclientserver.h"
#include "DRMReplayCache.h"
#include "drmmeteringdb.h"
#include "DRMClockClient.h"
#include "dbwatcher.h"
#include "procwatcher.h"
#include "watcherobserver.h"

// FORWARD DECLARATIONS
class CDRMRightsDB;
class CDRMNotifier;
class CDRMClock;
class CDRMXOma;
class CDRMBackupObserver;
class CDRMBackup;
class RMobilePhone;

// CLASS DECLARATION

/**
*  This class implements the DRM5 Rights Server functionality.
*
*  @lib RightsServer.exe
*  @since S60Rel2.5
*/
NONSHARABLE_CLASS( CDRMRightsServer ) : public CServer2, public MWatcherObserver
    {
    public:  // Constructors and destructor

        /**
         * Two-phased constructor.
         * @since S60Rel2.5
         * @return Pointer to newly created server instance.
         */
        static CDRMRightsServer* NewL();

        /**
         * Destructor.
         * @since S60Rel2.5
         */
        ~CDRMRightsServer();

    public: // New functions

        /**
        * This method returns a handle to DRM Notifier.
        * @since S60Rel2.6
        * @return Handle to DRM Notifier.
        */
        CDRMNotifier& Notifier();

        /**
        * This method starts the ROAP storage server
        *
        * @since S60Rel3.0
        */
        void StartRoapStorageL();

        /**
        * This method returns the handle to the rights database.
        *
        * @since S60Rel2.6
        * @return Handle to the rights database.
        */
        CDRMRightsDB& Database();

        RFs& FileServerSession();

        /**
        * This method returns the handle to the metering database.
        *
        * @since S60 3.2
        * @return Handle to the metering database.
        */
        RDrmMeteringDb& MeteringDatabase();

        RDRMReplayCache& ReplayCache();

        /**
        * List of the contents which may have rights objects on the way
        *
        * @since 2.6
        * @return
        */
        RPointerArray<CDRMXOma>& XOmaHeaders( void );

        /**
        * This function is used to get the secure time.
        *
        * @since S60Rel2.5
        * @param aTime Out-parameter where the time is stored.
        * @return Truth value: Is the time a secure time or not.
        */
        TBool GetSecureTime( TTime& aTime ) const;

        /**
         *
         */
        const TDesC& GetIMEIL();

        /**
         *
         */
        const CDRMPointerArray<HBufC8>& GetIMSIL();

        /**
        * This function is used to handle backup restore events for
        * the DRM system
        */
        void HandleBackupEventL( TInt aBackupEvent );

        /**
        * Checks if a content ID is in the list of currently consumed contents
        * with count constraints
        *
        * @since 3.0
        * @param aContentId content ID to search for
        * @return ETrue if the content ID is in the list
        */
        TBool HasActiveCountConstraint( const TDesC8& aContentId );

        /**
        * Removes a content ID from the list of currently consumed contents
        * with count constraints
        *
        * @since 3.0
        * @param aContentId content ID to remove
        */
        void RemoveActiveCountConstraint( const TDesC8& aContentId );

        /**
        * Adds a content ID to the list of currently consumed contents
        * with count constraints
        *
        * @since 3.0
        * @param aContentId content ID to add
        */
        void AddActiveCountConstraintL( const TDesC8& aContentId );

        /**
        * Import rights objects on startup
        *
        * @since 3.0
        * @param aImportDir Directory to import from
        */
        void ImportRightsObjectsL( const TDesC& aImportDir );

        /**
         * Stop watching the DCF repository server and the rights DB
         * @since 3.1
         */
        void StopWatchingL();

    public: // Functions from base classes

        //class MBackupOperationObserver

        /**
         * HandleNotifyL
         * @since S60Rel2.5
         * @param aBackupOperationAttributes Event related attributes.
         */
        void HandleNotifyL(const TUid aUid, const TDesC& aKey,
            const TDesC& aValue);

        //class MWatcherObserver

        /**
         * Called when the RDB has been modified
         *
         * @since S60 3.0
         * @param aObject Changed directory
         */
        void WatchedObjectChangedL( const TDesC& aObject );

    protected:  // New functions

    protected:  // Functions from base classes

        //class CServer
        /**
         * RunError.
         * @since S60Rel2.5
         * @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 S60Rel2.5
         */
        CDRMRightsServer();

        /**
         * By default Symbian 2nd phase constructor is private.
         * @since S60Rel2.5
         */
        void ConstructL();

        /**
         * This method fetches the database key and stores
         * it to the given descriptor.
         * @since S60Rel2.5
         * @param aKey Descriptor where the key is stored.
         */
        void GetDbKeyL( TDRMKey& aKey );

        /**
         * This method generates the actual key from key seed.
         * @since S60Rel2.5
         * @param aKeySeed Key seed.
         * @param aKey     The key produced.
         */
        void GenerateKeyL( HBufC*& aKeySeed,
                           TDRMKey& aKey ) const;


        void StartThreadL( const TDesC& aThreadName,
                           TThreadFunction aFunc,
                           RSemaphore& aSemaphore );


        void AppendExtendedIndividualConstraintsL(RMobilePhone* aMobilePhone = NULL);
            static void Release(TAny* aIndividualConstraintExtension);

    private: // Functions from base classes
        // Class CServer
        /**
         * NewSessionL
         * @since S60Rel2.5
         */
        CSession2* NewSessionL( const TVersion& aVersion,
                                const RMessage2& aMessage) const;

    public:     // Data

    protected:  // Data

    private:    // Data
        CDRMRightsDB* iDb;

        CDRMNotifier* iNotifier;

        RFs iFs;
        RDRMReplayCache iCache;
        RDrmMeteringDb iMeteringDb;
        RDRMClockClient iClock;
        RPointerArray<CDRMXOma>* iXOmaHeaders;
        RPointerArray<HBufC8> iActiveCountConstraints;

        HBufC* iIMEI;

        // Backup Observer
        CDRMBackupObserver* iBackupObserver;

        // BackupHandler
        CDRMBackup* iBackupHandler;

        // Backup client
        conn::CActiveBackupClient* iActiveBackupClient;

        // RDB Watcher
        CDbWatcher* iDbWatcher;

        // Peer process watcher
        CProcWatcher* iProcWatcher;

        // Watching causes a restart
        TBool iArmed;

        CDRMPointerArray<HBufC8>* iIMSI;
        TBool iGetImsi;

    public:     // Friend classes

    protected:  // Friend classes

    private:    // Friend classes

};

#endif      // CDRMRIGHTSSERVER_H

// End of File