//Editor-Info: -*- C++ -*-
//
//Subject: TOVE project
//
//File: bisuptimeouts.h
//
//Version: $Revision: 1.1 $
//
//State: $State: Exp $
//
//Date: $Date: 1998/10/28 14:20:38 $
//
//Organisation:
//      Helsinki University of Technology
//      Laboratory of Telecommunications Software and Multimedia
//
//Author:
//      Jari Pusa
//
//Description:
//
//
//Copyright:
//
//
//Licence:
//
//
//History: 

#ifndef __BISUP_BISUPTIMEOUTS_H__
#define __BISUP_BISUPTIMEOUTS_H__

#include "pf/timer.h"

class pfState;
class pfProtocol;


//
// Class: bisupT1btimeout / Await Release Complete
//
// Description:
//      Timer is started when RELEASE is sent. (see uniT308timeout)
//

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

        bisupT1btimeout(const bisupT1btimeout &other_);
        virtual ~bisupT1btimeout(void);

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

    protected:
        bisupT1btimeout(void);
};


//
// Class: bisupT7btimeout / Await Address Complete
//
// Description:
//      Timer is started when the latest address message is sent.
//

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

        bisupT7btimeout(const bisupT7btimeout &other_);
        virtual ~bisupT7btimeout(void);
        
        virtual pfTimerMessenger *clone(void) const;
        virtual void apply(pfState *state_, pfProtocol *protocol_);

    protected:
        bisupT7btimeout(void);
};


//
// Class: bisupT9btimeout / Await answer
//
// Description:
//      Timer is started when ACM is received. (see uniT301timeout)
//

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

        bisupT9btimeout(const bisupT9btimeout &other_);
        virtual ~bisupT9btimeout(void);
        
        virtual pfTimerMessenger *clone(void) const;
        virtual void apply(pfState *state_, pfProtocol *protocol_);

    protected:
        bisupT9btimeout(void);
};



//
// Class: bisupT40btimeout / Await IAM acknowledge
//
// Description:
//      Timer is started when SETUP is sent. (see uniT303timeout)
//

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

        bisupT40btimeout(const bisupT40btimeout &other_);
        virtual ~bisupT40btimeout(void);
        
        virtual pfTimerMessenger *clone(void) const;
        virtual void apply(pfState *state_, pfProtocol *protocol_);

    protected:
        bisupT40btimeout(void);
};


//
// Class: bisup*TimeoutInputs
//
// Description:
//      Abstract classes for timer inputs.
//

class bisupTimeoutInputs
{
    public:
        virtual void bisupT1btimeoutAct(pfProtocol *protocol_) = 0;
        virtual void bisupT7btimeoutAct(pfProtocol *protocol_) = 0;
        virtual void bisupT9btimeoutAct(pfProtocol *protocol_) = 0;
        virtual void bisupT40btimeoutAct(pfProtocol *protocol_) = 0;
};

#endif // __BISUP_BISUPTIMEOUTS_H__

