upnp/upnpstack/upnphttptransfer/inc/httpfile.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 02 Feb 2010 01:12:20 +0200
changeset 0 f5a58ecadc66
permissions -rw-r--r--
Revision: 201003

/** @file
* Copyright (c) 2007 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:  Represents one downloadable file
*
*/


#ifndef C_CHTTPFILE_H
#define C_CHTTPFILE_H


// System include files
#include <e32cmn.h>
#include <e32base.h>
#include <f32file.h>

// User include files
#include "httpheader.h"

/**
 * Class which represents one dowloaded/uploaded file  
 *
 * @lib httptransfer.lib
 * @since S60 v3.2
 */
NONSHARABLE_CLASS ( CHttpFile ) : public CBase
    {
public:

    /**
     * Constructor
     *
     * @since S60 v3.2
     * @param aKey Identifier of the file
     * @param aUri Uri of the file
     * @param aPath Local path of the file
     * @return Instance of CHttpFile object
     */
    static CHttpFile* NewL( TAny* aKey, const TDesC8& aUri,
                            const TDesC& aPath );

    /**
     * Constructor
     *
     * @since S60 v3.2
     * @param aKey Identifier of the file
     * @param aUri Uri of the file
     * @param aPath Local path of the file
     * @return Identifier of the object
     */
    static CHttpFile* NewLC( TAny* aKey, const TDesC8& aUri, 
                             const TDesC& aPath );

    /**
     * Constructor
     *
     * @since S60 v3.2
     * @param aKey Identifier of the file
     * @param aUri Uri of the file
     * @param aFileHandle Handle to the file
     * @return Instance of CHttpFile object
     */
    static CHttpFile* NewL( TAny* aKey, const TDesC8& aUri,
                            const RFile& aFileHandle );

    /**
     * Constructor
     *
     * @since S60 v3.2
     * @param aKey Identifier of the file
     * @param aUri Uri of the file
     * @param aFileHandle Handle to the file
     * @return Identifier of the object
     */
    static CHttpFile* NewLC( TAny* aKey, const TDesC8& aUri, 
                             const RFile& aFileHandle );

    /**
     * Virtual destructor
     *
     * @since S60 v3.2
     */
    ~CHttpFile();

    /**
     * Setter for the member variable iTrackProgress
     *
     * @since S60 v3.2
     * @param aValue Value of the progress flag
     * @return Identifier of the object
     */
    void TrackProgress( TBool aValue );

    /**
     * Returns if tracking is set on.
     *
     * @since S60 v3.2
     * @return True if tracking is on, false otherwise
     */
    TBool TrackingOn() const;
    
    /**
     * Getter for the member variable iKey
     *
     * @since S60 v3.2
     * @return Identifier of the object
     */
    TAny* Key() const;

    /**
     * Getter for the iUri member variable
     *
     * @since S60 v3.2
     * @return Reference to the Uri
     */
    const HBufC8* Uri() const;

    /**
     * Setter for iUri
     *
     * @since S60 v3.2
     */
    void SetUriL( const TDesC8& aUri );
    
    /**
     * Getter for the iPath member variable
     *
     * @since S60 v3.2
     * @return Pointer to the path
     */
    const HBufC* Path() const;

    /**
     * Getter for the filehandle
     *
     * @since S60 v3.2
     * @return Handle to the file
     */
    RFile FileHandle() const;

    /**
     * Sets a header
     *
     * @since S60 v3.2
     * @param aFieldName The field name, e.g. 'Accept'
     * @param aFieldValue The field value. e.g. 'text/plain'
     */
    void SetHeaderL( const TDesC8& aFieldName, const TDesC8& aFieldValue );

    /**
     * Getter for header array
     *
     * @since S60 v3.2
     * @return Array of CHttpHeader objects which are set to this file
     */
    RPointerArray<CHttpHeader>& Headers();

    /**
     * Creates the file in the file system
     *
     * @since S60 v3.2
     */
    void CreateFileInFileSystemL();

    /**
     * Deletes the file from the file system
     *
     * @since S60 v3.2
     */
    void DeleteFileFromFileSystemL();
    
    /**
     * Closes the file
     */
    void CloseFile();

private:

    /**
     * Default constructor
     *
     * @since S60 v3.2
     * @param aKey Identifier of the file
     * @return Identifier of the object
     */
    CHttpFile( TAny* aKey );

    /**
     * Default constructor
     *
     * @since S60 v3.2
     * @param aKey Identifier of the file
     * @param aFileHandle Handle to the file
     * @return Identifier of the object
     */
    CHttpFile( TAny* aKey, const RFile& aFileHandle );

    /**
     * Second phase constructor
     *
     * @since S60 v3.2
     * @param aUri Uri of the file
     * @param aPath Local path of the file
     */
    void ConstructL( const TDesC8& aUri, const TDesC& aPath );

    /**
     * Second phase constructor
     *
     * @since S60 v3.2
     * @param aUri Uri of the file
     */
    void ConstructL( const TDesC8& aUri );

private: 

    /**
     * Indicator if tracking of the progress is switched on
     */
    TBool iTrackProgress;

    /**
     * Identifier of the object
     * Not own.
     */
    TAny* iKey;

    /**
     * Uri
     * Own.
     */
    HBufC8* iUri;

    /**
     * Full path on local system
     * Own.
     */
    HBufC* iPath;
    
    /**
     * Array of headers
     */
    RPointerArray<CHttpHeader> iHeaderArray;
    
    /**
     * Handle to the file
     */
    RFile iFile;

    /**
     * File server session
     */
    RFs iFsSession;

    };

#endif // C_CHTTPFILE_H