--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/remotestoragefw/remotefilesystemplugin/inc/rsfwfsfilecb.h Wed Sep 01 12:15:08 2010 +0100
@@ -0,0 +1,190 @@
+/*
+* Copyright (c) 2003-2006 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: Remote File System Plug-in implementation
+*
+*/
+
+
+#ifndef CRSFWFSFILECB_H
+#define CRSFWFSFILECB_H
+
+// INCLUDES
+#include <f32fsys.h>
+#include "rsfwinterface.h"
+
+/**
+ * Classes that a plug-in file system must implement. A plug-in
+ * filesystem must implement CFileSystem, which is a factory class for
+ * a file system. That class must create objects derived from CMountCB,
+ * CFileCB, CDirCB and CFormatCB. These are defined in f32fsys.h
+ *
+ * @lib eremotefs.fsy
+ * @since Series 60 3.2
+ */
+class CRsfwFsFileCB : public CFileCB
+ {
+public: // Constructors and destructor
+
+ /**
+ * Constructor.
+ */
+ CRsfwFsFileCB();
+
+ /**
+ * Destructor.
+ */
+ ~CRsfwFsFileCB();
+
+public: // New functions
+
+ /**
+ * Prepares the class to read file from a local cache file
+ * @since Series 60 3.2
+ * @param aPath path of the cache file
+ * @return
+ */
+ void SetContainerFileL( const TDesC& aPath);
+
+public: // Functions from base class
+
+ /**
+ * From CFileCB Renames the file with the full file name provided.
+ * @since Series 60 3.2
+ * @param aNewName The new full name of the file.
+ * @return
+ */
+ void RenameL( const TDesC& aNewName );
+
+ /**
+ * From CFileCB Reads from an open file
+ * @since Series 60 3.2
+ * @param aPos Represents a position relative to the start of the file
+ * where ReadL() starts to read.
+ * @param aLength On entry, specifies the number of bytes to be read
+ * from the file. On return, contains the number of bytes
+ * read, but this is not valid if the function leaves.
+ * @param aDes Pointer to a descriptor into which the data is written.
+ * @param aMessage The client request.
+ * @return
+ */
+ void ReadL( TInt aPos,
+ TInt& aLength,
+ const TAny* aDes,
+ const RMessagePtr2& aMessage );
+
+ /**
+ * From CFileCB Writes to an open file
+ * @since Series 60 3.2
+ * @param aPos Represents a position relative to the start of the file
+ * where WriteL() starts to write.
+ * @param aLength Specifies the number of bytes to be written to the file.
+ * On return, the number of bytes written, but this is not
+ * valid if the function leaves.
+ * @param aDes Pointer to a descriptor containing the data to be written
+ * to the file.
+ * @param aMessage The client request.
+ * @return
+ */
+ void WriteL( TInt aPos,
+ TInt& aLength,
+ const TAny* aDes,
+ const RMessagePtr2& aMessage );
+
+ /**
+ * From CFileCB Extends or truncates the file by re-setting the file size.
+ * @since Series 60 3.2
+ * @param aSize The new file size in number of bytes.
+ * @return
+ */
+ void SetSizeL( TInt aSize );
+
+ /**
+ * From CFileCB Sets the attribute mask and the modified time of the file.
+ * @since Series 60 3.2
+ * @param aTime The new modified time, if the modified flag is set in aMask.
+ * @param aMask Bit mask containing bits set (to 1) that are to be set (to 1)
+ * in iAtt.
+ * @param aVal Bitmask containing bits set (to 1) that are to be unset (to 0)
+ * in iAtt.
+ * @return
+ */
+ void SetEntryL(const TTime& aTime,TUint aMask,TUint aVal);
+
+
+ /**
+ * From CFileCB Flushes, to disk, the cached information necessary for
+ * the integrity of recently written data, such as the file size.
+ * @since Series 60 3.2
+ * @return
+ */
+ void FlushDataL();
+
+ /**
+ * From CFileCB Flushes, to disk, all cached file data (e.g. attributes,
+ * modification time, file size).
+ * @since Series 60 3.2
+ * @return
+ */
+ void FlushAllL();
+
+
+public: // Data
+ // the fid of this file
+ TFid iThisFid;
+
+ // the fid of the parent, needed for rename
+ TFid iParentFid;
+
+ // If flush returned an error, we do not attempt to write the file to server in close()
+ // either, unless new data is written to the cache file. We assume that the application
+ // has handled the flush error, also this is required for example to make File Manager UI
+ // to work correctly (if user presses cancel when flushing), writing should be cancelled.
+ TBool iLastFlushFailed;
+
+
+private: // Data
+ // open file handle on the cache file
+ RFile iContFile;
+
+ // the path of the local cache
+ TBuf<KMaxPath> iCachePath;
+
+ // cached size bookkeeping
+ TInt iCachedSize;
+
+ // indicates whether a file was fetched to the local cache before writing
+ TBool iFetchedBeforeWriting;
+
+ // some varibles needed when flushing a big file
+ // in continuous parts (currently used in File
+ // Manager copy).
+
+ // how much already has been flushed
+ TInt iFlushedSize;
+
+ // how much has been written to since the file was opened
+ TInt iWrittenSize;
+
+ // the total size of the file, reported by client
+ // via RFile::SetSize()
+ TInt iReportedSize;
+
+ // does the server support writing the file partially
+ // assumed to be true unless we get KErrNotSupported
+ TBool iPartialWriteSupported;
+ };
+
+#endif // CRSFWFSFILECB_H
+
+