inc/DrmUtilityDmgrWrapper.h
changeset 29 3bdc3b853094
child 49 69d8e75812b7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/DrmUtilityDmgrWrapper.h	Mon May 03 12:46:34 2010 +0300
@@ -0,0 +1,365 @@
+/*
+* Copyright (c) 2007-2010 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:
+*
+*/
+
+
+#ifndef CDRMUTILITYDMGRWRAPPER_H
+#define CDRMUTILITYDMGRWRAPPER_H
+
+#include <f32file.h> // RFs
+#include <DownloadMgrClient.h>
+#include <RoapObserver.h> // Roap::MRoapObserver
+#include <AknProgressDialog.h> // MAknProgressDialogCallback CAknProgressDialog
+
+
+namespace Roap
+    {
+    class CRoapEng;
+    }
+
+namespace DRM
+    {
+    class CDrmUtilityConnection;
+    }
+class CDRMRights;
+class CEikProgressInfo;
+
+
+/**
+* Environment gate function
+*
+* @since S60 v5.0
+* @return pointer to DMgr handler
+*/
+IMPORT_C TAny* GateFunctionDMgr();
+
+class MDrmUtilityDmgrWrapper
+    {
+
+public:
+    virtual void DownloadAndHandleRoapTriggerL( const HBufC8* aUrl ) = 0;
+
+    virtual void DownloadAndHandleRoapTriggerL( const HBufC8* aUrl,
+        CCoeEnv& aCoeEnv ) = 0;
+
+    virtual HBufC8* GetErrorUrlL() = 0;
+
+    };
+
+/**
+*  Class for downloading ROAP triggers
+*
+*  @lib DrmUtilityDmgrWrapper
+*  @since S60 v5.0
+*/
+class CDrmUtilityDmgrWrapper :
+    public CActive,
+    public MHttpDownloadMgrObserver,
+    public Roap::MRoapObserver,
+    public MDrmUtilityDmgrWrapper,
+    public MProgressDialogCallback
+    {
+private:
+
+    enum TDownloadState
+        {
+        EInit,
+        EGetMeteringTrigger,
+        ESaveMeteringTrigger,
+        EMeteringReportSubmit,
+        EGetPrUrlTrigger,
+        ESavePrUrlTrigger,
+        EPrRoapRequest,
+        EComplete
+        };
+public:
+
+    static CDrmUtilityDmgrWrapper* NewL();
+
+    static CDrmUtilityDmgrWrapper* NewLC();
+
+    virtual ~CDrmUtilityDmgrWrapper();
+
+    /**
+    * Download a ROAP trigger from URL and handle it
+    *
+    * @param aUrl  URL of ROAP trigger
+    */
+    void DownloadAndHandleRoapTriggerL( const HBufC8* aUrl );
+
+    void DownloadAndHandleRoapTriggerL( const HBufC8* aUrl,
+        CCoeEnv& aCoeEnv );
+
+    HBufC8* GetErrorUrlL();
+
+
+    // from base class MHttpDownloadMgrObserver
+
+    /**
+    * From MHttpDownloadMgrObserver.
+    * Handle download manager events
+    *
+    * @param aDownload the download
+    * @param aEvent the event
+    */
+    void HandleDMgrEventL( RHttpDownload& aDownload, THttpDownloadEvent aEvent );
+
+// From Roap::MRoapObserver
+    /**
+    * ConnectionConfL
+    * @return ETrue: the network can be establish
+    *         EFalse: the ROAP transaction is canceled
+    *
+    * @leave  System wide error code */
+    TBool ConnectionConfL();
+
+    /**
+    * ContactRiConfL
+    * @return ETrue: the user consent is achieved
+    *         EFalse: the user consent is not achieved
+    *
+    * @leave  System wide error code */
+    TBool ContactRiConfL();
+
+    /**
+    * TransIdConfL
+    * @return ETrue: the user consent is achieved
+    *         EFalse: the user consent is not achieved
+    *
+    * @leave  System wide error code */
+
+    TBool TransIdConfL();
+
+    /**
+    * RightsObjectDetailsL
+    *
+    * The function is called after successful completion of RO acquisition
+    * protocol. The passes information about stored rights objects to the
+    * observer.
+    *
+    * @since  3.0
+    * @param aRightsList: A list of pointers to rights objects.
+    *                     Contents of aRightsList are owend by ROAP engine
+    *
+    * @leave  System wide error code */
+    void RightsObjectDetailsL( const RPointerArray<CDRMRights>& aRightsList );
+
+    /**
+    * ContentDownloadInfoL
+    *
+    * The function is called when the ROAP engine notices that it is about to
+    * receive a multipart content as a ROAP response. The method must return via
+    * out-parameter the path to a temp folder where the content is saved during
+    * download. The name that is used as filename when saving the content to
+    * the appropriate palce and the maximum size of the content (a safety upper limit)
+    * must also be provided via out-parameters.
+    *
+    * @since 3.0
+    * @param aTempFolder: (out-param) The path of the temp folder, or KNullDesC
+    * @param aContentName: (out-param) The name of the content, or KNullDesC (defaut name is used)
+    * @param aMaxSize: (out-param) The maximum size of the content, or -1 if not known
+    *
+    * @leave System wide error code */
+
+    void ContentDownloadInfoL( TPath& aTempFolder,
+            TFileName& aContentName,
+            TInt& aMaxSize );
+
+    /**
+    * ContentDetailsL
+    *
+    * The function is called when the ROAP engine has received a DCF content (together
+    * with a ROAP response) The ROAP engine saves the DCF to the appropriate location
+    * and gives out the information about the saved DCF file by calling this method
+    *
+    * @since 3.0
+    * @param aPath: The path andf the filename of the saved DCF file
+    * @param aType: The plain MIME type of the saved DCF file
+    * @param aAppUid: The handler app UID of the saved DCF file
+    *
+    * @leave System wide error code */
+
+    void ContentDetailsL( const TDesC& aPath,
+            const TDesC8& aType,
+            const TUid& aAppUid );
+
+    /**
+    * RoapProgressInfoL
+    *
+    * The function provides progress information about ROAP processing to the
+    * observer
+    *
+    * @since  3.0
+    * @param aProgressInfo: An integer value representing the state of
+    *                       ROAP processing, counting in bytes
+    *
+    * @leave  System wide error code */
+
+    void RoapProgressInfoL( const TInt aProgressInfo );
+
+    /**
+    * ErrorUrlL
+    *
+    * The function is called in ROAP error case and it provides an error URL
+    * for the caller. The calling entity should send an HTTP GET request to
+    * the URL which should then return an HTML page.
+    *
+    * @since  3.0
+    * @param aErrorUrl: The error URL
+    *
+    *
+    * @leave  System wide error code */
+
+    void ErrorUrlL( const TDesC8& aErrorUrl );
+
+    /**
+    * PostResponseUrlL
+    *
+    * The function is called if handled ROAP metering report response
+    * contains PostResponseURL extension. The calling entity should send
+    * an HTTP GET request to the URL, which should return ROAP trigger,
+    * download descriptor or multipart message containing both
+    * download descriptor and ROAP trigger.
+    *
+    * @since  3.2
+    * @param aPostResponseUrl: The URL to be fetched
+    *                          after handling ROAP metering response
+    *                          with PostResponseURL extension.
+    *
+    *
+    * @leave  System wide error code */
+    void PostResponseUrlL( const TDesC8& aPostResponseUrl );
+
+public: // Call back methods of MAknProgressDialogCallback
+
+    /**
+    * ProgressDialog call back method.
+    * Get's called when a dialog is dismissed.
+    *
+    * @param aButtonId ID of the button pressed
+    */
+    void DialogDismissedL( TInt aButtonId );
+
+protected:
+    //from Cactive
+    virtual void DoCancel();
+
+    virtual void RunL();
+
+    virtual TInt RunError( TInt aError );
+private:
+
+    /**
+    * C++ default constructor.
+    */
+    CDrmUtilityDmgrWrapper();
+
+    void ConstructL();
+
+    /**
+    * Set the browser default access point to be used
+    */
+
+
+    void ShowProgressNoteL( );
+
+    void RemoveProgressNoteL( );
+
+    void DoConnectL( TDownloadState aNextState );
+
+    void DoDownloadRoapTriggerL( TDownloadState aNextState );
+
+    void DoSaveRoapTriggerL( TDownloadState aNextState );
+
+    void DoHandleRoapTriggerL( TDownloadState aNextState );
+
+    void CompleteToState( TDownloadState aNextState, TInt aError );
+
+private: // data
+
+    /**
+    * Download manager session
+    */
+    RHttpDownloadMgr iDlMgr;
+
+    /**
+    * Used to make downloads synchronous
+    */
+    CActiveSchedulerWait iWait;
+
+    /**
+    * to store information on download
+    */
+    TBool iDownloadSuccess;
+    TBool iConnectionError;
+
+    /**
+    * trigger URL
+    */
+    HBufC8* iTriggerUrl;
+
+    /**
+    * trigger buffer
+    */
+    HBufC8* iTriggerBuf;
+
+    TBool iDialogDismissed;
+
+    /**
+    * Progess note dialog and progress info
+    */
+    CAknProgressDialog* iProgressNoteDialog;        // owned
+    CEikProgressInfo* iProgressInfo;                // not owned
+    TInt iCurrentProgressValue;                     // owned
+    TInt iProgressIncrement;                        // owned
+
+    /**
+    * Control environment
+    */
+    CCoeEnv* iCoeEnv;
+
+    /**
+    * Is CoeEnv given
+    */
+    TBool iUseCoeEnv;
+
+    /**
+    * Error url for ROAP temporary error
+    */
+    HBufC8* iErrorUrl;
+
+    /**
+    * Post response url for ROAP prUrl
+    */
+    HBufC8* iPostResponseUrl;
+
+    /**
+    * IAP (from ROAP or from UI)
+    */
+    TUint32 iIapId;
+
+    TDownloadState iState;
+
+    Roap::CRoapEng* iRoapEng;
+
+    RFs iFs;
+
+    HBufC* iFileName;
+
+    DRM::CDrmUtilityConnection* iConnection;
+    };
+
+#endif // CDRMUTILITYDMGRWRAPPER_H