//Editor-Info: -*- C++ -*-
//
//Subject: TOVE-project / UNI-AAL interface
//
//File: uaalupprimitives.h
//
//Version: $Revision: 1.7 $
//
//State: $State: Exp $
//
//Date: $Date: 1998/07/06 11:59:26 $
//
//Organisation:
//      Helsinki University of Technology
//      Laboratory of Telecommunications and Multimedia
//
//Author:
//	Vesa-Matti Puro
//
//Description:
//      Contains definitions for UNI-AAL interface Indication (ind) and
//      Confirm (conf) primitives. Primitives are implemented as
//      OVOPS++ messenger classes according to Visitor pattern.
//      If primitive has parameters, access methods (set and get)
//      for those parameters are defined.
//      The class uaalUpInputs is a pure virtual base class for states
//      using Indication and Confirm primitives defined in this file.
//
//Copyright:
//
//
//Licence:
//
//
//History:
//
 

#ifndef __UAALUPPRIMITIVES_H__
#define __UAALUPPRIMITIVES_H__


class pfProtocol;


#include "pf/types.h"
#include "pf/state.h"
#include "pf/messenge.h"
#include "pf/frame.h"


//
// Index of Classes
//
// 1.  uaalESTABLISHind
// 2.  uaalESTABLISHconf
// 3.  uaalRELEASEind
// 4.  uaalRELEASEconf
// 5.  uaalDATAind
// 6.  uaalUNITDATAind
// 7.  uaalUpInputs
//


// ----------------------------------------------------------------------

class uaalESTABLISHind : public pfMessenger
{
    public:
        virtual void apply(pfState *state_, pfProtocol *protocol_);
};


// ----------------------------------------------------------------------

class uaalESTABLISHconf : public pfMessenger
{
    public:
        virtual void apply(pfState *state_, pfProtocol *protocol_);
};


// ----------------------------------------------------------------------

class uaalRELEASEind : public pfMessenger
{
    public:
        virtual void apply(pfState *state_, pfProtocol *protocol_);
};


// ----------------------------------------------------------------------

class uaalRELEASEconf : public pfMessenger
{
    public:
        virtual void apply(pfState *state_, pfProtocol *protocol_);
};


// ----------------------------------------------------------------------

class uaalDATAind : public pfMessenger
{
    public:
        virtual void apply(pfState *state_, pfProtocol *protocol_);
        void setMessageUnit(const pfFrame &frame_);
        pfFrame getMessageUnit(void) const;

    private:
        pfFrame _messageUnit;
};


// ----------------------------------------------------------------------

class uaalUNITDATAind : public pfMessenger
{
    public:
        virtual void apply(pfState *state_, pfProtocol *protocol_);
        void setMessageUnit(const pfFrame &frame_);
        pfFrame getMessageUnit(void) const;

    private:
        pfFrame _messageUnit;
};


// ----------------------------------------------------------------------

class uaalUpInputs
{
    public:
        virtual void uaalESTABLISHindAct(
            uaalESTABLISHind *messenger_,
            pfProtocol *protocol_) = 0;
        virtual void uaalESTABLISHconfAct(
            uaalESTABLISHconf *messenger_,
            pfProtocol *protocol_) = 0;
        virtual void uaalRELEASEindAct(
            uaalRELEASEind *messenger_,
            pfProtocol *protocol_) = 0;
        virtual void uaalRELEASEconfAct(
            uaalRELEASEconf *messenger_,
            pfProtocol *protocol_) = 0;
        virtual void uaalDATAindAct(
            uaalDATAind *messenger_,
            pfProtocol *protocol_) = 0;
        virtual void uaalUNITDATAindAct(
            uaalUNITDATAind *messenger_,
            pfProtocol *protocol_) = 0;
};

#endif // __UAALUPPRIMITIVES_H__
