fotaapplication/fotaserver/inc/FotaServer.h
branchRCL_3
changeset 25 b183ec05bd8c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fotaapplication/fotaserver/inc/FotaServer.h	Tue Aug 31 16:04:06 2010 +0300
@@ -0,0 +1,740 @@
+/*
+ * 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:   Header file for CFotaServer
+ *
+ */
+
+#ifndef __FOTASERVER_H__
+#define __FOTASERVER_H__
+
+// INCLUDES
+
+#include <coemain.h>
+#include <s32file.h>
+#include <e32property.h>
+#include <SyncMLClient.h>
+#include <SyncMLClientDM.h>
+#include <hwrmpowerstatesdkpskeys.h>
+#include <SyncMLObservers.h>
+#include <devicedialogconsts.h>
+#include <hbsymbianvariant.h>
+#include <hbmainwindow.h>
+#include "fotaserverPrivateCRKeys.h"
+#include "FotaIPCTypes.h"
+#include "FotaDB.h"
+#include "fotaConst.h"
+#include "fotaupdate.h" 
+#include "fmsclient.h"	//The FMS Client header file
+#include "FotaSrvDebug.h"
+#include "fotadevicedialogobserver.h"
+
+/** If download is active this P&S key is set to ETrue, otherwise EFalse. 
+ * The key is owned by omadmappui**/
+const TUint32 KFotaServerActive = 0x0000008;
+#define __LEAVE_IF_ERROR(x) if(KErrNone!=x) {FLOG(_L("LEAVE in %s: %d"), __FILE__, __LINE__); User::Leave(x); }
+
+//Forward declarations
+class FotaFullscreenDialog;
+/** File that stores the firmware version at the start of download. This is in fota's private directory*/
+_LIT (KSWversionFile, "swv.txt");
+
+/** Time and the interval download finalizing retries*/
+const TInt KDownloadFinalizerWaitTime(1000000);
+
+/** Time interval between syncml session retry attempts*/
+const TInt KSyncmlSessionRetryInterval(60000000);
+
+/** Time and the interval between the fota shutdownload retries*/
+const TTimeIntervalMicroSeconds32 KFotaTimeShutDown(10000000);
+
+/** How many times generic alert sending should be tried in row. */
+const TInt KSyncmlAttemptCount = 3;
+
+/** How many times a download can be restarted when a non-resumable interrupt occurs. */
+const TInt KMaxDownloadRestartCount = 3;
+
+_LIT_SECURITY_POLICY_C1( KReadPolicy, ECapabilityReadDeviceData );
+_LIT_SECURITY_POLICY_C1( KWritePolicy, ECapabilityWriteDeviceData );
+_LIT_SECURITY_POLICY_PASS(KAllowAllPolicy);
+
+// FORWARD CLASS DECLARATION
+
+class CFotaUpdate;
+class CFotaSrvApp;
+class CFotaNetworkRegStatus;
+class DownloadManagerClient;
+class CFotaDownloadNotifHandler;
+/**
+ * Fota server. Handles client requests. Starts download and/or update.
+ *
+ *  This class is 
+ *
+ *  @lib    fotaserver
+ *  @since  S60 v3.1
+ */
+NONSHARABLE_CLASS( CFotaServer ) : public CServer2,
+        MSyncMLEventObserver,
+        MfotadevicedialogObserver
+    {
+    friend class CFotaSrvSession;
+    friend class CFotaUpdate;
+
+public:
+
+    // Member functions
+
+    static CFotaServer* NewInstance(HbMainWindow& mainwindow);
+
+    /**
+     * Destructor.
+     */
+    virtual ~CFotaServer();
+
+public:
+
+    // All functions called from the session
+    /**
+     * Start download
+     *
+     * @since   S60   v3.1
+     * @param   aParams     Package state params to be save in db
+     * @param   aPkgURL     URL
+     * @return  none
+     */
+    void DownloadL(TDownloadIPCParams aParams, const TDesC8& aPkgURL,
+            TFotaClient aRequester, TBool aSilent, TBool aUpdateLtr);
+
+    /**
+     * Pauses ongoing download
+     *
+     * @since   S60   v3.1
+     * @param   none
+     * @return  none, can leave with system wide errors
+     */
+    void PauseDownloadL();
+
+    /**
+     * Start update
+     *
+     * @since   S60   v3.1
+     * @param   aClient - the client which invoked the update
+     * @return  none, can leave with system wide errors
+     */
+    void TryUpdateL(TFotaClient aClient);
+
+    /**
+     * Update, triggered by scheduler
+     *
+     * @since   S60   v3.1
+     * @param   aUpdate - Update details
+     * @param   aClient - the client which invoked the update
+     * @return  none, can leave with system wide errors
+     */
+    void ScheduledUpdateL(TFotaScheduledUpdate aUpdate, TFotaClient aClient);
+
+    /**
+     * Delete swupd package
+     *
+     * @since   S60   v3.1
+     * @param   aPkgId - Package id
+     * @return  none, can leave with system wide errors
+     */
+    void DeletePackageL(const TInt aPkgId);
+
+    /**
+     * Get state of a swupd package
+     *
+     * @since   S60   v3.1
+     * @param   aPkgId - Package id
+     * @return  Package state, can leave with system wide errors
+     */
+    TPackageState GetStateL(const TInt aPkgId);
+
+    /**
+     * Tries to resume the download.
+     *
+     * @since   S60   v5.2
+     * @param   aClient the client which triggers resume
+     * @param   aSilentDl	Whether to query user for resume?
+     * @return  None, can leave with system wide errors
+     */
+    void TryResumeDownloadL(TFotaClient aClient, TBool aSilentDl);
+
+    /**
+     * Get ids of present swupd packages
+     *
+     * @since   S60   v3.1
+     * @param   aPackageIdList  On return, ids will be here
+     * @return  None, can leave with system wide errors
+     */
+    void GetUpdatePackageIdsL(TDes16& aPackageIdList);
+
+    /**
+     * Get time of last update
+     *
+     * @since   S60   v3.1
+     * @param   aTime       On return, time of last update
+     * @return  None, can leave with system wide errors
+     */
+    void GetUpdateTimeStampL(TDes16& aTime);
+
+    void GetCurrentFwDetailsL(TDes8& aName, TDes8& aVersion, TInt& aSize);
+
+    /**
+     * Do cleanup for package
+     *
+     * @since   S60   v3.1
+     * @param   aPackageID Packageid
+     * @return  None
+     */
+    void ResetFotaStateL(const TInt aPackageID);
+
+    /**
+     * Set download to be finalized. 
+     *
+     * @since   S60   v3.1
+     * @param   aDLState    Final state of the download
+     * @return  None, can leave with system wide errors
+     */
+    void FinalizeDownloadL();
+
+    /**
+     * Callback function to notify the network status
+     *
+     * @since S60	v3.2
+     * @param Status of network connection
+     * @return None
+     */
+    void ReportNetworkStatus(TBool status);
+
+    //All user interface functions
+
+    /**
+     * Function to start the full screen dialog
+     *
+     * @since SF4
+     * @param aSize - the full size of the download
+     * @param aVersion - the version of the firmware upate
+     * @param aName - the name of the firmware update
+     * @return None
+     */
+    void StartDownloadDialog(const QString &aName, const QString &aVersion,
+            const TInt &Size);
+
+    /**
+     * Function to update the full screen dialog with download progress
+     *
+     * @since SF4
+     * @param aProgress - the download progress in percentage
+     * @return None
+     */
+    void UpdateDownloadDialog(TInt aProgress);
+
+    /**
+     * Function to show any dialog within fota server 
+     *
+     * @since SF4
+     * @param dialogid -the dialog identifier
+     * @return None
+     */
+    void ShowDialogL(TFwUpdNoteTypes aDialogid);
+
+    /**
+     * Function that handles all the user responses on full screen dialog
+     *
+     * @since SF4
+     * @param aResponse - key response
+     * @return None
+     */
+    void HandleFullScreenDialogResponse(TInt aResponse);
+
+    /**
+     * Function called from the fota update when battery condition changes 
+     *
+     * @since SF4
+     * @param aStatus - status of the battery, true if low, false if acceptable
+     * @return None
+     */
+    void UpdateBatteryLowInfo(TBool aStatus);
+
+    /**
+     * Returns the full screen dialog pointer
+     *
+     * @since SF4
+     * @param none
+     * @return pointer to full screen dialog instance
+     */
+    FotaFullscreenDialog* FullScreenDialog();
+
+    /**
+     * Sets the phone's startup reason which will used by Fota Startup Pluggin to any decision.
+     *
+     * @since   S60   v3.2
+     * @param   aReason     Startup reason, either download interrupted
+     * @return  None
+     */
+    void SetStartupReason(TInt aReason);
+
+    void ConstructApplicationUI(TBool aVal);
+    void SetServerActive(TBool aValue);
+    
+    void FinalizeUpdate();
+
+public:
+    // member variables
+
+    /**
+     * The package state of the firmware update
+     */
+
+    TPackageState iPackageState;
+
+    /**
+     * Used for package state saving.
+     */
+    CFotaDB* iDatabase;
+    
+    
+    TBuf8<KMaxFileName> iLastFwUrl;
+
+public:
+    // from  base classes
+
+    /**
+     * Handle syncml event
+     * @param    aEvent
+     * @param    aIdentifier
+     * @param    aError
+     * @param    aAdditionalData
+     * @return   none
+     */
+    void OnSyncMLSessionEvent(TEvent aEvent, TInt aIdentifier, TInt aError,
+            TInt aAdditionalData);
+
+    /**
+     * Function that is called when any user action happens on the dialogs or full screen dialog
+     *
+     * @since SF4
+     * @param response - key press
+     * @return None
+     */
+    void HandleDialogResponse(int response, TInt aDialogid);
+
+    //All finalizing functions
+    /**
+     * Finalize download
+     *
+     * @since   S60   v3.1
+     * @param   None
+     * @return  None, can leave with system wide errors
+     */
+    void DoFinalizeDownloadL();
+
+    /**
+     * Read update result file and report result back to DM server
+     *
+     * @since   S60   v3.1
+     * @param   None
+     * @return  None, can leave with system wide errors
+     */
+    void DoExecuteResultFileL();
+
+    /**
+     * Close syncml session
+     *
+     * @since   S60 v3.1
+     * @param none
+     * @return  None, can leave with system wide errors
+     */
+    void DoCloseSMLSessionL();
+
+    /**
+     * When called, will try to shut the server when possible.
+     * This will use the timer to shut down.
+     *
+     * @since   SF4
+     * @param none
+     * @return  None
+     */
+    void StopServerWhenPossible();
+
+    void ServerCanShut(TBool aParam);
+    
+    TBool DecrementDownloadRestartCount();
+	
+    void SetVisible(TBool aVisible);
+
+protected:
+    // from base classes
+
+    /**
+     * Calls when a New session is getting created
+     * @param aVersion
+     * @param aMessage
+     * @return CSession2*
+     */
+    CSession2* NewSessionL(const TVersion& aVersion,
+            const RMessage2& aMessage) const;
+
+    /**
+     * DoConnect. 
+     *
+     * @since   S60   v3.1
+     * @param   aMessage    IPC message
+     * @return  none
+     */
+    void DoConnect(const RMessage2& aMessage);
+
+    void DropSession();
+
+private:
+
+    /**
+     * C++ default constructor.
+     */
+    CFotaServer(HbMainWindow& mainwindow);
+
+    /**
+     * ConstructL
+     *
+     * @since   S60   v3.1
+     * @param   none
+     * @return  none
+     */
+    virtual void ConstructL();
+
+    /**
+     * Latter part of constructing. It's ensured that parent fotaserver is 
+     * constructed only once, and child fotaserver is not constructed at all.
+     * Client fotaserver has a task of saving swupd as its only task. It should
+     * not update swupd states.
+     *
+     * @since   S60   v3.1
+     * @param   aMessage    Client process details
+     * @return  none
+     */
+    void ClientAwareConstructL(const RMessage2 &aMessage);
+
+    /**
+     * Resets the fota state
+     * @since S60	v3.2
+     * @param IPC params
+     * @return None
+     */
+
+    void ResetFotaStateToFailL();
+
+    /**
+     * Starts network monitoring operaiton for defined interval and retries
+     *
+     * @since S60	v3.2
+     * @param None
+     * @return None
+     */
+    void StartNetworkMonitorL();
+
+    /**
+     * Creates the disk reservation as set in the configuration
+     *
+     * @since SF4
+     * @param 
+     * @return None
+     */
+    void CreateDiskReservation();
+
+    /**
+     * Deletes the disk reservation in the given absolute path
+     *
+     * @since SF4
+     * @param 
+     * @return None
+     */
+    void DeleteDiskReservation(TDesC& path);
+
+    /**
+     * Sets the appropriate access point id for the download
+     *
+     * @since SF4
+     * @param none
+     * @return None, can leave with system wide errors.
+     */
+    void SetIapToUseL();
+
+    /**
+     * Invoke Fota Monitory Service when the download gets suspended
+     *
+     * @since   S60   v3.2
+     * @return  None
+     */
+    void InvokeFmsL();
+
+    /**
+     * Cancels any outstanding request for resume notification
+     *
+     * @since   S60   v3.2
+     * @return  None
+     */
+    void CancelFmsL();
+
+    /**
+     * Check s/w version with the current version
+     *
+     * @since   S60   v3.2
+     * @param   none
+     * @return  Bool value(matches or not)
+     */
+    TBool CheckSWVersionL();
+
+    /**
+     * Create DM session to DM server (identified by profileid)
+     *
+     * @since   S60   v3.1
+     * @param   aProfileId  DM profile id
+     * @param   aIapid      IAP id. If not kerrnone, will be used instead
+     *                      of profiles' IAP id.
+     * @return  none
+     */
+    void CreateDeviceManagementSessionL(TPackageState& aState);
+
+    /**
+     * Get the software version of the device
+     * @since S60   v3.2
+     * @param s/w version 
+     * @return error
+     */
+    TInt GetSoftwareVersion(TDes& aVersion);
+
+    /**
+     * Checks for IAP Id exists or not in commsdb
+     * IAPId used for resuming the paused download
+     * @since S60   v5.0
+     * @param IapId
+     * @return ETrue/EFalse
+     */
+    TBool CheckIapExistsL(TUint32 aIapId);
+
+    /**
+     * Checks if the drive is busy due to encryption
+     *
+     * @since SF4
+     * @param None
+     * @return true, if busy, else false
+     */
+    TBool IsDeviceDriveBusyL();
+
+    /**
+     * The downloader manager object
+     *
+     * @since SF4
+     * @param 
+     * @return None
+     */
+    DownloadManagerClient* DownloaderL();
+
+    /**
+     * Sets the update requester
+     *
+     * @since SF4
+     * @param aRequester - the requester of firmware update
+     * @return None
+     */
+    void SetUpdateRequester(TFotaClient aRequester);
+
+    /**
+     * Gets the update requester
+     *
+     * @since SF4
+     * @param 
+     * @return None
+     */
+    TFotaClient GetUpdateRequester();
+
+    /**
+     * Reports firmware update status to the requester
+     *
+     * @since SF4
+     * @param astate - the package state that has the status
+     * @return None
+     */
+    void ReportFwUpdateStatusL(TPackageState& aState);
+
+    /**
+     * Loops for the battery status whilst full screen dialog is open
+     * 
+     * @since SF4
+     * @param aBatteryLevel - the battery level
+     * @return None
+     */
+    void LoopBatteryCheckL(TBool aBatteryLevel);
+
+    /**
+     * Shows the full screen dialog
+     *
+     * @since SF4
+     * @param aType - type of the dialog
+     * @return None
+     */
+    void ShowFullScreenDialog(TInt aType);
+
+    /**
+     * Swaps the fota process from background to foreground
+     *
+     * @since SF4
+     * @param aState - true will bring to foreground, false to background
+     * @return None
+     */
+    //void swapProcess(TBool aState);
+
+    void ResetCounters();
+
+    TBool IsUserPostponeAllowed();
+
+    void DecrementUserPostponeCount();
+    
+    void WakeupServer();
+
+private:
+    // Data
+
+private:
+    // member variables    
+    /**
+     * Is server initialized?
+     */
+    TBool iInitialized;
+
+    /**
+     * The download manager client
+     */
+    DownloadManagerClient* iDownloader;
+
+    /**
+     * Used for starting update of fw.
+     */
+    CFotaUpdate* iUpdater;
+
+    /**
+     * Used for deleting download.
+     */
+    CPeriodic* iDownloadFinalizer;
+
+    /**
+     * Used for deleting update.
+     */
+    CPeriodic* iUpdateFinalizer;
+
+    /**
+     * Used for reading result file.
+     */
+    CPeriodic* iTimedExecuteResultFile;
+
+    /**
+     * Used for closing syncml session
+     */
+    CPeriodic* iTimedSMLSessionClose;
+
+    /**
+     * File server session
+     */
+    RFs iFs;
+
+    /**
+     * Tries to periodically shut down fotaserver
+     */
+    CPeriodic* iAppShutter;
+
+    /**
+     * Syncmlsession for creating dmsession
+     */
+    RSyncMLSession iSyncMLSession;
+
+    /**
+     * Class that checks for network availability 
+     * 
+     */
+    CFotaNetworkRegStatus* iMonitor;
+
+    /**
+     * How many times to try dm session
+     */
+    TInt iSyncMLAttempts;
+
+    /**
+     * sync job id
+     */
+    TSmlJobId iSyncJobId;
+
+    /**
+     * profile
+     */
+    TSmlProfileId iSyncProfile;
+
+    /**
+     * To tell whether Generic Alert sending is being retried or not. This is checked before shutting down fota server
+     * 
+     */
+    TBool iRetryingGASend;
+
+    /**
+     * To tell whether network is available to send Generic Alert.
+     * 
+     */
+    TBool iNetworkAvailable;
+
+    /**
+     * The Fota Monitory Client object
+     */
+    RFMSClient iFMSClient;
+
+    /**
+     * Holds the storage drive of the package.
+     */
+    TDriveNumber iStorageDrive;
+
+    /**
+     * The session count to fota server.
+     */
+    static TInt iSessionCount;
+
+    /**
+     * The full screen dialog 
+     */
+    FotaFullscreenDialog *iFullScreenDialog;
+
+    /**
+     * The notifier params to the dialogs
+     */
+    CHbSymbianVariantMap * iNotifParams;
+
+    CFotaDownloadNotifHandler * iNotifier;
+    /**
+     * Can the server shut?
+     */
+    TBool iServerCanShut;
+
+    /**
+     * Is async operation requested?
+     */
+    TBool iAsyncOperation;
+
+    TInt iDialogId;
+
+    TBool iConstructed;
+    
+    HbMainWindow& iMainwindow;
+    };
+
+#endif 
+
+// End of File