omadrm/drmplugins/drmrohandler/inc/rohandlerdmgrwrapper.h
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:21:16 +0100
branchRCL_3
changeset 27 1481bf457703
parent 26 1221b68b8a5f
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* Copyright (c) 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:  Wrapper class for ROAP trigger download via DL mananger
*
*/


#ifndef ROHANDLERDMGRWRAPPER_H
#define ROHANDLERDMGRWRAPPER_H

namespace Roap
    {
    class MRoapObserver;
    }

class CDRMRights;

class MHttpDownloadMgrObserver;

class MRoHandlerDMgrWrapper
    {

public:
    virtual void HandleRoapTriggerL( const TDesC8& aTrigger ) = 0;

    virtual void DownloadAndHandleRoapTriggerL( const HBufC8* aUrl ) = 0;

    virtual void DownloadAndHandleRoapTriggerFromPrUrlL( const HBufC8* aUrl ) = 0;

    };

/**
*  Class for downloading ROAP triggers
*
*/
class CRoHandlerDMgrWrapper:
    public CActive, // Now active
    public MHttpDownloadMgrObserver,
    public Roap::MRoapObserver,
    public MRoHandlerDMgrWrapper
    {
private:
    enum TMeterState
        {
        EInit,
        EGetMeteringTrigger,
        ESaveMeteringTrigger,
        EMeteringReportSubmit,
        EGetPrUrlTrigger,
        ESavePrUrlTrigger,
        EPrRoapRequest,
        EComplete
        };
public:

    static CRoHandlerDMgrWrapper* NewL();

    static CRoHandlerDMgrWrapper* NewLC();

    virtual ~CRoHandlerDMgrWrapper();

    /**
    * Download a ROAP trigger from URL and handle it
    *
    * @since S60 3.2
    * @param aUrl  URL of ROAP trigger
    */
    void HandleRoapTriggerL( const TDesC8& aTrigger );

    void DownloadAndHandleRoapTriggerL( const HBufC8* aUrl );

    void DownloadAndHandleRoapTriggerFromPrUrlL( const HBufC8* aUrl );


// from base class MHttpDownloadMgrObserver

    /**
    * From MHttpDownloadMgrObserver.
    * Handle download manager events
    *
    * @since S60 3.2
    * @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 );

protected:
    //from Cactive
    virtual void DoCancel();

    virtual void RunL();

    virtual TInt RunError( TInt aError );
private:

    /**
    * C++ default constructor.
    */
    CRoHandlerDMgrWrapper();

    void ConstructL();

    /**
    * Set the browser default access point to be used
    *
    * @since S60 3.0
    */
    void SetDefaultAccessPointL();

    void DoDownloadRoapTriggerL( TMeterState aNextState );

    void DoSaveRoapTriggerL( TMeterState aNextState );

    void DoHandleRoapTriggerL( TMeterState aNextState );

    void Continue( TMeterState 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;

    /**
    * Post response url for ROAP prUrl, ()
    */
    HBufC8* iTriggerUrl;

    HBufC8* iTriggerBuf;
    /**
    * IAP (from ROAP or from UI)
    */
    TUint32 iIapId;

    TMeterState iState;

    Roap::CRoapEng* iRoapEng;

    RFs iFs;

    HBufC* iFileName;
    };

#endif // ROHANDLERDMGRWRAPPER_H