fotaapplication/fotaserver/inc/FotaDlClient.h
branchRCL_3
changeset 25 b183ec05bd8c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fotaapplication/fotaserver/inc/FotaDlClient.h	Tue Aug 31 16:04:06 2010 +0300
@@ -0,0 +1,269 @@
+/*
+ * 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 client
+ *
+ */
+#ifndef FOTADLCLIENT_H
+#define FOTADLCLIENT_H
+
+//All UI related headers
+#include <QWidget>
+#include <QtGui/QWidget>
+#include <QtGui>
+
+//All download manager related headers
+#include <dmcommon.h>
+#include <downloadmanager.h>
+#include <download.h>
+
+//All user includes
+#include "FotaSrvDebug.h"
+
+using namespace WRT;
+
+//Forward declarations
+class DownloadManagerClient;
+
+//Enums for mapping download manager operation status
+enum DLReturns
+    {
+    EOk = 0, ENotOk
+    };
+
+//Enums for type of download mechanism
+enum TDownloadType
+    {
+    THttpDownload = 0, //HTTP download mechanism
+    TOmaDL10Download, //OMA DL1.0 download mechanism
+    TUnknownType
+    //Unknown download mechanism
+    };
+
+//Enums for client (fota) side errors. This is used to know why client decided to pause/cancel the download.
+enum TClientErrorType
+    {
+    ErrorNone = 0, //No error
+
+    //Device side errors
+    UserCancelled = 100,//User cancelled download    
+    NeedMoreMemory, //Memory insufficient to start download
+
+    //Server side errors        
+    InvalidContentType = 200
+    //Content type invalid. ie. either HTTP nor OMA DL1.0
+    };
+
+/**
+ *  This is the download client class. 
+ *
+ *  @lib    fotaserver
+ *  @since  SF^4
+ */
+class DownloadClient : public QObject
+    {
+Q_OBJECT
+
+public:
+    /**
+     * Constructor.
+     */
+    DownloadClient(DownloadManagerClient* aObserver);
+
+    /**
+     * Destructor.
+     */
+    ~DownloadClient();
+
+    /**
+     * Creates a single download with the download manager
+     *
+     * @since   SF^4
+     * @param   url - the source which is to be downloaded
+     * @param   type - determines the type of download. Either parallel or sequential.
+     * @return  One of DLReturns
+     */
+    TInt CreateDownload(const QString& url, DownloadType type);
+
+    /**
+     * Sets the required attributes for the single download.
+     *
+     * @since   SF^4
+     * @return  One of DLReturns
+     */
+    TInt SetDownloadAttributes();
+
+    /**
+     * Gets the attribute of the single download
+     *
+     * @since   SF^4
+     * @param   attr - the attribute of the download for which value is needed.
+     * @return  The value of the attribute. Caller should read the value in right format.
+     */
+    QVariant GetDownloadAttribute(DownloadAttribute attr);
+
+    /**
+     * Starts the single download. Download should be created and attributes set before this.
+     *
+     * @since   SF^4
+     * @param   None
+     * @return  One of DLReturns
+     */
+    TInt Start();
+
+    /**
+     * Pauses the single download.
+     *
+     * @since   SF^4
+     * @param   Client reason for pausing the download.
+     * @return  One of DLReturns
+     */
+    TInt Pause(TClientErrorType aReason);
+
+    /**
+     * Resumes the single download.
+     *
+     * @since   SF^4
+     * @param   None
+     * @return  One of DLReturns
+     */
+    TInt Resume();
+
+    /**
+     * Cancels the single download.
+     *
+     * @since   SF^4
+     * @param   Client reason for cancelling the download.
+     * @return  One of DLReturns
+     */
+    TInt Cancel(TClientErrorType aReason);
+
+    /**
+     * Restarts the single download. This is equivalent to cancel and start on Download.
+     *
+     * @since   SF^4
+     * @param   None
+     * @return  None
+     */
+    TInt Restart();
+
+private slots:
+
+    /**
+     * The slot which receives all the single download events.
+     *
+     * @since   SF^4
+     * @param   event - the download event
+     * @return  true, if handled here. Otherwise false.
+     */
+    bool DownloadEventRecieved(DownloadEvent *event);
+
+private:
+    /**
+     * Called to update the progress of download to fota server. This fetches the percentage
+     * of download from download manager.
+     *  
+     * @since   SF^4
+     * @param   None
+     * @return  None
+     */
+    void UpdateDownloadProgress();
+
+    /**
+     * Called when download is complete, either successfully or unsuccessfully.
+     * The arguments to this function is read to know the actual status.
+     *
+     * @since   SF^4
+     * @param   dlevent - the event of the single download
+     * @param   err0 - the last error occured
+     * @return  None
+     */
+    void HandleDownloadComplete(Download::State dlstate, int err0 = 0);
+
+    /**
+     * Called to handle the post download interrupt operation when client cancels/pauses download.
+     * 
+     * @since   SF^4
+     * @param   dlstate - the state of the single download
+     * @param   err0 - the last error occured
+     * @return  None
+     */
+    void HandleClientInterrupt(Download::State dlstate, int err0);
+
+    /**
+     * Called to read the OMA DL1.0 download descriptor. This will update the fota server with size and version.
+     *
+     * @since   SF^4
+     * @param   None
+     * @return  None
+     */
+    void ReadDescriptorData();
+
+    /**
+     * Called to validate the content type of the download as received in header.
+     *
+     * @since   SF^4
+     * @param   aContent - the content type as received in the header
+     * @return  One of TDownloadType
+     */
+    TDownloadType CheckContentType(const QString aContent);
+
+    void SetSubDownloadAttributes();
+
+private:
+
+    /**
+     * The Fota download manger client. This is not owned
+     */
+    DownloadManagerClient* iFotaDlMgrClient;
+
+    /**
+     * The Download object of the single download
+     */
+    Download *iDownload;
+
+    /**
+     * Progress of the download. true when download progressing, otherwise false.
+     */
+    TBool iProgress;
+
+    /**
+     * The total size of the download (ie. update package).
+     */
+    int iTotalSize;
+
+    /**
+     * To tell if space check has happened or not, before the start of the download.
+     */
+    bool iSpaceChecked;
+
+    /**
+     * To tell if client has interrupted download or not. The reason will be in iClientError.
+     */
+    bool iClientinterrupted;
+
+    /**
+     * Holds the client error that caused the download to cancel or pause.
+     */
+    TClientErrorType iClientError;
+
+    /**
+     * The state of the single download. This corresponds to the state received in the download event slot.
+     */
+    Download::State iDlState;
+
+    TDownloadType iContentType;
+
+    };
+
+#endif // FOTADLCLIENT_H