upnp/upnpstack/dlnawebserver/inc/upnphttpfileaccess.h
changeset 0 f5a58ecadc66
--- /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 <e32base.h>
+#include <f32file.h>
+
+// 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