/*
* timer.c
*
* Written by Archie Cobbs <archie@freebsd.org>
* Copyright (c) 1995-1999 Whistle Communications, Inc. All rights reserved.
* See ``COPYRIGHT.whistle''
*/
#include "ppp.h"
/*
* INTERNAL FUNCTIONS
*/
static void TimerExpires(int type, void *cookie);
/*
* TimerInit()
*/
void
TimerInit(PppTimer timer, const char *desc,
int load, void (*handler)(void *), void *arg)
{
memset(timer, 0, sizeof(*timer));
timer->load = (load >= 0) ? load : 0;
timer->func = handler;
timer->arg = arg;
}
/*
* TimerStart()
*/
void
TimerStart(PppTimer timer)
{
/* Stop timer if running */
assert(timer->func);
if (timer->event != NULL)
EventUnRegister(&timer->event);
/* Register timeout event */
EventRegister(&timer->event, EVENT_TIMEOUT,
timer->load, 0, TimerExpires, timer);
}
/*
* TimerStartRecurring()
*/
void
TimerStartRecurring(PppTimer timer)
{
/* Stop timer if running */
assert(timer->func);
if (timer->event != NULL)
EventUnRegister(&timer->event);
/* Register timeout event */
EventRegister(&timer->event, EVENT_TIMEOUT,
timer->load, EVENT_RECURRING, TimerExpires, timer);
}
/*
* TimerExpires()
*/
static void
TimerExpires(int type, void *cookie)
{
PppTimer const timer = (PppTimer) cookie;
(*timer->func)(timer->arg);
}
/*
* TimerRemain()
*
* Return number of ticks left on a timer, or -1 if not running.
*/
int
TimerRemain(PppTimer t)
{
return(EventTimerRemain(&t->event));
}
syntax highlighted by Code2HTML, v. 0.9.1