//Editor-Info: -*- C++ -*-
//
//Subject: TOVE-project / AA interface
//
//File: cpcsupprimitives.h
//
//Version: $Revision: 1.16 $
//
//State: $State: Exp $
//
//Date: $Date: 1998/05/26 14:15:47 $
//
//Organisation:
//      Helsinki University of Technology
//      Laboratory of Telecommunications and Multimedia
//
//Author:
//      Juhana Räsänen
//
//Description:
//      CPCS-UNITDATA.indication primitive (from AAL5 CPCS to SSCS or
//      Layer 3 protocol) definition as a OVOPS++ messenger classes.
//      Get/set methods fot primitive parametes are defined; names of
//      the parameters correspond to those of I.363 (message mode, no
//      corrupted data delivery option)
//
//Copyright:
//
//
//Licence:
//
//
//History:
 

#ifndef __CPCSUPPRIMITIVES_H__
#define __CPCSUPPRIMITIVES_H__

#include "pf/transp.h"
#include "pf/types.h"
#include "pf/frame.h"
#include <sys/socket.h>
#include <netinet/in.h>

class pfProtocol;
class pfState;


//////////////////////////////////////////////////////////////////////
// Class cpcsUNITDATAind
//
// CPCS-UNITDATA.indication messenger definition

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

        virtual void atProtocol(pfProtocol *const protocol_, pfState *state_);
        void setInterfaceData(const pfFrame &frame_);
        pfFrame &getInterfaceData(void);
        void setLossPriority(pfUlong lossPriority_);
        pfUlong getLossPriority(void) const;
        void setCongestionIndication(pfUlong congestionIndication_);
        pfUlong getCongestionIndication(void) const;
        void setCPCS_UU(pfByte CPCS_UU_);
        pfByte getCPCS_UU(void) const;
	void setAddress(const struct sockaddr_in &address_);
	const struct sockaddr_in &getAddress(void) const;
 
    private:
        pfFrame _interfaceData;
        pfUlong _lossPriority;
        pfUlong _congestionIndication;
        pfByte _CPCS_UU;
	struct sockaddr_in _address;
};


/////////////////////////////////////////////////////////////////////
// Class cpcsUpInputs
//
// Pure virtual interface class for all protocol states using
// CPCS-interface upward primitive messengers defined above

class cpcsUpInputs
{
    public:
        virtual void cpcsUNITDATAindAct(cpcsUNITDATAind *messenger_,
                                        pfProtocol *protocol_) const = 0;
};


#endif // __CPCSUPPRIMITIVES_H__
