diff -r 000000000000 -r 95b198f216e5 omadrm/drmplugins/drmrohandler/inc/CRoHandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/omadrm/drmplugins/drmrohandler/inc/CRoHandler.h Thu Dec 17 08:52:27 2009 +0200 @@ -0,0 +1,249 @@ +/* +* Copyright (c) 2004-2008 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: ECOM plugin for receiving OMA Rights Objects +* +*/ + + +#ifndef CROHANDLER_H +#define CROHANDLER_H + +// INCLUDES +#include // for CClientMtmRegistry +#include "RoapEngBase.h" +#include "wbxmlroaptriggerparser.h" + +// CONSTANTS +const TUid KUidMsgTypeRO = {0x101F6DC2}; +const TInt KWait = 5*60*1000000; // Timeout value to be used for waiting in "disk full" situation + +enum TMessageType + { + EOma1Ro, + EOma2RoapPdu, + EOma2RoapTrigger, + EOma2RoapTriggerRoAcquisition, + EOma2RoapTriggerMetering + }; + +// MACROS + +// DATA TYPES + +// FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS + +class CDRMMessageParser; + + +// CLASS DECLARATION + +// DESCRIPTION +// ECOM listener plugin for DRM server. +// Plugin is instantiated by the wap listener in the system watcher. +// It delivers rights object to DRM server. + +class CRoHandler + : public CPushHandlerBase , public MMsvSessionObserver + { + public: // Constructors and destructor + + /** + * Destructor + */ + ~CRoHandler(); + + /** + * Default 1st phase factory method. + * returns created instance of the CRoHandler class + */ + static CRoHandler* NewL(); + + /** + * Method for handling a received message asynchronously. + * param aPushMsg object representing the received push message + * param aStatus Status of the asynchronous call + */ + void HandleMessageL( CPushMessage* aPushMsg, TRequestStatus& aStatus ); + + /** + * Method for handling a received message synchronously. + * param aPushMsg object representing the received push message + */ + void HandleMessageL( CPushMessage* aPushMsg ); + + /** + * Cancels the requested asynchronous message handling. + */ + void CancelHandleMessage(); + + protected: // Functions from base classes + + /** + * Performs operations needed for cancelling the message handling. + * Called by the Active Scheduler after user calling Cancel(). + */ + void DoCancel(); + + /** + * Performs the actual tasks related to message handling. + * Called by the Active Scheduler. + */ + void RunL(); + + /** + * Performs error handling tasks in case RunL() left. + * Called by the Active Scheduler. + * Currently does nothing. + * param aError specifies the error code related to RunL()'s leave. + * return error value after error handling. + */ + TInt RunError( TInt aError ); + + private: // New functions + + /** + * Default constructor. + */ + CRoHandler(); + + /** + * 2nd phase constructor. + */ + void ConstructL(); + + /** + * Performs basic sanity checks for the received message. + * Only the body is checked since header is not of interest to us. + * @return standard error code + */ + TInt PerformChecks(); + + TMessageType CheckMessageTypeL(); + + void HandleRightsMessageL(); + + void HandleRoapPduL(); + + void HandleRoapTriggerL(); + + void HandleMeteringTriggerSilentlyL(); + + + /** + * Creates new empty message. + */ + TMsvId CreateNewMessageL(); + + /** + * Set message entry. + */ + void SetEntryL( TMsvId aEntryId ); + + /** + * Moves message entry. + */ + TMsvId MoveMessageEntryL( TMsvId aTarget ); + + /** + * Adds content to the message. + */ + void AddRoContentL( TDesC& aMessageContent ); + + private: // Functions from base classes + + /** + * Reserved for future expansion. + */ + void CPushHandlerBase_Reserved1(); + + /** + * Reserved for future expansion. + */ + void CPushHandlerBase_Reserved2(); + + HBufC* ConvertDetailsL( const TDesC8& aFrom ); + + HBufC* GetDetailLC(); + + HBufC* GetDescriptionLC(); + + void ReadFromResourceLC( + const TDesC& aFile , + const TInt& aIndex , + HBufC*& aBuf ); + + HBufC* ConvertUriToDisplayFormL( const TDesC& aUri ); + + /** + * Do a synchronous ROAP request. + * + * @since S60 3.1 + * @param aTrigger ROAP Trigger + * @return ETrue if the ROAP could be started silently, EFalse otherwise (e.g. when + * no RI context exists) + */ + TBool DoRoapL( const TDesC8& aTrigger ); + + private: // from MMsvSessionObserver + + /** + * Handles session events. + */ + void HandleSessionEventL( TMsvSessionEvent aEvent, + TAny* aArg1, TAny* aArg2, + TAny* aArg3 ); + + enum TState + { + ERunning, + EFileSystemWait + }; + + // internal state + TState iState; + // message type + TMessageType iMsgType; + // flag to handle message one time. + TBool iFirstTime; + // uid of the ro handler + enum { RoHandlerUid = 0x101F7B92 }; + // Pushed message + CPushMessage* iPushMsg; + // The body of the pushed message as HBufC8 descriptor + // api to store the OMA 1 RO + CDRMMessageParser* iMessageParser; + // pointer to message body + TPtrC8 iMessageBodyPtr; + CMsvSession* iSession; // Client session on the message server + CBaseMtm* iMtm; // Message Type Module (sms) + CClientMtmRegistry* iMtmReg; // Mtm client registry for creating new mtms + TMsvId iMsvId; // message server entry id + RFs iFs; + Roap::CRoapEngBase* iRoapHandler; + + TBool iMeteringSupported; // state variable showing whether + // metering is supported or not + // initialised at instantiation + DRM::CWbxmlRoapTriggerParser* iWbxmlTriggerParser; + HBufC8* iParsedXmlTrigger; + TBool iPutRightsToInbox; // whether received RO is put into Inbox as an + // entry or not. Initialized at instantiation. + + }; + +#endif CROHANDLER_H + +// End of File