fotaapplication/fotaserver/FotaServer/inc/fotadownload.h
branchRCL_3
changeset 26 19bba8228ff0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fotaapplication/fotaserver/FotaServer/inc/fotadownload.h	Wed Sep 01 12:27:42 2010 +0100
@@ -0,0 +1,608 @@
+/*
+* Copyright (c) 2005 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:   Swupd downloader.
+*
+*/
+
+
+
+#ifndef ___DOWNLOADER_H_
+#define ___DOWNLOADER_H_
+
+#include <downloadmgrclient.h>
+#include <etelpckt.h> //To read GSM Error codes from symbian
+#include <exterror.h> //To read GSM Error codes from symbian
+#include <wlanerrorcodes.h> //To read WLAN Error codes from s60
+#include <AknWaitDialog.h>
+#include "FotaServer.h"
+#include "FotaSrvDebug.h"
+#include "FotaDLProgressDlg.h"
+
+// FORWARD DECLARATIONS
+class CFotaServer;
+class CAknWaitDialog;
+class CFotaDownloadNotifHandler;
+class CFotaNetworkRegStatus; 	//To know the network connectivity status while resuming suspended download
+// CONSTANTS
+ // from coderror.h
+#define KErrCodInvalidDescriptor -1000
+#define KErrCodInsufficientSpace -1001
+#define KErrCodWapConnectionDropped -20041
+
+// If download times out, it must be tried again
+#define KFotaDownloadTimeoutRestartCount 5
+
+// For reading connecting resource from DM UI
+_LIT( KSCPResourceFilename, "\\Resource\\Apps\\NsmlDMSync.rsc" );
+_LIT( KDriveZ,"z:" );
+_LIT( KDDDirPath, "c:\\system\\fota\\" );
+_LIT( KDDFilename, "fotadownload.dd" );
+
+//Constants when SAN Bits are set
+enum {
+		ESanNotSpecified=0,
+		ESanSilent,
+		ESanInformative,
+		ESanInteractive
+};
+
+//Contants when SAN is Off. It refers to Accepted state in DM Profile Settings
+enum {
+	EAcceptedNo=0,
+	EAcceptedYes
+};
+
+// Constants for KSilentOmaDlUIBehavior cenrep key
+ enum {
+ 		EOmacdOffdlprgOff=0, //OMA CD View = Off, Download Progress Bar = Off
+ 		EOmacdOffdlprgOn,    //OMA CD View = Off, Download Progress Bar = On
+ 		EOmacdOndlprgOff,    //OMA CD View = On,  Download Progress Bar = Off
+ 		EOmacdOndlprgOn,     //OMA CD View = On,  Download Progress Bar = On 
+ 		EChooseFromSan		 //Choose behavior from SAN bits set during DM Session
+ };
+/**
+ *  Downloader 
+ *
+ *  Starts download and observes it.
+ *
+ *  @lib    fotaserver
+ *  @since  S60 v3.1
+ */
+NONSHARABLE_CLASS (CFotaDownload ) 
+        : public CActive 
+        , MHttpDownloadMgrObserver
+        , MDLProgressDlgObserver
+    {
+    friend class CFotaDownloadNotifHandler;
+
+
+	enum TFotaDLProgress
+		{
+		EStarted,
+		EDescriptorDownloaded,
+		ESizeChecked
+		};
+		
+			
+public: // new functions
+
+    CFotaDownload ();
+
+    virtual ~CFotaDownload ();
+
+    static CFotaDownload* NewL (CFotaServer* aServer);
+
+public: // Functions from base classes:
+
+
+    /**
+     * Schedule update to be carried out after download
+     *
+     * @since   S60   v3.1
+     * @param   aButtonId Button pressed
+     * @return  None
+     */
+    TBool HandleDLProgressDialogExitL( TInt aButtonId );
+
+protected:  // Functions from base classes:
+    
+    /**
+     * Handle user action
+     *
+     * @since   S60   v3.1
+     * @param   None
+     * @return  None
+     */
+    virtual void RunL();
+
+
+     /**
+     * Handle leaving Runl
+     *
+     * @since   S60   v3.1
+     * @param   aError  error code
+     * @return  Error code
+     */
+    virtual TInt RunError(TInt aError);
+
+
+     /**
+     * Handle cancel of active object
+     *
+     * @since   S60   v3.1
+     * @param   none
+     * @return  none
+     */
+    void DoCancel();
+
+public:
+
+
+    /**
+     * Handle Download manager event
+     *
+     * @since   S60   v3.1
+     * @param   aDownload       download 
+     * @param   aEvent          event
+     * @return  none
+     */
+    virtual void HandleDMgrEventL( RHttpDownload& aDownload
+                        , THttpDownloadEvent aEvent );
+
+
+    /**
+     * Handle Download manager event
+     *
+     * @since   S60   v3.1
+     * @param   aDownload       download 
+     * @param   aEvent          event
+     * @return  none
+     */
+    void DoHandleDMgrEventL( RHttpDownload* aDownload
+                        ,THttpDownloadEvent aEvent );
+
+
+    /**
+     * Start download of swupd
+     *
+     * @since   S60   v3.1
+     * @param   aParams     download parameters
+     * @param   aPkgURL     Url of swupd
+     * @param   aUpdateAfterDownload     Is update needed
+     * @param   aIapid      Iap
+     * @param   aRestartDownload Is this a retry download (counter)? 
+     *                            If yes, don't show descriptor.
+     * @return  none
+     */
+    void DownloadL(TDownloadIPCParams aParams,const TDesC8& aPkgURL
+        ,TBool aUpdateAfterDownload,const TInt aIapid=KErrNotFound
+        ,const TInt aRestartDownload=0 );
+
+
+    /**
+     * Cancel
+     *
+     * @since   S60   v3.1
+     * @param   aCancelProgressBar  Cancel progress bar also?
+     * @return  none
+     */
+    void CancelDownload( const TBool aCancelProgressBar );
+
+    /**
+     * Tries to resume any suspended fota download by quering the user. When the DM session is
+     * Silent, this method directly starts resuming of download by calling ResumeDownloadL.
+     *
+     * @since   S60   v3.2
+     * @param   aUserInitiated  Is user initiated resume?
+     * @return  none
+     */
+    void TryResumeDownloadL(TBool aUserInitiated);
+    
+    /**
+     * Resumes any suspended fota download. Firstly, it retrieves the RHttpDownload download object from Download Manager
+     * and then performs the following - 
+     * - sets the IAP ID to use
+     * - checks whether the connection is possible with that IAP ID
+     * - sets download ui behavior
+     *
+     * @since   S60   v3.2
+     * @return  none
+     */
+    void ResumeDownloadL();
+    /**
+     * Finds whether the download is resumable or not.
+     *
+     * @since   S60   v3.2
+     * @return  ETrue if download is resumable, else EFalse.
+     */
+    TBool IsDownloadResumable();
+    
+    /**
+     * Finds whether Fota Monitory Service is enabled or not.
+     *
+     * @since   S60   v3.2
+     * @return  ETrue if FMS is enabled, else EFalse.
+     */
+	TBool IsFMSEnabled();
+	
+    /**
+     * Sets the download activity state to the P&S Key used to sync with DM UI.
+     *
+     * @since   S60   v3.2
+     * @param	aValue	ETrue when download is active, else EFalse.
+     * @return  None
+     */
+	void SetDownloadActive(TBool aValue);
+	
+    /**
+     * Returns the download activity state
+     *
+     * @since   S60   v3.2
+     * @return	aValue	ETrue when download is active, else EFalse.
+     */
+
+	TBool IsDownloadActive();
+
+    /**
+     * Starts to suspend the ongoing download
+     *
+     * @since   S60   v3.2
+     * @param	aReason		Reason to suspend the download. Value is one of RFotaEngineSession::TResult.
+     * @param	aSilent		Is suspend operation to be silent?
+     * @return  None
+     */
+	void RunDownloadSuspendL(const TInt aReason, TBool aSilent=EFalse);
+		
+    /**
+     * Starts to cancel the ongoing download
+     *
+     * @since   S60   v3.2
+     * @param	aReason		Reason to cancel the download. Value is one of RFotaEngineSession::TResult.
+     * @param	aSilent		Is cancel operation to be silent?
+     * @return  None
+     */
+	void RunDownloadCancelL(const TInt aReason, TBool aSilent=EFalse);
+	
+    /**
+     * Should update be started after download completes
+     */
+    TBool iUpdateAfterDownload;
+
+    /**
+     * Download is to be restarted. (counter)
+     */
+    TInt iRestartCounter;
+    
+    /**
+     * Download state
+     */
+    TPackageState iDLState;
+
+
+    /**
+    * Download URL 
+    */
+    HBufC8* iUrl;
+
+
+  
+
+private:
+
+
+    /**
+     * Launch notifier. Also used to end download silently.
+     *
+     * @since   S60   v3.1
+     * @param   aNotetype    Notetype
+     * @param   aIntParam    int param
+     * @param   aMemoryneeded How much disk space needed for download
+     * @param   aFinishOnly  finish only, do not launch notifier
+     * @return  none
+     */
+    
+    void LaunchNotifierL( const TSyncMLFwUpdNoteTypes aNotetype
+                            ,const TInt aIntParam
+                            ,const TInt aMemoryNeeded
+                            ,TBool aFinishOnly=EFalse );
+
+    /**
+     * Reads the download variations from the Cenrep keys into instance variables.
+     * They include - Fota Suspend & Resume feature state (on/off) &
+     * Fota Monitory Service feature state (on/off)
+     * 
+     * @since   S60   v3.2
+     * @return  none
+     */
+	void CheckDownloadVariations();
+
+    /**
+     * Retrieves the RHttpDownload object from Download Manager for the suspended download.
+     * Since concurrent downloads are not possible, there will be always zero or one suspended download.
+     * 
+     * @since   S60   v3.2
+     * @return  RHttpDownload object. If NULL, it means that there is no suspended download or the retrieval has fails.
+     */
+	RHttpDownload* RetrieveDownloadL();
+	
+    /**
+     * Sets the IAP Id to use during download. The same API is used for fresh or resuming download.
+     * During resuming of download, the selection of IAP logic varies as below:
+     * 1. If IAP is always ask in DM profile, uses the earlier set during FMS trigger
+	 * 2. If IAP is always ask in DM profile, query user for IAP during user trigger
+	 * 3. If IAP has changed in DM profile after suspend, use the newer one during resume
+     * 
+     * @since   S60   v3.2
+     * @param	aParams		contains the download operation details
+     * @param	aIapid		Out param, the IAP Id is set here.
+     * @return  None
+     */
+	void SetIapToUseL(TPackageState aParams,const TInt aIapid);
+	
+    /**
+     * Sets the Download UI behavior for fresh or resuming download.
+     * 
+     * @since   S60   v3.2
+     * @param	aFreshDL	ETrue if the download is fresh, else EFalse.
+     * @return  None
+     */
+	void SetDownloadUiBehavior(TBool aFreshDL);
+	
+    /**
+     * Creates a fresh download
+     *
+     * @since   S60   v3.1
+     * @param   
+     * @return  none
+     */
+    void CreateDownloadL();
+	  /**
+     * SetDLResultdlErrorId Set the appropriate error codes.
+     *
+     * @since   S60   v5.0
+     * @param   adlErrorId  error id from DlMgr
+     * @param   asysErrorId error id from system
+     * @return  none
+     */   
+    void SetDLResultdlErrorId( THttpDownloadMgrError adlErrorId, TInt32 asysErrorId);
+    
+    /**
+     * ReSetDownloadL Reset the Fota state to Download failed
+     *
+     * @since   S60   v5.0
+     * @param   atoresetdl Bool value if ETrue the set the state to Download Failed
+     * @return  none
+     */   
+    void ReSetDownloadL(TBool atoresetdl);
+    
+    /**
+     * DetermineUISANOFF Determine UI behavior when SAN is OFF
+     *
+     * @since   S60   v5.0
+     * @param   aBehavior behavior depending upon whether SAN is supported or not
+     * @return  none
+     */    
+    void DetermineUISANOFF(TInt aBehavior);
+    
+     /**
+     * DetermineUISANOFF Determine UI behavior when SAN is OFF
+     *
+     * @since   S60   v5.0
+     * @param   aBehavior behavior depending upon whether SAN is supported or not
+     * @return  none
+     */
+    void DetermineUISANON(TInt aBehavior);
+    /**
+     * Reference to fotaserver.
+     * Not own
+     */
+    CFotaServer*            iFotaServer;
+
+    /**
+     * Reference to download mgr.
+     */
+    RHttpDownloadMgr        iDownloadMgr;
+
+    /**
+     * The download object for the current download.
+     */
+    RHttpDownload* iDownload;
+    
+    /**
+     * The downloaded content size in bytes.
+     */
+    TInt	iDownloadedContentSize;
+
+    /**
+     * Download progress dialog.
+     */
+    CFotaDLProgressDlg*     iDLProgressDlg;
+
+    /**
+     * Content size received in previous event
+     */
+    TInt                    iPreviousContentSize;
+
+    /**
+     * handles notifier completion
+     */
+	CFotaDownloadNotifHandler*  iNotifHandler;
+
+    
+    /**
+	* Indicates that this download should be reset. (could be inclded in progress)
+    */
+    TBool iDLNeedsReset;
+    
+    /**
+	* Progress state.
+    */
+    TFotaDLProgress iDLProgress;
+    
+    /**
+     * Showing OMA Content Descriptor
+     */
+    TBool iShowOMACDUI;
+
+    /**
+     * Showing Progress bar
+     */
+    TBool iShowDLPrgUI;
+    
+    /**
+     * Is download resumable?
+     */
+	TBool iDownloadResumable;
+	
+	/**
+	 * Is Fota Monitory service enabled?
+	 */
+	TBool iFMSEnabled;
+	
+	/**
+	 * Is Fota download active?
+	 */
+	TBool iDownloadActive;
+    /**
+     * Iap id to be used in download
+     */
+	TInt	iIapid;
+	
+	/**
+	 * Is download fresh?
+	 */
+	TBool iFreshDL;
+	
+	/**
+	 * Is user initiated resume?
+	 */
+	TBool iUserInitiatedResume;
+	
+	/**
+	 * Is fota operation started by user?
+	 */
+	TBool iIsjobStartedFromUI;
+	
+	/**
+	 * Value of SAN bit set by the remote Server
+	 */
+	TInt iSanValue;
+	
+	/**
+	 * Is suspend/cancel of download operation to be silent?
+	 */
+	TBool 	iSilentOpn;
+	
+	/**
+	 * to check whether downlaod is finalized or not 
+	 */
+	 TBool iDownloadFinalized;
+	 /**
+     * Class that checks for network availability 
+     */
+    CFotaNetworkRegStatus* iMonitor;
+
+    };
+
+
+
+
+
+NONSHARABLE_CLASS ( CFotaDownloadNotifHandler ) 
+        : public CActive 
+    {
+public: // new functions
+    static CFotaDownloadNotifHandler* NewL (CFotaDownload* aDownload);
+    
+    CFotaDownloadNotifHandler();
+    
+    ~CFotaDownloadNotifHandler();
+    /**
+     * Handle user action
+     *
+     * @since   S60   v3.1
+     * @param   None
+     * @return  None
+     */
+    virtual void RunL();
+
+
+     /**
+     * Handle leaving Runl
+     *
+     * @since   S60   v3.1
+     * @param   aError  error code
+     * @return  Error code
+     */
+    virtual TInt RunError(TInt aError);
+
+
+     /**
+     * Handle cancel of active object
+     *
+     * @since   S60   v3.1
+     * @param   none
+     * @return  none
+     */
+    void DoCancel();
+
+     /**
+     * Shows notifier and/or ends download
+     *
+     * @since   S60   v3.1
+     * @param   aNotetype	type of the note as defined in syncmlnotifier
+     * @param   aIntParam  Generic parameter, defined in syncmlnotifier
+     * @param   aMemoryNeeded	Amount of disk space needed. Only one notifier
+	 *							type consumes this.
+     * @param   aFinishOnly		Do not show notifier, finish download only
+     * @return  none
+     */
+    void LaunchNotifierL( const TSyncMLFwUpdNoteTypes aNotetype
+                            ,const TInt aIntParam
+                            ,const TInt aMemoryNeeded
+                            ,TBool aFinishOnly=EFalse );
+
+     /**
+     * Is any notifier displayed?
+     *
+     * @since   S60   v3.2
+     * @param   none
+     * @return  ETrue if yes, otherwise EFalse
+     */
+    TBool IsOpen();
+private:
+
+	CFotaDownload* iDownload;
+
+    /**
+     * Notifier for showing notes
+     */
+    RNotifier               iNotifier;
+
+    /**
+     * Notifier input parameters
+     */
+    TSyncMLFwUpdNotifParams     iNotifParams;
+
+    /**
+     * Notifier response 
+     */
+    TSyncMLFwUpdNotifRetValPckg  iDummyResponsePckg;
+    
+
+    };
+
+
+
+#endif
\ No newline at end of file