voipplugins/accountcreationplugin/engine/inc/acphttphandler.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 14 Sep 2010 21:02:05 +0300
branchRCL_3
changeset 23 755430a7d64b
parent 0 a4daefaec16c
permissions -rw-r--r--
Revision: 201033 Kit: 201035

/*
* Copyright (c) 2007-2009 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:  Declarition of CAcpHttpHandler
*
*/

 
#ifndef ACPHTTPHANDLER_H
#define ACPHTTPHANDLER_H

#include <e32base.h>
#include <http/rhttpsession.h>
#include <http/mhttpdatasupplier.h>
#include <http/mhttptransactioncallback.h>
#include <es_sock.h>

class RHTTPTransaction;
class MAcpHttpHandlerObserver;

/**
 *  CAcpHttpHandler class
 *  Declarition of CAcpHttpHandler.
 *
 *  @lib accountcreationplugin.lib
 *  @since S60 v3.2
 */
NONSHARABLE_CLASS( CAcpHttpHandler ) : public CActive,
                                       public MHTTPDataSupplier,
                                       public MHTTPTransactionCallback
    {
public: 

    /**
     * Two-phased constructor.
     *
     * @param aObserver for observer
     */
    static CAcpHttpHandler* NewL( MAcpHttpHandlerObserver& aObserver );

    /**
     * Two-phased constructor.
     *
     * @param aObserver for observer
     */
    static CAcpHttpHandler* NewLC( MAcpHttpHandlerObserver& aObserver );

    /**
     * Destructor.
     */
    virtual ~CAcpHttpHandler();

    /**
     * Fetches data from network.
     *
     * @since S60 v3.2
     * @param aUrl Data URL.
     * @param aContentType Content type.
     * @param aBody Post data.
     * @param aMimeTypeImage Image's mime type.
     * @param aSessionId Session id to be stored in a cookie. Can be KNullDesC8.
     */
    void GetDataL( 
        const TDesC8& aUrl, 
        const TDesC8& aContentType,
        const TDesC8& aBody,
        TBool aMimeTypeImage,
        const TDesC8& aSessionId,
        TBool aGetSisFile = EFalse );

    /**
     * Cancels ongoing transaction and frees the resources.
     *
     * @since S60 v3.2
     */
    void CancelTransaction();
    
    /**
     * Shuts down connection (RConnection and RSocketServ).
     * 
     * @since S60 v3.2
     */
    void ShutdownConnection();
    
    /**
     * Handles known HTTP headers.
     * 
     * @since S60 v3.2
     * @param aTransaction HTTP transaction that received the headers.
     */
    void ProcessHeadersL( RHTTPTransaction& aTransaction );
    
// from base class MHTTPTransactionCallback

    /**
     * From MHTTPTransactionCallback.
     * Called when the filter's registration conditions are satisfied
     * for events that occur on a transaction.
     * 
     * @since S60 v3.2
     * @param aTransaction The transaction that the event has occurred on.
     * @param aEvent The event that has occurred.
     */
    void MHFRunL( RHTTPTransaction aTransaction, const THTTPEvent& aEvent );

    /**
     * From MHTTPTransactionCallback.
     * Called when RunL leaves from a transaction event.
     * 
     * @since S60 v3.2
     * @param aError The leave code that RunL left with.
     * @param aTransaction The transaction that was being processed.
     * @param aEvent The Event that was being processed.
     * @return KErrNone if the error has been cancelled or the code
     *         of the continuing error otherwise.
     */
    TInt MHFRunError( TInt aError, RHTTPTransaction aTransaction, 
        const THTTPEvent& aEvent );

private:

    CAcpHttpHandler( MAcpHttpHandlerObserver& aObserver );
    void ConstructL();

    /**
     * Returns request method based on type.
     *
     * @since S60 v3.2
     * @param aType for type of method
     * @return request method
     */
    RStringF GetRequestMethod( TInt aType ) const;

    /**
     * Starts the connection asynchronously.
     *
     * @since S60 v3.2
     */
    void StartConnectionL();

    /**
     * Sets transaction's request headers.
     *
     * @since S60 v3.2
     * @param aHeaders for headers
     * @param aHdrField for header fields
     * @param aHdrValue for header value
     */
    void SetHeaderL( RHTTPHeaders aHeaders, TInt aHdrField,  
        const TDesC8& aHdrValue );
    
    /**
     * Submits HTTP transaction.
     * 
     * @since S60 v3.2
     */
    void SubmitTransactionL();
    
// from base class MHTTPDataSupplier

    /**
     * From MHTTPDataSupplier.
     * Release the current data part being held at the data
     * supplier.
     * 
     * @since S60 v3.2
     */
    void ReleaseData();

    /**
     * From MHTTPDataSupplier.
     * Obtain a data part from the supplier.
     * 
     * @since S60 v3.2
     * @param aDataPart The data part.
     * @return ETrue if this is the last part. EFalse otherwise
     */
    TBool GetNextDataPart( TPtrC8& aDataPart );

    /**
     * From MHTTPDataSupplier.
     * Reset the data supplier.
     * 
     * @since S60 v3.2
     * @return Error code.
     */
    TInt Reset();

    /**
     * From MHTTPDataSupplier.
     * Obtain the overall size of the data being supplied,
     * if known to the supplier.
     * 
     * @since S60 v3.2
     * @return A size in bytes, or KErrNotFound if the size is not known.
     */
    TInt OverallDataSize();

// from base class CActive.
    
    /**
     * From CActive.
     * 
     * @since S60 v3.2
     */
    void RunL();

    /**
     * From CActive.
     *      
     * @since S60 v3.2
     */
    void DoCancel();
    
private: // data

    /**
     * Reference to observer.
     * Not own.
     */
    MAcpHttpHandlerObserver& iObserver;

    /**
     * Handle for HTTP session.
     * Own. 
     */
    RHTTPSession iSession;

    /**
     * Handle for HTTP transaction.
     * Own. 
     */
    RHTTPTransaction iTransaction;
    
    /**
     * Handle for connection.
     */
    RConnection iConnection;
    
    /*
     * Handle for socket server.
     */
    RSocketServ iSocketServer;

    /**
     * Handle to post data.
     * Own. 
     */
    HBufC8* iPostData;

    /**
     * Tells if a transaction is running.
     */
    TBool iTransactionRunning;
    
    /**
     * Tells if the connection is open.
     */
    TBool iConnectionOpen;

    /**
     * Tells if MIME type is image.
     */
    TBool iMimeTypeImage;
    
    /**
     * Tells if connection prompt has been shown once.
     */
    TBool iPromptShown;
    
    /**
     * The flag indicates whether the cancellation from end user is sponsored
     * when opening the connection of downloading or not.
     */ 
    TBool iCancelRequest;
    
    /**
     * Selected IAP id.
     */
    TUint32 iIapId;
    
    /**
     * Selected SNAP id.
     */
    TUint32 iNetId;
    
    /**
     * Connection progress.
     */
    TNifProgress iNifProgress;

    // For unit testing.
#ifdef _DEBUG
    friend class T_CAcpHttpHandler;
#endif
    };

#endif // ACPHTTPHANDLER_H

// End of file.