//Editor-Info: -*- C++ -*-
//
//Subject: TOVE project
//
//File: gsmpprotocolstate.h
//
//Version: $Revision: 1.9 $
//
//State: $State: Exp $
//
//Date: $Date: 1998/12/10 10:27:00 $
//
//Organisation:
//      Helsinki University of Technology
//      Laboratory of Telecommunications Software and Multimedia
//
//Author:
//      Harri Sunila
//
//Description:
//
//
//Copyright:
//
//
//Licence:
//
//
//History: 

#ifndef __GSMP_GSMPPROTOCOLSTATE_H__
#define __GSMP_GSMPPROTOCOLSTATE_H__

#include "gsmpstate.h"

class gsmpResponseTimeout;
class gsmpProtocol;
class gsmpListenEventsMessage;
class gsmpForgetEventsMessage;

class gsmpConnectionManagementMessage;

class gsmpLinkEstablished;
class gsmpLinkNotEstablished;

class gsmpProtocolState : public gsmpState 
{
    public:
        virtual ~gsmpProtocolState(void);

        virtual void gsmpResponseTimeoutAct(
            gsmpResponseTimeout *timeout_,
            gsmpProtocol *protocol_);

        // Actions for incoming messages

        // Actions for GSMP Connection Management Messages

        virtual void gsmpAddBranchMessageAct(gsmpAddBranchMessage *message_,
                                             pfProtocol *protocol_);
        
        virtual void gsmpDeleteBranchMessageAct(
            gsmpDeleteBranchMessage *message_,
            pfProtocol *protocol_);
        
        virtual void gsmpDeleteTreeMessageAct(gsmpDeleteTreeMessage *message_,
                                              pfProtocol *protocol_);
        
        virtual void gsmpVerifyTreeMessageAct(gsmpVerifyTreeMessage *message_,
                                              pfProtocol *protocol_);
        
        virtual void gsmpDeleteAllMessageAct(gsmpDeleteAllMessage *message_,
                                             pfProtocol *protocol_);
        
        virtual void gsmpMoveBranchMessageAct(gsmpMoveBranchMessage *message_,
                                              pfProtocol *protocol_);

        // Actions for GSMP Port Management Messages

        virtual void gsmpBringUpMessageAct(gsmpBringUpMessage *message_,
                                           pfProtocol *protocol_);
        
        virtual void gsmpTakeDownMessageAct(gsmpTakeDownMessage *message_,
                                            pfProtocol *protocol_);
        
        virtual void gsmpInternalLoopbackMessageAct(
            gsmpInternalLoopbackMessage *message_,
            pfProtocol *protocol_);
        
        virtual void gsmpExternalLoopbackMessageAct(
            gsmpExternalLoopbackMessage *message_,
            pfProtocol *protocol_);
        
        virtual void gsmpBothwayLoopbackMessageAct(
            gsmpBothwayLoopbackMessage *message_,
            pfProtocol *protocol_);
        
        virtual void gsmpResetInputPortMessageAct(
            gsmpResetInputPortMessage *message_,
            pfProtocol *protocol_);
        
        virtual void gsmpResetEventFlagsMessageAct(
            gsmpResetEventFlagsMessage *message_,
            pfProtocol *protocol_);

        // Actions for GSMP Statistics Messages

        virtual void gsmpVCActivityRequestMessageAct(
            gsmpVCActivityRequestMessage *message_,
            pfProtocol *protocol_);

        virtual void gsmpVCActivityResponseMessageAct(
            gsmpVCActivityResponseMessage *message_,
            pfProtocol *protocol_);
        
        virtual void gsmpPortStatisticsRequestMessageAct(
            gsmpPortStatisticsRequestMessage *message_,
            pfProtocol *protocol_);
        
        virtual void gsmpPortStatisticsResponseMessageAct(
            gsmpPortStatisticsResponseMessage *message_,
            pfProtocol *protocol_);
        
        virtual void gsmpVCStatisticsRequestMessageAct(
            gsmpVCStatisticsRequestMessage *message_,
            pfProtocol *protocol_);
        
        virtual void gsmpVCStatisticsResponseMessageAct(
            gsmpVCStatisticsResponseMessage *message_,
            pfProtocol *protocol_);

        // Actions for GSMP Configuration Messages

        virtual void gsmpSwitchConfigurationRequestMessageAct(
            gsmpSwitchConfigurationRequestMessage *message_,
            pfProtocol *protocol_);

        virtual void gsmpSwitchConfigurationResponseMessageAct(
            gsmpSwitchConfigurationResponseMessage *message_,
            pfProtocol *protocol_);
        
        virtual void gsmpPortConfigurationRequestMessageAct(
            gsmpPortConfigurationRequestMessage *message_,
            pfProtocol *protocol_);
        
        virtual void gsmpPortConfigurationResponseMessageAct(
            gsmpPortConfigurationResponseMessage *message_,
            pfProtocol *protocol_);
        
        virtual void gsmpAllPortsConfigurationRequestMessageAct(
            gsmpAllPortsConfigurationRequestMessage *message_,
            pfProtocol *protocol_);
        
        virtual void gsmpAllPortsConfigurationResponseMessageAct(
            gsmpAllPortsConfigurationResponseMessage *message_,
            pfProtocol *protocol_);

        // Actions for GSMP Event Messages

        virtual void gsmpPortUpEventMessageAct(
            gsmpPortUpEventMessage *message_,
            pfProtocol *protocol_);
        
        virtual void gsmpPortDownEventMessageAct(
            gsmpPortDownEventMessage *message_,
            pfProtocol *protocol_);
        
        virtual void gsmpInvalidVPIVCIEventMessageAct(
            gsmpInvalidVPIVCIEventMessage *message_,
            pfProtocol *protocol_);
        
        virtual void gsmpNewPortEventMessageAct(
            gsmpNewPortEventMessage *message_,
            pfProtocol *protocol_);
        
        virtual void gsmpDeadPortEventMessageAct(
            gsmpDeadPortEventMessage *message_,
            pfProtocol *protocol_);

        // Actions for two implementation specific 'event' messages

        virtual void gsmpListenEventsMessageAct(
            gsmpListenEventsMessage *message_,
            pfProtocol *protocol_);
        
        virtual void gsmpForgetEventsMessageAct(
            gsmpForgetEventsMessage *message_,
            pfProtocol *protocol_);

        // Actions for implementation specific control messages

        virtual void gsmpLinkEstablishedAct(gsmpLinkEstablished *message_,
                                            pfProtocol *protocol_);

        virtual void gsmpLinkNotEstablishedAct(
            gsmpLinkNotEstablished *message_,
            pfProtocol *protocol_);
        
    protected:
        gsmpProtocolState(void);
        
        virtual void processConnectionManagementMessage(
            gsmpConnectionManagementMessage *message_,
            pfProtocol *protocol_);
};

#endif // __GSMP_GSMPPROTOCOLSTATE_H__
