diff -r 13d7c31c74e0 -r b183ec05bd8c fotaapplication/fotaserver/inc/FotaServer.h --- /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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#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 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