nettools/conntest/inc/HttpHandler.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:39:25 +0200
changeset 0 857a3e953887
child 37 22633ca47dfe
permissions -rw-r--r--
Revision: 200949 Kit: 200951

/*
* Copyright (c) 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: HttpHandler is used for HTTP connection components testing
*
*/

#ifndef HTTPHANDLER_H
#define HTTPHANDLER_H

// INCLUDES

#include <in_sock.h>
#include <http.h>
#include <http/mhttpauthenticationcallback.h>

// CONSTANTS

const TInt KMaxContentTypeSize = 64;

// FORWARD DECLARATIONS
class MUINotify;
class CHttpEventHandler;
class CSettingData;

// CLASS DECLARATION


/**
*  CHttpClient
*  
*  Class for initiating HTTP transaction.
*/
class CHttpClient : public CBase, public MHTTPDataSupplier, 
public MHTTPAuthenticationCallback
{
public:
    virtual ~CHttpClient();
    static CHttpClient* NewLC(MUINotify& aConsole);
    static CHttpClient* NewL(MUINotify& aConsole);
    
    
    /**
    * Start http request
    */
    void InvokeHttpMethodL(const CSettingData* aData, TBool aHasBody, TBool aIsSecure);

    /**
    * Set connection info for HTTP FW session
    */
    void SetHttpConnectionInfoL( TBool aUseOwnConnection, 
                                 RConnection& aConnection, 
                                 RSocketServ& aSocketServ );
        
    /**
    * Set throughput calculation on or off.
    */
    void SetPerformance(const TBool aValue);
    
    /**
    * Methods inherited from MHTTPDataSupplier
    */
    virtual TBool GetNextDataPart(TPtrC8& aDataPart);
    virtual void ReleaseData();
    virtual TInt OverallDataSize();
    virtual TInt Reset();
    
    /**
    * Methods inherited from MHTTPAuthenticationCallback
    */
    virtual TBool GetCredentialsL(const TUriC8& aURI, RString aRealm, 
        RStringF aAuthenticationType,
        RString& aUsername, 
        RString& aPassword);
    
protected:
    CHttpClient(MUINotify& aConsole);
    void ConstructL();
private:
    
    enum TMenuItems
    {
        EGet,
            EPost,
            EHead,
            ETrace,
            EToggleVerbosity,
            EQuit
    };
    
    /**
    * Display performance information when sending POST.
    */
    void DisplayTimeElapsed();
    
    /**
    * Set HTTP request header for http fw.
    */
    void SetHeaderL(RHTTPHeaders aHeaders, TInt aHdrField, const TDesC8& aHdrValue);
    
private:
    RHTTPSession         iHttpSession;
    TTime                iLastTimeStamp;
    TInt                 iDataChunkCount;
    RHTTPTransaction     iTrans;
    CHttpEventHandler*   iTransObs;
    HBufC8*              iReqBodySubmitBuffer;
    TPtr8                iReqBodySubmitBufferPtr;
    TBool                iNoMoreDate;
    MUINotify&           iConsole;
    CSettingData*        iSettingData;
    TBool                iDoPerformance;
    TBuf<KMaxContentTypeSize> iReqBodyContentType; // not used now
};




/**
*  CHttpEventHandler
*  
*  Handles all events for the active HTTP transaction.
*/
class CHttpEventHandler : public CBase, public MHTTPTransactionCallback
{
public:
    virtual ~CHttpEventHandler();
    static CHttpEventHandler* NewLC(MUINotify& aConsole);
    static CHttpEventHandler* NewL(MUINotify& aConsole);
    
    /**
    * Turn performance measurement on/off
    */
    void SetPerformance(const TBool aValue){iDoPerformance = aValue;};
    
    /**
    * Methods from MHTTPTransactionCallback
    */
    virtual void MHFRunL(RHTTPTransaction aTransaction, const THTTPEvent& aEvent);
    virtual TInt MHFRunError(TInt aError, RHTTPTransaction aTransaction, const THTTPEvent& aEvent);
    
protected:
    CHttpEventHandler(MUINotify& aConsole);
    void ConstructL();
private:
    void DumpRespHeadersL(RHTTPTransaction& aTrans);
    void DumpRespBody(RHTTPTransaction& aTrans);

    MHTTPDataSupplier*   iRespBody;
    MUINotify&           iConsole; // console for displaying text etc
    TTime                iStartTime;
    TInt                 iBodySize;
    TBool                iDoPerformance;
};


#endif // HTTPHANDLER_H