fotaapplication/fotaserver/FotaStorage/inc/fotaDiskStorage.h
changeset 0 b497e44ab2fc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fotaapplication/fotaserver/FotaStorage/inc/fotaDiskStorage.h	Thu Dec 17 09:07:52 2009 +0200
@@ -0,0 +1,222 @@
+/*
+* Copyright (c) 2009 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: Implementation of fotaserver component
+* 	This is part of fotaapplication.
+*
+*/
+
+
+#ifndef __FOTADISKSTORAGE_H_
+#define __FOTADISKSTORAGE_H_
+
+#include <s32file.h>
+
+
+#include "fotastorage.h"
+
+
+// CONSTANTTS
+// const TInt KDummyFileSize(2000000);   // total of 2MB should be reserved for fota pkgs
+
+#ifndef _FOTA_UNIT_TESTER
+_LIT( KDummyFilePath, "c:\\private\\102072C4\\" );
+#else
+_LIT( KDummyFilePath, "c:\\private\\10009cf4\\" );
+#endif 
+_LIT( KDummyFileName, "reserved");  // dummy file name 
+
+
+const TInt KFileReservationDefaultSize ( 5000000);
+const TInt KFileChunkDefaultSize ( 120000 );
+
+/*
+* Implementation of fotastorage. This implementation
+* directly stores the update package to user disk. 
+* Private directory of the calling process will be used
+* for storage.
+*/
+
+class CFotaDiskStorage : public CFotaStorage
+{
+    public:
+
+    /**
+     * NewL
+     * @since   S60   v3.1
+     * @param   none
+     * @return  New instance
+     */
+      static CFotaDiskStorage* NewL();
+
+
+    /**
+     * Two phase Constructor
+     * @since   S60   v3.1
+     * @param   none
+     * @return  none
+     */
+		void ConstructL();
+     
+    // From base classes
+
+    /**
+     * Two phase Constructor
+     * @since   S60   v3.1
+     * @param   none
+     * @return  none
+     */
+		TInt AdjustDummyStorageL();
+
+    /**
+     * Opens stream to package file
+     * @since   S60   v3.1
+     * @param   pkgid	Package id
+     * @param   aPkgStore	Stream to the file
+     * @return  err
+     */
+    TInt OpenUpdatePackageStoreL(const TInt aPkgId,TInt aNewDummySize
+                                  , RWriteStream*& aPkgStore);
+
+    /**
+     * Gets the update package size
+     * @since   S60   v3.2
+     * @param   aPkgid	Package id
+     * @param   aSize	Size in bytes
+     * @return  None
+     */
+
+     void GetDownloadedUpdatePackageSizeL(const TInt aPkgid, TInt& aSize);
+
+
+    /**
+     * Closes stream to package file
+     * @since   S60   v3.1
+     * @param   pkgid	Package id
+     * @return  none
+     */
+		void UpdatePackageDownloadCompleteL(const TInt aPkgId);
+
+    /**
+     * Gets path to package
+     * @since   S60   v3.1
+     * @param   pkgid	Package id
+     * @param   aPath	path to file
+     * @return  none
+     */
+		void GetUpdatePackageLocationL(const TInt aPkgId, TDes8& aPath );
+
+
+    /**
+     * Gets present packages
+     * @since   S60   v3.1
+     * @param   aPackageIdList	List of package ids
+     * @return  none
+     */
+		void GetUpdatePackageIdsL(TDes16& aPackageIdList);
+
+
+    /**
+     * Checks if there is space for pkg. If not (doesnt fit to filesystem)
+     * returns needed space in aSize.
+     * @since   S60   v3.1
+     * @param   aSize		Space of pkg. On return, needed space.
+     * @return  Whether there's free space
+     */
+		TFreeSpace IsPackageStoreSizeAvailableL(TInt& aSize);
+
+
+    /**
+     * Deletes update package
+     * returns needed space in aSize.
+     * @since   S60   v3.1
+     * @param   apPkgid Package id
+     * @return  none
+     */
+		void  DeleteUpdatePackageL (const TInt aPkgId);
+
+
+
+    /**
+     * Destructor
+     * @since   S60   v3.1
+     * @param   none
+     * @return  none
+     */
+		virtual ~CFotaDiskStorage ();
+		
+public:
+
+
+    /**
+     * Stream to pkg file
+     */
+		RFileWriteStream    iFileWriteStream;
+
+
+    /**
+     * File server session
+     */
+		RFs                 iFs;
+
+    /**
+     * Size of reservation file. Configured via cenrep.
+     */
+		TInt                iDummySize;
+
+
+
+    /**
+     * Size of chunk used to separate update package file content from
+     * reservation file.
+     */
+		TInt                iChunkSize;
+
+private: // new functions
+
+
+    /**
+     * Constructor
+     * @since   S60   v3.1
+     * @param   none
+     * @return  none
+     */
+    CFotaDiskStorage ();
+
+
+    /**
+     * Deletes the update package so that total space reservation file
+     * stays the same (ie 5MB). 
+     * @since   S60   v3.1
+     * @param 	dummy Handle to reservation file
+     * @param   aPkgId package file to be deleted
+     * @param   aAlreadyAllocated Already allocated bytes by other pkg files
+     * @return  none
+     */
+    void DoDeleteUpdatePackageL ( RFile& dummy, TInt aPkgId
+                                      , TInt aAlreadyAllocated=0);
+
+
+    /**
+     * Checks how much space is allocated by package files
+     * @since   S60   v3.1
+     * @param 	aSwupdSize Size allocated by package files
+     * @param   aDummySize Size allocated by reservation file
+     * @return  none
+     */
+     void SpaceAllocatedBySWUPDFilesL( TInt& aSwupdSize, TInt& aDummySize);
+
+};
+
+
+#endif //__FOTADISKSTORAGE_H_