Files
sics/nwatch.h
Douglas Clowes 27e89241cf get it to build
2012-11-27 13:34:05 +11:00

111 lines
3.3 KiB
C

/*
* N E T W A T C H E R
*
* This module watches network connections for sockets becoming readable or
* writeable and invokes callbacks. It also provides a timer mechanism.
*
* Douglas Clowes, February 2007
*
*/
#ifndef SICSNETWATCHER
#define SICSNETWATCHER
#define nwatch_read 1
#define nwatch_write 2
/**
* \brief network or timer callback function
*
* \param context from the network/timer registration
* \param mode
* for network, nwatch_read or nwatch_write
* for timer, zero, reserved for future use
*
* \return normally zero, for future use
*/
typedef int (*pNWCallback) (void *context, int mode);
/* the abstract timer object handle */
typedef struct __netwatchtimer *pNWTimer;
/**
* \brief register a one-shot timer event
*
* \param handle pointer to location to receive the timer object handle
* \param mSec milliseconds after which the timer should expire
* \param callback function when timer expires
* \param context abstract context passed to callback function
* \return success=1, failure=0
*/
int NetWatchRegisterTimer(pNWTimer * handle, int mSec,
pNWCallback callback, void *context);
/**
* \brief register a periodic timer
*
* \param handle pointer to location to receive the timer object handle
* \param mSec milliseconds after which the timer should expire
* \param mSecPeriod milliseconds after which the timer should repeat
* \param callback function when timer expires
* \param context abstract context passed to callback function
* \return success=1, failure=0
*/
int NetWatchRegisterTimerPeriodic(pNWTimer * handle, int mSecInitial,
int mSecPeriod, pNWCallback callback,
void *context);
pNWTimer NetWatchGetActiveTimer(void);
int NetWatchGetTimerDelay(pNWTimer handle);
int NetWatchGetTimerInitial(pNWTimer handle);
int NetWatchGetTimerPeriod(pNWTimer handle);
int NetWatchSetTimerPeriod(pNWTimer handle, int mSecPeriod);
/**
* \brief remove a registered timer event
*
* \param handle from the timer registration
* \return success=1, failure=0
*/
int NetWatchRemoveTimer(pNWTimer handle);
/* the abstract socket object handle */
typedef struct __netwatchcontext *pNWContext;
/**
* \brief register a socket to be watched in read mode
*
* \param handle pointer to location to receive the socket object handle
* \param iSocket file descriptor number of the socket to watch
* \param callback function when socket readable/writeable
* \param context abstract context passed to callback function
* \return success=1, failure=0
*/
int NetWatchRegisterCallback(pNWContext * handle, int iSocket,
pNWCallback callback, void *context);
/**
* \brief remove a socket callback registration
*
* \param handle from the socket registration
* \return success=1, failure=0
*/
int NetWatchRemoveCallback(pNWContext handle);
/**
* \brief retrieve the mode of a socket callback registration
*
* \param handle from the socket registration
* \return 0=failure else the mode (read and/or write)
*/
int NetWatchGetMode(pNWContext handle);
/**
* \brief set the mode of a socket callback registration
*
* \param handle from the socket registration
* \param mode read and/or write
* \return 0=failure, 1=success
*/
int NetWatchSetMode(pNWContext handle, int mode);
#endif /* SICSNETWATCHER */