//Editor-Info: -*- C++ -*-
//
//Subject: TOVE project / SIGIF
//
//File: sigupprimitives.h
//
//Version: $Revision: 1.42 $
//
//State: $State: Exp $
//
//Date: $Date: 1999/03/08 07:28:25 $
//
//Organisation:
//      Helsinki University of Technology
//      Laboratory of Telecommunications Software and Multimedia
//
//Author:
//      Jari Katajavuori
//      Sami Raatikainen
//
//Description:
//      Messages for signaling interface up direction.
//
//Copyright:
//
//
//Licence:
//
//
//History: 

#ifndef __SIGIF_SIGUPPRIMITIVES_H__
#define __SIGIF_SIGUPPRIMITIVES_H__

#include <typeinfo>
#include <string>

#include "pf/messenge.h"
#include "pf/protocol.h"
#include "pf/state.h"

#include "sigprimitive.h"

//
// Class: sigSETUPind
//
// Description:
//      Indicates the receive of SETUP pdu at terminating end.
//

class sigSETUPind : public sigPrimitive
{
    public:
        sigSETUPind(void);
        virtual ~sigSETUPind(void);
        virtual void apply(pfState *state_, pfProtocol *const protocol_);
};

//
// Class: sigPROCEEDINGind
//
// Description:
//      Indicates the receive of PROCEEDING pdu at originating end.
//      Terminating end is proceeding connecting procedure.
//

class sigPROCEEDINGind : public sigPrimitive
{
    public:
        sigPROCEEDINGind(void);
        virtual ~sigPROCEEDINGind(void);
        virtual void apply(pfState *state_, pfProtocol *const protocol_);
};

//
// Class: sigALERTINGind
//
// Description:
//
//

class sigALERTINGind : public sigPrimitive
{
    public:
        sigALERTINGind(void);
        virtual ~sigALERTINGind(void);
        virtual void apply(pfState *state_, pfProtocol *const protocol_);
};

//
// Class: sigPROGRESSind
//
// Description:
//
//

class sigPROGRESSind : public sigPrimitive
{
    public:
        sigPROGRESSind(void);
        virtual ~sigPROGRESSind(void);
        virtual void apply(pfState *state_, pfProtocol *const protocol_);
};

//
// Class: sigSETUPconf
//
// Description:
//      Indicates the receive of CONNECT pdu at originating end.
//      Terminating end has established connection.
//

class sigSETUPconf : public sigPrimitive
{
    public:
        sigSETUPconf(void);
        virtual ~sigSETUPconf(void);
        virtual void apply(pfState *state_, pfProtocol *const protocol_);
};

//
// Class: sigSETUP_COMPLETEind
//
// Description:
//      Indicates the receive of CONNECT_ACK pdu at terminating end.
//      Originating end has accepted the connection indication.
//

class sigSETUP_COMPLETEind : public sigPrimitive
{
    public:
        sigSETUP_COMPLETEind(void);
        virtual ~sigSETUP_COMPLETEind(void);
        virtual void apply(pfState *state_, pfProtocol *const protocol_);
};

//
// Class: sigRELEASEind
//
// Description:
//      Requests connection releasing procedures to take place.
//

class sigRELEASEind : public sigPrimitive
{
    public:
        sigRELEASEind(void);
        virtual ~sigRELEASEind(void);
        virtual void apply(pfState *state_, pfProtocol *const protocol_);
};

//
// Class: sigRELEASEconf
//
// Description:
//      Indicates that connection has been released and any functionality
//      for this connection is not left at lower protocols.
//

class sigRELEASEconf : public sigPrimitive
{
    public:
        sigRELEASEconf(void);
        virtual ~sigRELEASEconf(void);
        virtual void apply(pfState *state_, pfProtocol *const protocol_);
};

//
// Class: sigRESETind
//
// Description:
//      Requests including VPI/VCI to be freed at this nw element.
//

class sigRESETind : public sigPrimitive
{
    public:
        sigRESETind(void);
        virtual ~sigRESETind(void);
        virtual void apply(pfState *state_, pfProtocol *const protocol_);
};

//
// Class: sigRESETconf
//
// Description:
//      Requested VPI/VCI are freed at opposite end.
//

class sigRESETconf : public sigPrimitive
{
    public:
        sigRESETconf(void);
        virtual ~sigRESETconf(void);
        virtual void apply(pfState *state_, pfProtocol *const protocol_);
};

//
// Class: sigRESET_ERRORind
//
// Description:
//      Requested VPI/VCI releasing couldn't be performed.
//

class sigRESET_ERRORind : public sigPrimitive
{
    public:
        sigRESET_ERRORind(void);
        virtual ~sigRESET_ERRORind(void);
        virtual void apply(pfState *state_, pfProtocol *const protocol_);
};


//
// Class: sigUpInputs
//
// Description:
//      Abstract class to be inherited at such (state) classes, which
//      wish to get previouly represented primitives as input messages.
//

class sigUpInputs
{
    public:
        virtual void sigSETUPindAct(
            sigSETUPind *message_,
            pfProtocol *protocol_) = 0;
        virtual void sigPROCEEDINGindAct(
            sigPROCEEDINGind *message_,
            pfProtocol *protocol_) = 0;
        // ++TODO++ change to pure virtual when possible
        virtual void sigALERTINGindAct(
            sigALERTINGind *message_,
            pfProtocol *protocol_){}
        // ++TODO++ change to pure virtual when possible
        virtual void sigPROGRESSindAct(
            sigPROGRESSind *message_,
            pfProtocol *protocol_){}
        virtual void sigSETUPconfAct(
            sigSETUPconf *message_,
            pfProtocol *protocol_) = 0;
        virtual void sigSETUP_COMPLETEindAct(
            sigSETUP_COMPLETEind *message_,
            pfProtocol *protocol_) = 0;
        virtual void sigRELEASEindAct(
            sigRELEASEind *message_,
            pfProtocol *protocol_) = 0;
        virtual void sigRELEASEconfAct(
            sigRELEASEconf *message_,
            pfProtocol *protocol_) = 0;
        virtual void sigRESETindAct(
            sigRESETind *message_,
            pfProtocol *protocol_) = 0;
        virtual void sigRESETconfAct(
            sigRESETconf *message_,
            pfProtocol *protocol_) = 0;
        virtual void sigRESET_ERRORindAct(
            sigRESET_ERRORind *message_,
            pfProtocol *protocol_) = 0;
};

        
#endif // __SIGIF_SIGUPPRIMITIVES_H__

