//Editor-Info: -*- C++ -*-
//
//Subject: TOVE-project / AA interface
//
//File: cpcsdownprimitives.h
//
//Version: $Revision: 1.15 $
//
//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.request primitive (from Layer 3 or SSCS protocol
//      to AAL5 CPCS) definition as a OVOPS++ messenger classes.
//      Get/set methods for 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 __CPCSDOWNPRIMITIVES_H__
#define __CPCSDOWNPRIMITIVES_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 cpcsUNITDATAreq
//
// CPCS-UNITDATA.request messenger definition

class cpcsUNITDATAreq : public pfMsgTransporter
{
    public:
        cpcsUNITDATAreq(void);
        virtual ~cpcsUNITDATAreq(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 cpcsDownInputs
//
// Pure virtual interface class for all protocol states using
// CPCS-interface upward primitive messengers defined above

class cpcsDownInputs
{
    public:
        virtual void cpcsUNITDATAreqAct(cpcsUNITDATAreq *messenger_,
                                        pfProtocol *protocol_) const = 0;
};


#endif // __CPCSDOWNPRIMITIVES_H__
