//Editor-Info: -*- C++ -*-
//
//Subject:
//
//File: ccindications.h
//
//Version: $ $
//
//State: $ $
//
//Date: $Date: 1998/12/03 11:31:52 $
//
//Organisation:
//      University of Technology
// 
//Author:
//      Pasi Nummisalo
//
//Description:
//     
//
//Copyright:
//     University of Technology
//     Laboratory of Telecommunications and Multimedia 
//      
//Licence:
//     
//
//History:
//

#ifndef __CC_INDICATIONS_H__
#define __CC_INDICATIONS_H__ 

#include "pf/timer.h"
#include "pf/messenge.h"
#include "pf/state.h"
#include "ccprotocol.h"

class ccIndications : public pfMessenger
{
    public:
        ccIndications(void);
        virtual ~ccIndications(void);
};


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

class ccSETUPpdu : public ccIndications
{
    public:
        ccSETUPpdu(pfStorage &data_);
        virtual ~ccSETUPpdu(void);
        virtual void apply(pfState *state_, pfProtocol *protocol_);
};

class ccALERTINGpdu : public ccIndications
{
    public:
        virtual void apply(pfState *state_, pfProtocol *protocol_);
};

class ccRELEASEpdu : public ccIndications
{
    public:
        virtual void apply(pfState *state_, pfProtocol *protocol_);
};

class ccRELEASE_ACTIVEpdu : public ccIndications
{
    public:
        virtual void apply(pfState *state_, pfProtocol *protocol_);
};

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

class ccInputs
{
    public:
        virtual void ccSETUPpduAct(ccSETUPpdu *messenger_,
                                  ccProtocol *protocol_) = 0;
        virtual void ccALERTINGpduAct(ccALERTINGpdu *messenger_,
                                  ccProtocol *protocol_) = 0;
        virtual void ccRELEASEpduAct(ccRELEASEpdu *messenger_,
                                     ccProtocol *protocol_) = 0;
        virtual void ccRELEASE_ACTIVEpduAct(ccRELEASE_ACTIVEpdu *messenger_,
                                            ccProtocol *protocol_) = 0;
};
    
// ----------------------------------------------------------------------

class ccTimerSSFtimeout : pfTimerMessenger
{
    public:
        static pfTimerMessenger *create(void);

        ccTimerSSFtimeout(const ccTimerSSFtimeout &other_);
        virtual ~ccTimerSSFtimeout(void);
        virtual pfTimerMessenger *clone(void) const;

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

        static const string timerName;
        static const pfUlong value1;
        static const pfUlong value2;

    protected:
        ccTimerSSFtimeout(void);
};

#endif // __CC_INDICATIONS_H__


