//Editor-Info: -*- C++ -*-
//
//Subject: TOVE-project / AA interface
//
//File: aaupprimitives.h
//
//Version: $Revision: 1.13 $
//
//State: $State: Exp $
//
//Date: $Date: 1997/08/19 12:49:58 $
//
//Organisation:
//      Helsinki University of Technology
//      Laboratory of Telecommunications and Multimedia
//
//Author:
//      Juhana Räsänen
//
//Description:
//      AA-xx.{indication,confirm} primitive (from SAAL SSCOP to SSCF)
//      definitions as a OVOPS++ messenger classes.
//      Get/set methods for primitive parametes are defined; names of
//      the parameters correspond to those of Q.2110
//
//Copyright:
//
//
//Licence:
//
//
//History:
 

#ifndef __AAUPPRIMITIVES_H__
#define __AAUPPRIMITIVES_H__

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


class pfProtocol;


//////////////////////////////////////////////////////////////////////
// class aaESTABLISHind
// class aaESTABLISHconf
// class aaRELEASEind
// class aaRELEASEconf
// class aaDATAind
// class aaRESYNCind
// class aaRESYNCconf
// class aaRECOVERind
// class aaUNITDATAind
// class aaRETRIEVEind
// class aaRETRIEVE_COMPLETEind
//
// AA primitive messenger classes: each class below represents one AA
// upward (indication, confirm) primitive and its parameters as a
// OVOPS++ messenger. If primitive has parameters, get- and set
// methods for those are defined.

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

        virtual void atProtocol(pfProtocol *protocol_, pfState *state_);
        void setSSCOP_UU(const pfFrame &SSCOP_UU_);
        pfFrame &getSSCOP_UU(void);

    private:
        pfFrame _SSCOP_UU;
};

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

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

        virtual void atProtocol(pfProtocol *protocol_, pfState *state_);
        void setSSCOP_UU(const pfFrame &SSCOP_UU_);
        pfFrame &getSSCOP_UU(void);

    private:
        pfFrame _SSCOP_UU;
};

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

class aaRELEASEind : public pfMsgTransporter
{
    public:
        aaRELEASEind(void);
        virtual ~aaRELEASEind(void);
        
        virtual void atProtocol(pfProtocol *protocol_, pfState *state_);
        void setSource(pfUlong source_);
        pfUlong getSource(void) const;
        void setSSCOP_UU(const pfFrame &SSCOP_UU_);
        pfFrame &getSSCOP_UU(void);

    private:
        pfUlong _source;
        pfFrame _SSCOP_UU;
};

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

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

        virtual void atProtocol(pfProtocol *protocol_, pfState *state_);
        void setSSCOP_UU(const pfFrame &SSCOP_UU_);
        pfFrame &getSSCOP_UU(void);

    private:
        pfFrame _SSCOP_UU;
};

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

class aaDATAind : public pfMsgTransporter
{
    public:
        aaDATAind(void);
        virtual ~aaDATAind(void);
        
        virtual void atProtocol(pfProtocol *protocol_, pfState *state_);
        void setSequenceNumber(pfUlong sequenceNumber_);
        pfUlong getSequenceNumber(void) const;
        void setMessageUnit(const pfFrame &frame_);
        pfFrame &getMessageUnit(void);

    private:
        pfUlong _sequenceNumber;
        pfFrame _messageUnit;
};

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

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

        virtual void atProtocol(pfProtocol *protocol_, pfState *state_);
        void setSSCOP_UU(const pfFrame &SSCOP_UU_);
        pfFrame &getSSCOP_UU(void);

    private:
        pfFrame _SSCOP_UU;
};

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

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

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

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

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

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

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

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

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

    private:
        pfFrame _messageUnit;
};

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

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

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

    private:
        pfFrame _messageUnit;
};

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

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

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


//////////////////////////////////////////////////////////////////
// Class aaUpInputs
//
// Pure virtual interface class for all protocol states using
// AA-interface (between SSCOP and SSCFs) upward primitive
// messengers (indications and confirms from SSCOP) defined above

class aaUpInputs
{
    public:
        virtual void aaESTABLISHindAct(aaESTABLISHind *messenger_,
                                       pfProtocol *protocol_) = 0;
        virtual void aaESTABLISHconfAct(aaESTABLISHconf *messenger_,
                                        pfProtocol *protocol_) = 0;
        virtual void aaRELEASEindAct(aaRELEASEind *messenger_,
                                     pfProtocol *protocol_) = 0;
        virtual void aaRELEASEconfAct(aaRELEASEconf *messenger_,
                                      pfProtocol *protocol_) = 0;
        virtual void aaDATAindAct(aaDATAind *messenger_,
                                  pfProtocol *protocol_) = 0;
        virtual void aaRESYNCindAct(aaRESYNCind *messenger_,
                                    pfProtocol *protocol_) = 0;
        virtual void aaRESYNCconfAct(aaRESYNCconf *messenger_,
                                     pfProtocol *protocol_) = 0;
        virtual void aaRECOVERindAct(aaRECOVERind *messenger_,
                                     pfProtocol *protocol_) = 0;
        virtual void aaUNITDATAindAct(aaUNITDATAind *messenger_,
                                      pfProtocol *protocol_) = 0;
        virtual void aaRETRIEVEindAct(aaRETRIEVEind *messenger_,
                                      pfProtocol *protocol_) = 0;
        virtual void aaRETRIEVE_COMPLETEindAct(
            aaRETRIEVE_COMPLETEind *messenger_,
            pfProtocol *protocol_) = 0;
};


#endif // __AAUPPRIMITIVES_H__
