//Editor-Info: -*- C++ -*-
//
//Subject: TOVE-project / UNI-AAL interface
//
//File: lapdupprimitives.h
//
//Version: $Revision: 1.2 $
//
//State: $State: Exp $
//
//Date: $Date: 1999/02/26 06:38:48 $
//
//Organisation:
//      Helsinki University of Technology
//      Laboratory of Telecommunications and Multimedia
//
//Author:
//	Teemu Tynjälä
//
//Description:
//      Contains definitions for DSS1-LAPD 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 lapdUpInputs is a pure virtual base class for states
//      using Indication and Confirm primitives defined in this file.
//
//Copyright:
//
//
//Licence:
//
//
//History:
//
 

#ifndef __LAPDUPPRIMITIVES_H__
#define __LAPDUPPRIMITIVES_H__


class pfProtocol;


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


//
// Index of Classes
//
// 1.  lapdESTABLISHind
// 2.  lapdESTABLISHconf
// 3.  lapdRELEASEind
// 4.  lapdDATAind
// 5.  lapdUpInputs
//


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

class lapdESTABLISHind : public pfMsgTransporter
{
    public:
        lapdESTABLISHind(void);
        ~lapdESTABLISHind(void);
        const lapdESTABLISHind& operator=(const lapdESTABLISHind &other_);

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


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

class lapdESTABLISHconf : public pfMsgTransporter
{
    public:
        lapdESTABLISHconf(void);
        ~lapdESTABLISHconf(void);
        const lapdESTABLISHconf& operator=(const lapdESTABLISHconf &other_);

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


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

class lapdRELEASEind : public pfMsgTransporter
{
    public:
        lapdRELEASEind(void);
        ~lapdRELEASEind(void);
        const lapdRELEASEind& operator=(const lapdRELEASEind &other_);
      
        virtual void apply(pfState *state_, pfProtocol *protocol_);
};


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

class lapdDATAind : public pfMsgTransporter
{
    public:
        lapdDATAind(void);
        lapdDATAind(const pfFrame &frame_);
        ~lapdDATAind(void);
        const lapdDATAind& operator=(const lapdDATAind &other_);

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

    private:
        pfFrame _messageUnit;
};


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

class lapdUpInputs
{
    public:
        virtual void lapdESTABLISHindAct(
            lapdESTABLISHind *messenger_,
            pfProtocol *protocol_) = 0;
        virtual void lapdESTABLISHconfAct(
            lapdESTABLISHconf *messenger_,
            pfProtocol *protocol_) = 0;
        virtual void lapdRELEASEindAct(
            lapdRELEASEind *messenger_,
            pfProtocol *protocol_) = 0;
        virtual void lapdDATAindAct(
            lapdDATAind *messenger_,
            pfProtocol *protocol_) = 0;
};

#endif // __UAALUPPRIMITIVES_H__
