//Editor-Info: -*- C++ -*-
//
//Subject: TOVE project / SIG
//
//File: sigstate.h
//
//Version: $Revision: 1.3 $
//
//State: $State: Exp $
//
//Date: $Date: 1998/12/04 15:14:24 $
//
//Organisation:
//      Helsinki University of Technology
//      Laboratory of Telecommunications Software and Multimedia
//
//Author:
//      Sami Raatikainen
//
//Description:
//      FSM base class for sigProtocol protocol conduits.
//
//Copyright:
//      Copyright 1999 Helsinki University of Technology
//      ALL RIGHTS RESERVED BETWEEN JANUARY 1996 AND JUNE 1999.
//
//Licence:
//
//
//History: 

#ifndef __SIG_SIGSTATE_H__
#define __SIG_SIGSTATE_H__

#include "iface/sigif/sigdownprimitives.h"
#include "iface/sigif/sigupprimitives.h"
#include "sigtimeouts.h"
#include "pf/state.h"
#include "sigprotocol.h"

class sigState : public sigDownInputs,
                 public sigUpInputs,
                 public sigTimeoutInputs,
                 public pfState
{
    public:
        // sigDownInputs
        virtual void sigSETUPreqAct(
            sigSETUPreq *primitive_,
            pfProtocol *protocol_);
        virtual void sigPROCEEDINGreqAct(
            sigPROCEEDINGreq *primitive_,
            pfProtocol *protocol_);
        virtual void sigALERTINGreqAct(
            sigALERTINGreq *primitive_,
            pfProtocol *protocol_);
        virtual void sigSETUPrespAct(
            sigSETUPresp *primitive_,
            pfProtocol *protocol_);
        virtual void sigSETUP_COMPLETEreqAct(
            sigSETUP_COMPLETEreq *primitive_,
            pfProtocol *protocol_);
        virtual void sigRELEASEreqAct(
            sigRELEASEreq *primitive_,
            pfProtocol *protocol_);
        virtual void sigRELEASErespAct(
            sigRELEASEresp *primitive_,
            pfProtocol *protocol_);
        virtual void sigRESETreqAct(
            sigRESETreq *primitive_,
            pfProtocol *protocol_);
        virtual void sigRESETrespAct(
            sigRESETresp *primitive_,
            pfProtocol *protocol_);
        virtual void sigRESET_ERRORrespAct(
            sigRESET_ERRORresp *primitive_,
            pfProtocol *protocol_);

        // sigUpInputs
        virtual void sigSETUPindAct(
            sigSETUPind *primitive_,
            pfProtocol *protocol_);
        virtual void sigPROCEEDINGindAct(
            sigPROCEEDINGind *primitive_,
            pfProtocol *protocol_);
        virtual void sigALERTINGindAct(
            sigALERTINGind *primitive_,
            pfProtocol *protocol_);
        virtual void sigSETUPconfAct(
            sigSETUPconf *primitive_,
            pfProtocol *protocol_);
        virtual void sigSETUP_COMPLETEindAct(
            sigSETUP_COMPLETEind *primitive_,
            pfProtocol *protocol_);
        virtual void sigRELEASEindAct(
            sigRELEASEind *primitive_,
            pfProtocol *protocol_);
        virtual void sigRELEASEconfAct(
            sigRELEASEconf *primitive_,
            pfProtocol *protocol_);
        virtual void sigRESETindAct(
            sigRESETind *primitive_,
            pfProtocol *protocol_);
        virtual void sigRESETconfAct(
            sigRESETconf *primitive_,
            pfProtocol *protocol_);
        virtual void sigRESET_ERRORindAct(
            sigRESET_ERRORind *primitive_,
            pfProtocol *protocol_);


        // Timeout inputs
        virtual void sigAwaitPROCEEDINGtimeoutAct(pfProtocol *protocol_);
        virtual void sigAwaitALERTINGtimeoutAct(pfProtocol *protocol_);
        virtual void sigAwaitCONNECTtimeoutAct(pfProtocol *protocol_);
        virtual void sigAwaitCONNECT_ACKtimeoutAct(pfProtocol *protocol_);
        virtual void sigAwaitRELEASE_COMPLETEtimeoutAct(pfProtocol *protocol_);

        
    protected:
        sigState(void);
        virtual ~sigState(void);
        
        sigProtocol *protocolCast(pfProtocol *protocol_) const;
};

#endif // __SIG_SIGSTATE_H__
