diff -r 000000000000 -r dd21522fd290 codhandler/codui/inc/CodDownloadImpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/codhandler/codui/inc/CodDownloadImpl.h Mon Mar 30 12:54:55 2009 +0300 @@ -0,0 +1,613 @@ +/* +* 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 the License "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: Declaration of class CCodDownloadImpl. +* +*/ + + +#ifndef COD_DOWNLOAD_IMPL_H +#define COD_DOWNLOAD_IMPL_H + +// FORWARD DECLARATION + +class CCodEngBase; +class CCodUiResource; +class CDocumentHandler; +class CErrorUI; +class CBodyPart; +class CAiwGenericParamList; + +// INCLUDES + +#include +#include +#include +#include +#include + +// CONSTANTS +const TUid KDRMHelperUid = {0x101F85C7}; + +/** +* Cod Download implementation (behind proxy CCodDownload). +*/ +NONSHARABLE_CLASS( CCodDownloadImpl ) +: public CActive, + public MCodLoadObserver, + public MAknServerAppExitObserver + { + public: // Constructors and destructor + + /** + * Two-phased constructor. Leaves on failure. + * @param aProxy Proxy owning this object. + * @param aBuf The descriptor. + * @param aType Descriptor data type. + * @param aObserver Observer. + * @param aEikEnv Eikon environment or NULL. Can be NULL if download + * does not require UI functionality. + * @param aMultipartBoundary Multipart boundary or NULL. + * Required for processing multipart. + * @param aMultipartUrl Multipart URL or NULL. + * Required for processing multipart. + * @return The constructed object. + */ + IMPORT_C static CCodDownloadImpl* NewL + ( + CCodDownload& aProxy, + const TDesC8& aBuf, + const TDesC8& aType, + MCodDownloadObserver& aObserver, + CEikonEnv* aEikEnv, + const TDesC8* aMultipartBoundary, + const TDesC16* aMultipartUrl + ); + + /** + * Destructor. + */ + IMPORT_C virtual ~CCodDownloadImpl(); + + public: // New methods + + /** + * Start download. Panics if already active. + * Restart is OK for completed downloads. + * @param aParams Parameters or NULL. + */ + IMPORT_C void StartL( const CAiwGenericParamList* aParams ); + + /** + * Stop (cancel) download. Safe to call in any state. + * Some processing still follows (e.g. install-notify). + */ + IMPORT_C void Stop(); + + /** + * Get progress. + * @return Progress. + */ + IMPORT_C const TCodDownloadProgress& Progress() const; + + /** + * Get name attribute. This may be empty string, if attribute is + * empty or not available. Do not store pointer (data may change as + * download proceeds). + */ + IMPORT_C TPtrC Name(); + + /** + * Get data type of content (or empty string: type may not be + * available). + * @return Data type. + */ + IMPORT_C TPtrC8 Type() const; + + /** + * Get path of saved content (or empty string). + * Available only after successful download. + * @return Path of saved content. Fits to KMaxFileName. + */ + IMPORT_C TPtrC GetPath() const; + + /** + * Perform service flow after a successful or failed download. + * This consists of zero, one or both of + * - launching dwonloaded content + * - activating Next-URL. + * Load may also be retried. + * Call this in response to EEndLoad event. + */ + IMPORT_C void ServiceFlowL(); + + /** + * Get Next-URL. + * @return Next-URL. Owner is the caller. + */ + IMPORT_C HBufC8* NextUrlL() const; + + + /** + * Get PostResponse-URL. + * @return PostResponse-URL. Owner is the caller. + */ + IMPORT_C HBufC8* GetPostResponseUrlL() const; + + /** + * Check if downloading to removable media. + * Available after EAccept event. + * @return ETrue if downloading to removable media. + */ + IMPORT_C TBool RemovableMedia() const; + + /** + * Set COD download attached + * @param aValue If equals ETrue - download is attached + */ + IMPORT_C void SetCodDlAttached(const TBool aValue); + + /** + * Get updated DD URi + * @return Updated DD-URL. + */ + IMPORT_C HBufC8* UpdatedDDUriL() const; + + /** + * Pause COD Download. + */ + IMPORT_C void Pause(); + + /** + * Two-phased constructor. Leaves on failure. + * @param aProxy Proxy owning this object. + * @param aDownloadId The download id. + * @param aDlUid The app UID. + * @param aType Descriptor data type. + * @param aObserver Observer. + * @param aEikEnv Eikon environment or NULL. Can be NULL if download + * does not require UI functionality. + * @param aMultipartBoundary Multipart boundary or NULL. + * Required for processing multipart. + * @param aMultipartUrl Multipart URL or NULL. + * Required for processing multipart. + * @return The constructed object. + */ + + IMPORT_C static CCodDownloadImpl* NewL + ( + CCodDownload& aProxy, + const TInt aDownloadId, + const TUid aDlUid, + const TDesC8& aType, + MCodDownloadObserver& aObserver, + CEikonEnv* aEikEnv, + const TDesC8* aMultipartBoundary, + const TDesC16* aMultipartUrl + ); + + /** + * Get Destination file name + * @param aMOIndex media object index between 1 to 'n' + * @return NULL if index out of range + */ + IMPORT_C TPtrC GetDestFilePath (TInt aMOIndex ) const; + + /** + * Set the CodData stream descriptor. + * @param aDesStream. + */ + IMPORT_C HBufC8* UpdatedDownloadDataL() const; + + /** + * Set the stream descriptor for single mediaq object (track). + * @param aDesStream. + */ + IMPORT_C HBufC8* UpdatedTrackDataL(TInt& aValue) const; + + /** + * Currently active COD download + */ + IMPORT_C TInt ActiveDownload(); + + public: // Transparent user data + + /** + * Get tansparent user data. + * @return User data. + */ + IMPORT_C TAny* UserData() const; + + /** + * Set tansparent user data. + * @param aUserData User data. + */ + IMPORT_C void SetUserData( TAny* aUserData ); + + private: // Constructor + + /** + * Constructor. + * @param aProxy Proxy owning this object. + * @param aObserver Observer. + * @param aEikEnv Eikon environment or NULL. Can be NULL if download + * does not require UI functionality. + */ + inline CCodDownloadImpl + ( + CCodDownload& aProxy, + MCodDownloadObserver& aObserver, + CEikonEnv* aEikEnv + ); + + /** + * Second phase constructor. Leaves on failure. + * @param aBuf The descriptor. + * @param aType Data type. + * @param aMultipartBoundary Multipart boundary or NULL. + * Required for processing multipart. + * @param aMultipartUrl Multipart URL or NULL. + * Required for processing multipart. + */ + void ConstructL + ( + const TDesC8& aBuf, + const TDesC8& aType, + const TDesC8* aMultipartBoundary, + const TDesC16* aMultipartUrl + ); + + /** + * Second phase constructor. Leaves on failure. + * @param aDownloadId The download id. + * @param aDlUid The app uid. + * @param aType Data type. + * @param aMultipartBoundary Multipart boundary or NULL. + * Required for processing multipart. + * @param aMultipartUrl Multipart URL or NULL. + * Required for processing multipart. + */ + void ConstructL + ( + const TInt aDownloadId, + const TUid aDlUid, + const TDesC8& aType, + const TDesC8* aMultipartBoundary, + const TDesC16* aMultipartUrl + ); + + + private: // from CActive + + /** + * Cancel protocol implementation. + */ + virtual void DoCancel(); + + /** + * Outstanding request completed. + */ + virtual void RunL(); + + /** + * Handle error. + * @param aError Error code. + * @return KErrNone. + */ + virtual TInt RunError( TInt aError ); + + private: // processing completion + + /** + * SetL succeeded. + */ + void SetOkL(); + + /** + * Load done. + */ + void LoadDoneL(); + + /** + * Perform service flow after a successful or failed download. + * This consists of zero, one or both of + * - launching dwonloaded content + * - activating Next-URL. + * Load may also be retried. + * @return ETrue if application should exit. + */ + TBool DoServiceFlowL(); + + /** + * Handle successful load. + * @return ETrue if application should exit. + */ + TBool LoadOkL(); + + /** + * Handle failed load. + * @return ETrue if application should exit. + */ + TBool LoadFailedL(); + + /** + * Handle successful ROAP. + * @return ETrue if application should exit. + */ + TBool RoapOkL(); + + /** + * Handle successful RoAcq ROAP. + * @return ETrue if application should exit. + */ + TBool RoAcqOkL(); + + /** + * Handle failed ROAP. + * @return ETrue if application should exit. + */ + TBool RoapFailedL(); + + /** + * Service flow: launch browser and (optionally) activate Next-URL, + * if exists. + */ + void ActivateNextUrlL(); + + /** + * Finished. + */ + void Done(); + + private: // from MCodLoadObserver + + /** + * Get download root path. + * Leave with KErrCancel if query is cancelled. + * @param aRootPath Root path returned here. + */ + virtual void GetRootPathL( TDes& aRootPath ); + + /** + * Starting load (fetch content or error-notify). + * @param aStatusCode HTTP status code. + * - 900 (Success) indicates start of content load. + * - Other values indicate start of error report. + */ + virtual void StartLoadL( TInt aStatusCode ); + + /** + * Cancelling content load started. Not called if cancelling error + * report. + */ + virtual void StartCancelL(); + + /** + * Load progress update. + * @param aFinalValue Final progress value. + * @param aCurrentValue Current progress value. + */ + virtual void ProgressL( TInt aFinalValue, TInt aCurrentValue ); + + /** + * Processing ended. + * Note that if processing does not include loading, this method can be + * called without a preceding StartLoadL call. + * @param aStatusCode HTTP status code (aError mapped to HTTP status + * code). + * @param aError Error code of result. (The Set(), Accept() or Reject() + * request to CodEng will also complete with this value.) + */ + virtual void Done( TInt aStatusCode, TInt aError ); + + /** + * Get confirmation for creating network connection. + * @return ETrue if connection can be created. + */ + virtual TBool ConfirmConnectL(); + + /** + * Opening a connection. + * @param aIap AP to be used for creating the connection. + */ + virtual void StartConnect( TUint32 aIap ); + + /** + * Connected. + */ + virtual void EndConnect(); + + /** + * Authenticate user. + * @param aHost Host. + * @param aRealm Realm. + * @param aProxyAuth ETrue if this is a proxy authentication. + * @param aUsername Return username here. + * @param aPassword Return password here. + * @return ETrue if auth is OK, EFalse if cancelled. + */ + virtual TBool UserAuthL + ( + const TDesC& aHost, + const TDesC& aRealm, + TBool aProxyAuth, + TDes& aUsername, + TDes& aPassword + ); + + /** + * ROAP Trigger parsed (success or error). + * @param aData ROAP Trigger data. + */ + virtual void RoapTriggerParsedL( const CRoapData& aData ); + /** + * Connection Error + * return: Connection Error . + */ + + inline virtual void SetConnError( TInt aError) {iConnError = aError;} + + /** + * Connection Error + * return: Connection Error . + */ + inline virtual TInt ConnError () {return iConnError;} + + /** + * Progresive download "Play" is available + * return: Connection Error . + */ + virtual void PdPlayAvailable(); + + /** + * Inform DownloadMgrClntSrv about updated media info + * return: Connection Error . + */ + virtual void UpdateMediaInfoL(); + + /** + * SetActive Download + */ + virtual void SetActiveDownload( ); + /** + * Inform DownloadMgrClntSrv about updated track + * return: Connection Error . + */ + virtual void UpdateTrackInfoL(); + + /** + * Displays Info message "Waiting for license" + */ + virtual void WaitForLicenseL(); + + /** + * To indicate the download is paused + */ + inline virtual void DownloadPaused() {iDownloadPaused = ETrue;} + + /** + * To indicate the download is resumed and ready for PD + */ + inline virtual void DownloadResumedPdAvailable() + { + iObserver.CodEventL( iProxy, MCodDownloadObserver::EResumed ); + } + + /** + * To update the server about whether or not download is pausable + */ + virtual void UpdatePausable( TBool aPausable ); + + + /** + * To update the server about next media object being downloaded. + */ + virtual void MediaObjectNameChanged(); + + /** + * To update the server about content type. + */ + virtual void ContentTypeChanged(); + + /** + * + * To handle PostResponseUrlL as part of metering response + * @param aPrUrl: The PostResponseURL + * @return void + * + */ + virtual void HandleRoapPostResponseUrlL( const TDesC8& aPrUrl ); + + + private: // from MAknServerAppExitObserver + + /** + * Embedded document viewing has ended. + * @param aReason Exit reason (unused). + */ + void HandleServerAppExit( TInt aReason ); + + private: // types + + enum TState ///< State. + { + EInit, ///< Initial state. + ESet, ///< Set. + ELoad, ///< Loading. + ELoadDone, ///< Load done. + EServiceFlow ///< Service flow. + }; + + private: // New methods + + /** + * Reset progress. + */ + inline void ResetProgress(); + + /** + * Get Next-URL (possibly relative) attribute. + * @param aBack Etrue is returned here if Next-URL is 'back'. + * @return Next-URL atttribute. + */ + TPtrC8 NextUrlAttr( TBool& aBack ) const; + + /** + * Call back function to launch the help + */ + static TInt ShowRoapCallback( TAny* aPtr ); + + /** + * Launch help dialog + * @param TDesC aContext + * @return void + */ + void LaunchHelpL( const TDesC& aContext ); + + private: // Data + + TState iState; ///< State. + CCodDownload& iProxy; ///< Proxy object. Not owned. + TBool iCod; ///< COD or DD? + TBool iRoap; ///< ROAP involved? + HBufC8* iBuf; ///< Data buffer. Owned. + TPtrC8 iDescriptor; ///< Descriptor. + MCodDownloadObserver& iObserver; ///< Observer. Not owned. + CEikonEnv* iEikEnv; ///< Eikon env or NULL. Not own. + CCodUiResource* iUiResource; ///< UI Resource or NULL. Owned. + CErrorUI* iErrorUi; ///< Error UI or NULL. Owned. + CCodEngBase* iEng; ///< Engine. Owned. + TCodDownloadProgress iProgress; ///< Progress. + TAny* iUserData; ///< User data. Not own. + TBool iAutoAccept; ///< Suppress download conf. + TBool iSilentMode; ///< Silent mode. + TBool iSuppressNextUrl; ///< Suppress Next-URL. + TBool iSuppressLaunch; ///< Suppress launch. + TBool iFota; ///< FOTA download? + CDocumentHandler* iDocHandler; ///< DocumentHandler or NULL. + CAiwGenericParamList* iDocParams; ///< DocHandler params. Owned. + RFs iFs; ///< File Server Session. Own. + RPointerArray iParts; ///< Multipart body parts. Owned. + CAiwGenericParamList* iParams; ///< Copy of received params. Own + TInt iConnError; ///< Connection Error . + TBool iAttached; ///< Cod download attached (playing progressively) + + TUint32 iDownloadId; ///< Download Id + TUid iAppUId; ///< Client Application Uid + TBool iDownloadPaused; ///< Download paused + HBufC8* iPostResponseURL; ///< PostResponseURL from RoapSaver + }; + +#include "CodDownloadImpl.inl" + +#endif /* def COD_DOWNLOAD_IMPL_H */