fotaapplication/fotaserver/inc/FotaDlMgrClient.h
branchRCL_3
changeset 25 b183ec05bd8c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fotaapplication/fotaserver/inc/FotaDlMgrClient.h	Tue Aug 31 16:04:06 2010 +0300
@@ -0,0 +1,354 @@
+/*
+ * 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:   Fota download manager client 
+ *
+ */
+#ifndef FOTADLMGRCLIENT_H
+#define FOTADLMGRCLIENT_H
+
+#include <QtGui/QWidget>
+#include <QtGui>
+#include <QString>
+#include <QWidget>
+//All download manager related headers
+#include <dmcommon.h>
+#include <downloadmanager.h>
+#include <downloadevent.h>
+#include <download.h>
+#include <devicedialogconsts.h>
+#include <e32property.h>
+#include <e32def.h>
+
+//All orbit related headers
+#include <hbdialog.h>
+#include <hbdevicedialog.h>
+#include <hbdevicedialogsymbian.h>
+#include <hbsymbianvariant.h>
+
+//All user includes
+#include "FotaDlMgrClient.h"
+#include "FotaSrvDebug.h"
+#include <fotaengine.h>
+#include "FotaIPCTypes.h"
+#include "fotadiskstoragePrivateCRKeys.h"
+#include "fotafullscreendialog.h"
+#include "fotadevicedialogobserver.h"
+
+//Forward declarations
+class DownloadClient;
+class CFotaServer;
+class CFotaDownloadNotifHandler;
+
+using namespace WRT;
+
+enum TFreeSpace
+    {
+    EFitsToReservation, // fits to space reservation
+    EFitsToFileSystem, // doesn't fit to reservation,fits to FS
+    EDoesntFitToFileSystem
+    // doesn't fit to fs
+    };
+
+// System Critical Level (128KB) plus 5KB for fota operations.
+const TInt KSystemCriticalWorkingspace = 136192;
+_LIT( KReservedFileName, "reserved");
+_LIT( KDefaultPath, "C:\\private\\102072C4\\");
+_LIT( KPackageExtension, ".swupd");
+_LIT( KPackageExtensionAll, "*.swupd");
+_LIT( KDownloadTempDir, "FotaServer\\downloads\\");
+
+const QString DefaultPath = "C:\\private\\102072C4\\";
+const QString PackageName = "fwupdate.swupd";
+
+//Supported content types for firmware download
+const QString ContentTypeHttp = "application/vnd.nokia.swupd.dp2";
+const QString ContentTypeOmaDl = "application/vnd.oma.dd+xml";
+
+/**
+ *  This is the download manager client class. 
+ *
+ *  @lib    fotaserver
+ *  @since  SF^4
+ */
+class DownloadManagerClient : public QObject, MfotadevicedialogObserver
+    {
+Q_OBJECT
+
+public:
+    /**
+     * Two phase construction.
+     */
+    static DownloadManagerClient* NewL(CFotaServer* aServer);
+
+    /**
+     * The destructor
+     */
+    ~DownloadManagerClient();
+
+    /**
+     * This method returns the created DownloadManager pointer 
+     * 
+     * @since   SF^4
+     * @param   
+     * @return  the download manager pointer
+     */
+    DownloadManager* Manager();
+
+    /**
+     * Creates a single download from the given url.
+     * 
+     * @since   SF^4
+     * @param   the source url of the download
+     * @return  None. Can leave with system wide errors
+     */
+    void DownloadL(const TDesC8& url);
+
+    /**
+     * This method is called by the download client when the download begins.
+     * @since   SF^4
+     * @param   size - the size of the actual download
+     * @param   version - the version as specified in the OMA DL1.0 descriptor
+     * @return  None
+     */
+    void StartDownloadProgress(QString name, QString version, int size);
+
+    /**
+     * This method is called by the download client when the download is in progress.
+     * @since   SF^4
+     * @param   progress - progress of the download in percentage.
+     * @return  None
+     */
+    void UpdateDownloadProgress(int progress);
+
+    /**
+     * This method is called by the download client when the download is complete, either 
+     * successfully or unsuccessfully.
+     * 
+     * @since   SF^4
+     * @param   dlstate - the state of the single download
+     * @param   err0 - the last download error
+     * @return  None
+     */
+    void HandleDownloadEvent(Download::State dlstate, int err0);
+
+    /**
+     * This method is called by the download client when the download is interrupted due to client specific reasons.
+     * @since   SF^4
+     * @param   dlstate - the state of the single download
+     * @param   err0 - the last download error
+     * @return  None
+     */
+    void HandleClientInterrupt(Download::State dlstate, int err0);
+
+    /**
+     * This method tells if the download is active or not.
+     * @since   SF^4
+     * @param   None
+     * @return true, if active, otherwise false.
+     */
+    TBool IsDownloadActive();
+
+    /**
+     * The method finds the suitable path for a given download. It checks the availability of memory using the size provided.
+     * @since   SF^4
+     * @param   aSize - the size of the download
+     * @param   aPath - the suitable path for the download to happen
+     * @return  one of TFreeSpace - space available, space fits to reservation, space unavailable
+     */
+    TFreeSpace GetSuitablePath(TInt aSize, QString& aPath);
+
+    /**
+     * This method creates the required space reservation on the disk.
+     * @since   SF^4
+     * @param   None
+     * @return None
+     */
+    void CreateDiskReservation();
+
+    /**
+     * This method deletes the reservation on the path provided.
+     * @since   SF^4
+     * @param   path - the path where reservation to be deleted.
+     * @return None
+     */
+    void DeleteDiskReservation(QString& path);
+
+    /**
+     * This method deletes the update package on the disk.
+     * @since   SF^4
+     * @param   None
+     * @return None, can leave with system wide errors.
+     */
+    void DeleteUpdatePackageL();
+
+    /**
+     * This method will try to resume any suspended single download
+     * @since   SF^4
+     * @param   None
+     * @return  None, can leave with system wide errors.
+     */
+    void TryResumeDownloadL();
+
+    /**
+     * This method will try to pause any ongoing download
+     * @since   SF^4
+     * @param   None
+     * @return 
+     */
+    void PauseDownloadL();
+
+    /**
+     * This method will get the location of the update package
+     * @since   SF^4
+     * @param   aPathj - location of the update package
+     * @return None, can leave with system wide errors.
+     */
+    void GetUpdatePackageLocation(TDes& aPath);
+
+    /**
+     * This method will get size of the downloaded content
+     * @since   SF^4
+     * @param   None
+     * @return size of the package in bytes
+     */
+    TInt GetDownloadPackageSize();
+
+    /**
+     * This function shows the device dialog which is requested
+     * @since   SF^4
+     * @param   dialogid - the dialog id to be shown
+     * @param   aValue - the value to be passed, if any.
+     * @return 
+     */
+    void ShowDialogL(TFwUpdNoteTypes dialogid, TInt aValue = 0);
+
+public:
+    // from MfotadevicedialogObserver
+
+    void HandleDialogResponse(int response, TInt aDialogid);
+
+public slots:
+
+    /**
+     * This is the slot which receives the download manager events.
+     * @since   SF^4
+     * @param   event - the download manager event
+     * @return true if handled, otherwise false.
+     */
+    bool DownloadMgrEventRecieved(DownloadManagerEvent *event);
+
+private:
+
+    /**
+     * Constructor.
+     */
+
+    DownloadManagerClient(CFotaServer *aServer);
+
+    /**
+     * Two phase construction
+     */
+    void ConstructL();
+
+    /**
+     * This functions initializes the download manager
+     * @since   SF^4
+     * @param   None
+     * @return one of DLReturns
+     */
+    int InitDownloadMgr();
+
+    /**
+     * This function uninitializes the download manager.
+     * @since   SF^4
+     * @param   None
+     * @return None
+     */
+    void UninitDownloadMgr();
+
+    /**
+     * This function returns the access point name for a given access point id.
+     * @since   SF^4
+     * @param   aIapId - access point id
+     * @return access point name, can leave with system wide errors.
+     */
+    QString GetIapNameWithIdL(TInt aIapId);
+
+    /**
+     * This function calculates the disk space allocated for firmware update and reserved file.
+     * @since   SF^4
+     * @param   aSwupdSize, the size of the swupd files in bytes
+     * @param   aReservedSize, the size of the reserved file in bytes.
+     * @return None
+     */
+    void SpaceAllocatedBySWUPDFiles(TInt& aSwupdSize, TInt& aReservedSize);
+
+    /**
+     * This function maps the download errors to fota failure reasons
+     * @since   SF^4
+     * @param   err0 - the error in the single download
+     * @return None
+     */
+    void MapDownloadErrors(int err0);
+
+private:
+    /**
+     * The download manager instance
+     */
+    DownloadManager* iDownloadManager;
+
+    /**
+     * The fota download client instance
+     */
+    DownloadClient* iDownloadClient;
+
+    /**
+     * The fota server instance
+     */
+    CFotaServer* iFotaServer; // not owned
+
+    /**
+     * Is download manager initialized?
+     */
+    TBool iInitialized;
+
+    /**
+     * Is download submitted to download manager?
+     */
+    TBool iDownloadSubmitted;
+
+    /**
+     * Is download in progress?
+     */
+    TBool iProgress;
+
+    /**
+     * The file server instance
+     */
+    RFs iFs;
+
+    /**
+     * the reserved memory size in bytes
+     */
+    TInt iReservedSize;
+
+    /**
+     * The dialog variant maps which is exchanged with device dialog server
+     */
+
+    CHbSymbianVariantMap * iNotifParams;
+    CFotaDownloadNotifHandler* iNotifier;
+    };
+
+#endif // FOTADLMGRCLIENT_H