upnp/upnpstack/upnphttptransfer/inc/httpdownloadworker.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:  Handles download of a file
*
*/


#ifndef C_CHTTPDOWNLOADWORKER_H
#define C_CHTTPDOWNLOADWORKER_H


// User include files
#include "httptransferworker.h"
#include "httptransferobserver.h"
#include "httptransferbase.h"

// forward declarations
class MHttpWorkerObserver;

/**
 * This class downloads on single file.
 *
 * @lib httptransfer.lib
 * @since S60 v3.2
 */
NONSHARABLE_CLASS ( CHttpDownloadWorker ) : public CHttpTransferWorker, MHttpNotifyTimerObserver
    {
public:

    /**
     * Constructor
     *
     * @since S60 v3.2
     * @param aObserver Transfer observer
     * @param aIAPId IAP id
     * @param aBuffersize Size of the buffer
     * @param aCallback Call back to workerobserver
     */
    static CHttpDownloadWorker* NewL( MHttpTransferObserver& aObserver,
                                      TUint aIAPId,
                                      TUint aBufferSize,
                                      MHttpWorkerObserver& aCallback );

    /**
     * Constructor
     *
     * @since S60 v3.2
     * @param aObserver Transfer observer
     * @param aIAPId IAP id
     * @param aBufferSize Size of the buffer
     * @param aCallback Call back to workerobserver
     */
    static CHttpDownloadWorker* NewLC( MHttpTransferObserver& aObserver,
                                       TUint aIAPId,
                                       TUint aBufferSize,
                                       MHttpWorkerObserver& aCallback );

    /**
     * Destructor
     *
     * @since S60 v3.2
     */
    virtual ~CHttpDownloadWorker();

// from base class CHttpTransferWorker
    
    /**
     * From base class CHttpTransferWorker
     * Stops the transfer of the file
     *
     * @since S60 v3.2
     */
    void CancelTransfer();
    
    /**
     * From base class CHttpTransferWorker
     * Starts the processing of a file.
     * Asynchronous.
     *
     * @since S60 v3.2
     */
    virtual void StartProcessL();

    /**
     * From base class CHttpTransferWorker
     * Called by framework to notify about transaction events.
     *
     * @since S60 v3.2
     * @param aTransaction Transaction, where the event occured.
     * @param aEvent Occured event.
     */
    void MHFRunL( RHTTPTransaction aTransaction,
                  const THTTPEvent& aEvent );

    /**
     * From base class CHttpTransferWorker
     * Called by framework when leave occurs in handling of 
     * transaction event.
     *
     * @since S60 v3.2
     * @param aError The leave code that occured.
     * @param aTransaction The transaction that was being processed 
     * @param aEvent The event that was being processed
     * @return Error code
     */
    TInt MHFRunError( TInt aError, 
                      RHTTPTransaction aTransaction,
                      const THTTPEvent& aEvent );

private:

    /**
     * Deletes partially downloaded file from file system.
     *
     * @since S60 v3.2
     */
    void DeleteFileL();

    /**
     * Checks disk space
     * @param aSize to be written to file
     * @since S60 v3.2
     */
    void CheckDiskSpaceL(TInt aSize);
    
    /**
     * Writes the last part of body into a file
     *
     * @since S60 v3.2
     */
    void WriteTailIntoFileL();

    /**
     * Handles the HTTP response data
     *
     * @since S60 v3.2
     * @param aTransaction HTTP transaction
     */
    void HandleResponseDataL( RHTTPTransaction aTransaction );

    /**
     * Sends HTTP GET request
     *
     * @since S60 v3.2
     */
    void HttpGetL();

    /**
     * Performs the actions needed when download is finished
     *
     * @since @S60 v3.2
     * @param aTransaction HTTP transaction
     */
    void FinishDownload( RHTTPTransaction aTransaction );
    
    /**
     * Default constructor
     *
     * @since S60 v3.2
     * @param aIAPId IAP id
     * @param aBufferSize Size of the buffer
     * @param aObserver Transfer observer
     * @param aCallback Call back for workerobserver
     */
    CHttpDownloadWorker( TUint aIAPId,
                         TUint aBufferSize,
                         MHttpTransferObserver& aObserver,
                         MHttpWorkerObserver& aCallback );

    /**
     * Second phase constructor
     *
     * @since S60 v3.2
     */
    void ConstructL();
    
    /**
     * Terminates the transfer and informs the client through
     * TransferComplete.
     *
     * @since S60 v3.2
     * @param aError Error code
     */
    void CompleteAndNotifyL( TInt aError );
    
    /**
    * Callback function for timer expirations.
    * @since Series60 5.0 HN
    * @param aTimer Timer that has expired.
    **/
    void TimerEventL( CHttpNotifyTimer* aTimer );
    
private: 

    /**
     * Size of the downloaded file
     */ 
    TInt iFileSizeFromHeader;
    
    /**
     * Amount of transferred bytes
     */     
    TInt iBytesTransferred;
    
    /**
     * Response body
     * Own.
     */
    HBufC8* iResponseBody;
    
    /**
    * Timeout timer for current session
    */
    CHttpNotifyTimer* iSessionTimer;
    
    };

#endif // C_CHTTPDOWNLOADWORKER_H