//Editor-Info: -*- C++ -*-
//
//Subject: TOVE-project / UNI-AAL interface
//
//File: uaaldownprimitives.h
//
//State: $State: Exp $
//
//Version: $Revision: 1.8 $
//
//Date: $Date: 1997/07/18 14:45:13 $
//
//Organisation:
//      Helsinki University of Technology
//      Laboratory of Telecommunications and Multimedia
//
//Author:
//	Vesa-Matti Puro
//
//Description:
//      Contains definitions for UNI-AAL interface Request (req) and
//      Response (resp) 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.
//
//Copyright:
//
//
//Licence:
//
//
//History:
//
 

#ifndef __UAALDOWNPRIMITIVES_H__
#define __UAALDOWNPRIMITIVES_H__


class pfProtocol;
class pfState;


#include "pf/types.h"
#include "pf/transp.h"
#include "pf/frame.h"


//
// Index of Classes
//
// 1. uaalESTABLISHreq
// 2. uaalRELEASEreq
// 3. uaalDATAreq
// 4. uaalUNITDATAreq
//


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

class uaalESTABLISHreq : public pfMsgTransporter
{
    public:
        uaalESTABLISHreq(void);
        virtual ~uaalESTABLISHreq(void);

        virtual void atProtocol(pfProtocol *protocol_, pfState *state_);
};


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

class uaalRELEASEreq : public pfMsgTransporter
{
    public:
        uaalRELEASEreq(void);
        virtual ~uaalRELEASEreq(void);

        virtual void atProtocol(pfProtocol *protocol_, pfState *state_);
};


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

class uaalDATAreq : public pfMsgTransporter
{
    public:
        uaalDATAreq(void);
        virtual ~uaalDATAreq(void);

        virtual void atProtocol(pfProtocol *protocol_, pfState *state_);
        void setMessageUnit(const pfFrame &frame_);
        pfFrame getMessageUnit(void) const;

    private:
        pfFrame _messageUnit;
};


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

class uaalUNITDATAreq : public pfMsgTransporter
{
    public:
        uaalUNITDATAreq(void);
        virtual ~uaalUNITDATAreq(void);

        virtual void atProtocol(pfProtocol *protocol_, pfState *state_);
        void setMessageUnit(const pfFrame &frame_);
        pfFrame getMessageUnit(void) const;

    private:
        pfFrame _messageUnit;
};


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

class uaalDownInputs
{
    public:
        virtual void uaalESTABLISHreqAct(
            uaalESTABLISHreq *messenger_,
            pfProtocol *protocol_) = 0;
        virtual void uaalRELEASEreqAct(
            uaalRELEASEreq *messenger_,
            pfProtocol *protocol_) = 0;
        virtual void uaalDATAreqAct(
            uaalDATAreq *messenger_,
            pfProtocol *protocol_) = 0;
        virtual void uaalUNITDATAreqAct(
            uaalUNITDATAreq *messenger_,
            pfProtocol *protocol_) = 0;
};


#endif // __UAALDOWNPRIMITIVES_H__
