/** @file* Copyright (c) 2005-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: UpnpHttpFileAccess is a class responsible for serving * requested files to upload as well as for saving file that are * being downladed.**/#ifndef C_CUPNPHTTPFILEACCESS_H#define C_CUPNPHTTPFILEACCESS_H// INCLUDES#include <e32base.h>#include <f32file.h>// FORWARD DECLARATIONSclass CUpnpHttpSession;// CLASS DECLARATION/*** @brief CUpnpHttpFileAccess is used to send and receive files in Httpserver* and Httpsession.* @since Series60 2.6*/NONSHARABLE_CLASS (CUpnpHttpFileAccess) : public CBase {public: // Constructors and destructor /** * Constructor function. This constructor is used when file is served by * HttpServer. * @since Series60 2.6 * @param aSession Pointer to owning session of this CUpnpHttpFileAccess. * @param aHeaderBuffer Buffer that contains the headers of message to * be served. * @param aFilename Name of file to be served. * @param aFileSize Size of file to be served. * @return A new CUpnpHttpFileAccess instance. **/ static CUpnpHttpFileAccess* NewL( CUpnpHttpSession* aSession, const TDesC8& aHeaderBuffer, const TDesC16& aFilename, TInt aFileSize ); /** * Constructor function. This constructor is used when file is to be received. * @since Series60 2.6 * @param aSession Pointer to owning session of this CUpnpHttpFileAccess. * @param aFilename Name of file to be saved locally. * @param aHandle the thread log handle. * @return A new CUpnpHttpFileAccess instance. **/ static CUpnpHttpFileAccess* NewL( CUpnpHttpSession* aSession, const TDesC16& aFilename ); /** * Virtual Destructor function. **/ ~CUpnpHttpFileAccess();public: // New functions /** * Returns the number of bytes that has been transferred * @since Series60 2.6 * @return Number of bytes that has been transferred. **/ TInt TransferredBytes(); /** * Returns the number of bytes that is to be transferred, ie size of file. * @since Series60 2.6 * @return Number of bytes to be transferred. **/ TInt TransferTotal(); /** * Sets the reading position of the file. * @since Series60 2.6 * @param aNewPos Position of reading, counting from start of file. **/ void SetPosOfFile( TUint aNewPos ); /** * Returns the reading position of the file. * @since Series60 2.6 * @return Position of reading, counting from start of file. **/ TUint PosOfFile(); /** * Sets the offset of the local file at which should be downloaded content saved. * @since Series60 2.6 * @param aNewPos Offset of the local file from the start of the file. **/ void SetOffset( TUint aOffset ); /** * Sets the position where to stop reading the file. * @since Series60 2.6 * @param aNewPos position where to stop reading the file, counting from start of file. **/ void SetEndPosOfFile( TInt aNewEndPos ); /** * Returns the position where to stop reading the file. * @since Series60 2.6 * @return position where to stop reading the file, counting from start of file. **/ TInt EndPosOfFile(); /** * Sets the reading position of the headerbuffer. * @since Series60 2.6 * @param aNewPos Position of reading, counting from start of headerbuffer. */ void SetPosOfHeader( TUint aNewPos ); /** * Returns the filename of the served file. * @since Series60 2.6 * @return Name of file. **/ TDesC16& FileToServe(); /** * Gets bytes to be sent * @since Series60 3.2 * @param aPointer to write the read content * @param aBytesToSend Number of bytes to send. * @return ETrue, if transfer is finished; EFalse otherwise. **/ TBool GetL( TPtr8& aPointer, TInt aBytesToSend ); /** * Saves aBuffer at the end of file used in this CUpnpHttpFileAccess. * @since Series60 3.2 * @param aBuffer Content to save (append) to file. * @return error code **/ TInt SaveL( TDesC8& aBuffer ); /** * Sets the total size of file transfer (FileSize). * @since Series60 2.6 **/ void SetTotalSize( TInt aSizeToSet ); /** * Deletes file in error cases. * @since Series60 2.6 **/ void DeleteFile(); /** * Returnes if currently handled file is downloaded or uploaded. * @since Series60 2.6 * @return if currently handled file is downloaded or uploaded. **/ TBool Download(); /** * Returnes true if currently handled file is not removed. * @since Series60 3.2 * @return TRUE if processed file exist. **/ TBool FileExist(); /** * Returnes the number of bytes written * @since Series60 3.2 * @return TInt **/ TInt BytesWritten(); /** * Sets the encoding mode * @param TBool * @since Series60 3.2 **/ void SetEncodingMode(TBool aIsChunked); /** * Returns the encoding mode * @since Series60 3.2 * @return ETrue if chunked-encoded **/ TBool EncodingMode(); /** * Sets the size of the transfer * @since Series60 3.2 * @param TInt **/ void SetTransferTotal(TInt aLength); /** * Gets the headers of content to be sent * @since Series60 3.2 * @param TInt **/ const TDesC8& GetHeaders(); /** * Called after headers were queued to be sent * @since Series60 3.2 **/ void SetHeadersSent(); /** * True if HTTP headers sent * @since Series60 3.2 **/ TBool HeadersSent(); /** * True when chunk tranfer completes * @since Series60 3.2 **/ void SetChunkCompleted( TBool aCompleted );private: // Constructors /** * First phase constructor. This constructor is used when file is to be * sent from HttpServer. * @since Series60 2.6 * @param aFileSize Size of file to be served. **/ CUpnpHttpFileAccess( TInt aFileSize ); /** * First phase constructor. This constructor is used when file is to * be received. * @since Series60 2.6 **/ CUpnpHttpFileAccess(); /** * By default Symbian 2nd phase constructor is private. * @param aSession handle to parent session that owns this object. * @param aHeaderBuffer descriptor with message headers. * @param aFileName file name of the file to serve. */ void ConstructL( CUpnpHttpSession* aSession, const TDesC8& aHeaderBuffer, const TDesC16& aFilename ); /** * By default Symbian 2nd phase constructor is private. * @param aSession handle to parent session that owns this object. * @param aFileName file name of the file in which the incoming content is saved. */ void ConstructL( CUpnpHttpSession* aSession, const TDesC16& aFilename ); /** * Checks if whole file has been read - returns ETrue if yes * Close iTargetFile when returns ETrue */ TBool IsEndOfFile();private: // Data // Total Size of downloaded file, owned TInt iTotalSizeOfDownload; // Buffer that contains the headers of served message owned HBufC8* iHeaderBuffer; // Name of served file, owned HBufC16* iFileToServe; // Position to read or write file, owned TInt iPosInFile; // Position to stop read file at, owned TInt iEndPosOfFile; // Total Size of served file, owned TInt iSizeOfFile; // Position to read or write headerbuffer, owned TInt iPosToReadHeader; // Length of headers, owned TInt iHeaderLength; // Pointer to owning session, owned CUpnpHttpSession* iSession; // ETrue, if headers has been sent; EFalse otherwise, owned TBool iHeadersSent; // FileServer handle that is used to hold iFile open, owned RFs iFsSession; // File handle that is used for downloading and locking the // active file, owned RFile iFile; // Boolean to detect if it is download or upload, owned TBool iIsDownload; RFile iTargetFile; TInt iOpen; HBufC* iOpenedFile; //bytes already written TInt iBytesWritten; //if data is chunked TBool iIsChunked; //if chunk transfer is completed TBool iIsChunkCompleted; //activated when resource closed and deleted TBool iIsDeleted; };#endif //C_CUPNPHTTPFILEACCESS_H// End Of File