diff -r 000000000000 -r f5a58ecadc66 upnp/upnpstack/dlnawebserver/inc/upnphttpfileaccess.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/upnp/upnpstack/dlnawebserver/inc/upnphttpfileaccess.h Tue Feb 02 01:12:20 2010 +0200 @@ -0,0 +1,333 @@ +/** @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 +#include + +// FORWARD DECLARATIONS +class 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