pnpmobileservices/pnpms/OnlineSupport/inc/CCMSocketsEngine.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:40:12 +0200
changeset 0 3ce708148e4d
permissions -rw-r--r--
Revision: 200949 Kit: 200951

/*
* Copyright (c) 2003-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:  Socket engine class used for the DNS query
*
*/



#ifndef CCMSOCKETSENGINE_H
#define CCMSOCKETSENGINE_H

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

// CONSTANTS
const TInt KMaximumLengthOfAddress = 100;

// MACROS
// None

// DATA TYPES
// None

// FUNCTION PROTOTYPES
// None

// FORWARD DECLARATIONS
// None

// CLASS DECLARATION
class MCMSocketsEngineNotifier;

/**
*  Sockets engine class 
*  Used to test the DNS connection 
*
*  @lib Confmanager.app
*  @since 2.0
*/
class CCMSocketsEngine :
    public CActive,
    public MHTTPTransactionCallback
    {
    public:  // Constructors and destructor
        
        enum TEngineStatus 
            {
            EStatusUnknown,
            EStatusConnecting,
            EStatusResolving,
            EStatusMakingHttpHeadRequest,
            EStatusReady
            };
        /**
        * Two-phased constructor.
        */
        static CCMSocketsEngine* NewL( MCMSocketsEngineNotifier& aNotifier);
        
        /**
        * Destructor.
        */
        ~CCMSocketsEngine();

    public: // New functions

        /**
        * Starts the DNS query
        * @since 2.0
        * @param aAp the access point id to use for the connection
        * @param aAddress address 
        */
        void ConnectL( TUint32 aAp, const TDesC& aAddress );

        /**
        * Starts the DNS query
        * @since 2.0
        * @param aAp the access point id to use for the connection
        * @param aAddress address 
        */
        void ConnectL( const TDesC& aAddress );
        
        /**
        * Ends the DNS query
        * @since 2.0
        */
        void Disconnect( );

        /**
        * Sets the value for the iLeaveOpen
        * @since 2.0
        */
        void SetOpen( TBool aOpen );

        const TDesC& ProxyIp(){ return *iProxyIp; };
        const TInt ProxyPort(){ return iProxyPort; };
        const TUint32 IapId(){ return iIapId; };
        const TBool ProxyDefined(){ return iProxyIp->Length() > 0; };

        /*!
        @return iSocketServ
        */
        RSocketServ& SocketServ(){ return iSocketServ; };

        /*!
        @return iConnection
        */
        RConnection& Connection(){ return iConnection; };
        
	/*!
        @return IAPID
        */

        TUint32 ReturnIAPID();

    public: // from MHTTPTransactionCallback

        /*!
        Called when the filter's registration conditions are satisfied
        for events that    occur on a transaction.    Note that this function
        is not allowed to leave if called with certain events
        */
        void MHFRunL( RHTTPTransaction aTransaction, const THTTPEvent &aEvent );
        /*!
        Called when RunL leaves from a transaction event. This works
        in the same way as CActve::RunError; return KErrNone if you
        have handled the error. If you don't completely handle the
        error, a panic will occur.
        */
        TInt MHFRunError( TInt aError, RHTTPTransaction aTransaction, const THTTPEvent& aEvent );

    protected:  // New functions
        
        

    protected:  // Functions from base classes
        
       

    private: // Functions from base classes
        
        /**
        * From CActive Handles an active object’s request completion event.
        * @since 2.0
        * @return void
        */
        void RunL();

        /**
        * From CActive  Cancels any outstanding request
        * @return void
        */
        void DoCancel();

        /**
        * From CActive  Cancels any outstanding request
        * @return TInt should be always KErrNone
        */
        TInt RunError(TInt aError);    

    private:

        /**
        * C++ default constructor.
        */
        CCMSocketsEngine( MCMSocketsEngineNotifier& aNotifier);

        /**
        * By default Symbian 2nd phase constructor is private.
        */
        void ConstructL();

        void MakeHttpHeadRequestL( const TDesC& aProxyAddress, const TUint aProxyPort );
        TBool CheckForProxyL( const TUint32 aIapId );
    public:     // Data
        
    protected:  // Data
        

    private:    // Data
        /*! Interface to UI class */
        MCMSocketsEngineNotifier& iSocketsEngineNotifier; 
        // Socket server
        RSocketServ iSocketServ;
        //  host name resolution (DNS)
        RHostResolver iResolver;
        /*! Connection */
        RConnection iConnection;
        /*! Connection open flag */
        TBool iConnectionOpen;
        // Name entry for the resolver
        TNameEntry iNameEntry;
        // if This is true then the iResolver exsists
        TBool iResolverExsists;
        // Status of the engine
        TEngineStatus iEngineStatus;
        // address to be resolved
        TBuf <KMaximumLengthOfAddress> iWapPage;
        // If this is true then the connection will be left open after the engine is deleted
        TBool iLeaveOpen;
        // if this is true then the connection exsists
        TBool iConnectionExsists;     
        /*! Proxy IP, empty descriptor for none */
        HBufC* iProxyIp;
        /*! Proxy port, 0 for none */
        TInt iProxyPort;
        /*! Tells if there is a proxy defined for the current AP */
        TBool iProxyDefined;

        /*! Http session */
        RHTTPSession iSession;
        /*! Http session open flag */
        TBool iHttpSessionOpen;
        /*! String pool for http session */
        RStringPool iSessionStringPool;
        /*! Http transaction*/
        RHTTPTransaction iTransaction;
        /*! Http transaction open flag */
        TBool iTransactionOpen;

        /** Id for the current AccessPoint this id refers to the WAP_IAP table.*/
        TUint32 iIapId;

    public:     // Friend classes
            
    protected:  // Friend classes
        
    private:    // Friend classes
        

    };

#endif      // CCMSocketsEngine_H   
            
// End of File