//Editor-Info: -*- C++ -*-
//
//Subject:
//
//File: bisupstate.h
//
//Version: $Revision: 1.7 $
//
//State: $State: Exp $
//
//Date: $Date: 1999/03/08 09:07:18 $
//
//Organisation:
//      Helsinki University of Technology
//      Laboratory of Telecommunications Software and Multimedia
//
//Author:
//      Sami Raatikainen
//
//Description:
//      
//
//Copyright:
//      Copyright 1999 Helsinki University of Technology
//      ALL RIGHTS RESERVED BETWEEN JANUARY 1996 AND JUNE 1999.
//
//Licence:
//
//
//History: 

#ifndef __BISUP_BISUPSTATE_H__
#define __BISUP_BISUPSTATE_H__

#include "pf/state.h"
#include "iface/sigif/sigdownprimitives.h"
#include "nnimessages.h"
#include "bisupprotocol.h"
#include "bisuptimeouts.h"
#include "pf/error.h"

class bisupState : public pfState,
                   public sigDownInputs,
                   public nniMessageInputs,
                   public bisupTimeoutInputs
{
    public:
        
        // sigDownInputs
        virtual void sigSETUPreqAct(
            sigSETUPreq *message_,
            pfProtocol *protocol_);
        
        virtual void sigPROCEEDINGreqAct(
            sigPROCEEDINGreq *message_,
            pfProtocol *protocol_);
        
        virtual void sigSETUPrespAct(
            sigSETUPresp *message_,
            pfProtocol *protocol_);
        
        virtual void sigSETUP_COMPLETEreqAct(
            sigSETUP_COMPLETEreq *message_,
            pfProtocol *protocol_);
        virtual void sigRELEASEreqAct(
            sigRELEASEreq *message_,
            pfProtocol *protocol_);
        virtual void sigRELEASErespAct(
            sigRELEASEresp *message_,
            pfProtocol *protocol_);
        virtual void sigRESETreqAct(
            sigRESETreq *message_,
            pfProtocol *protocol_);
        virtual void sigRESETrespAct(
            sigRESETresp *message_,
            pfProtocol *protocol_);
        virtual void sigRESET_ERRORrespAct(
            sigRESET_ERRORresp *message_,
            pfProtocol *protocol_);
        
        // nniInputs
        virtual void nniACMpduAct(
            nniACMpdu *message_,
            pfProtocol *protocol_);
        virtual void nniANMpduAct(
            nniANMpdu *message_,
            pfProtocol *protocol_);
        virtual void nniCPGpduAct(
            nniCPGpdu *message_,
            pfProtocol *protocol_);
        virtual void nniIAMpduAct(
            nniIAMpdu *message_,
            pfProtocol *protocol_);
        virtual void nniIAApduAct(
            nniIAApdu *message_,
            pfProtocol *protocol_);
        virtual void nniIARpduAct(
            nniIARpdu *message_,
            pfProtocol *protocol_);
        virtual void nniRELpduAct(
            nniRELpdu *message_,
            pfProtocol *protocol_);
        virtual void nniRLCpduAct(
            nniRLCpdu *message_,
            pfProtocol *protocol_);
        
        // Timeouts
        virtual void bisupT1btimeoutAct(pfProtocol *protocol_);
        virtual void bisupT7btimeoutAct(pfProtocol *protocol_);
        virtual void bisupT9btimeoutAct(pfProtocol *protocol_);
        virtual void bisupT40btimeoutAct(pfProtocol *protocol_);
        
        
    protected:
        bisupState(void);
        virtual ~bisupState(void);
        
        bisupProtocol *protocolCast(pfProtocol *protocol_) const;
};

#endif //__BISUP_BISUPSTATE_H__
