diff -r 88ee4cf65e19 -r 1aa8c82cb4cb remotestoragefw/remotefilesystemplugin/inc/rsfwfsfilecb.h --- /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 +#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 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 + +