--- /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