natplugins/natpnatfwsdpprovider/inc/nspnatfwasyncstate.h
author vnuitven <>
Mon, 06 Sep 2010 19:02:58 +0530
branchrcs
changeset 51 a13dcee59a62
parent 0 1bce908db942
permissions -rw-r--r--
modifications in the copyright for these files

/*
* 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:  Stream component async state class description.
*
*/

#ifndef NSPNATFWASYNCSTATE_H
#define NSPNATFWASYNCSTATE_H

#include <e32base.h>

/**
 *  NAT FW stream state.
 *
 *  Class objects depict an async state of NAT FW stream, stream component
 *  stores/changes the state whenever it makes async call to NAT FW.
 *
 *  @lib natfwsdpprovider.dll
 *  @since S60 3.2
 */
class CNSPNATFWAsyncState : public CBase
    {
public: // Enums

    /**
     * External events that can change the state of this object.
     */
    enum TNATFWEvent
        {
        ENATFWEventFetchCand,
        ENATFWEventPerformChecks,
        ENATFWEventRecvAct,
        ENATFWEventSendAct,
        ENATFWEventRecvDeAct,
        ENATFWEventSendDeAct
        };

private: // Enums

    /**
     * Internal state of this object.
     */
    enum TNATFWAsyncState
        {
        ENATFWIdle,
        ENATFWFetchCand,
        ENATFWCandChecks,
        ENATFWSend,
        ENATFWRecv,
        ENATFWSendRecv
        };    

public: // Constructors and destructor
    
    /**
     * A two-phase constructor.
     */
    static CNSPNATFWAsyncState* NewL();

    /**
     * A two-phase constructor.
     */
    static CNSPNATFWAsyncState* NewLC();

    /**
     * Copy constructor.
     */
    static CNSPNATFWAsyncState* NewL(
                const CNSPNATFWAsyncState& aState );
    
    /**
     * Copy constructor.
     */
    static CNSPNATFWAsyncState* NewLC(
                const CNSPNATFWAsyncState& aState );

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

private: // Constructors and destructor

    CNSPNATFWAsyncState();
    
    void Construct( const CNSPNATFWAsyncState& aState );


public: // New functions

    /**
     * This method is used to check if given event can be processed.
     *
     * @since       S60 3.2
     * @param       aEvent              Enumeration, external event.
     * @return      System wide error code.
     */
    TInt CheckState( TNATFWEvent aEvent ) const;
    
    /**
     * This method is used to check if given event can be processed.
     * Leave occurs if processing is not allowed.
     *
     * @since       S60 3.2
     * @param       aEvent              External event.
     */
    void CheckStateL( TNATFWEvent aEvent ) const;

    /**
     * This method is used to change to state. Use CheckState(L) 
     * method to first verify that event is acceptable. 
     *
     * @since       S60 3.2
     * @param       aEvent              External event.
     * @return      System wide error code.
     */
    TInt ChangeState( TNATFWEvent aEvent );

    /**
     * This method is used to change to state. Use CheckState(L) 
     * method to first verify that event is acceptable. 
     *
     * @since       S60 3.2
     * @param       aEvent              External event.
     */
    void ChangeStateL( TNATFWEvent aEvent );
    
    /**
     * This method is used to change to state, from async states
     * to idle, depending on current state.
     *
     * @since       S60 3.2
     * @return      ETrue if session state processing can continue.
     */
    TBool Continue();
    

private: // data

    /**
     * Current stream state is preserved.
     */
    TNATFWAsyncState iCurrentState;
    
    };

#endif // NSPNATFWASYNCSTATE_H


// end of file