--- /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 <e32std.h>
+#include <f32file.h>
+#include <CodDownload.h>
+#include <CodLoadObserver.h>
+#include <AknServerApp.h>
+
+// 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<CBodyPart> 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 */