src/modules/ims_charging/ro_timer.h
acbbae2a
 /* 
  * File:   ro_timer.h
  * Author: Jason Penton
  *
  * Created on 06 April 2011, 1:39 PM
  */
 
 #ifndef RO_TIMER_H
 #define	RO_TIMER_H
 
cf83221d
 #include "../../core/locking.h"
 #include "../../core/timer.h"
acbbae2a
 
32e26c3e
 extern struct interim_ccr *i_req;
 
acbbae2a
 /*! ro timeout list */
 struct ro_tl {
     struct ro_tl *next;
     struct ro_tl *prev;
     volatile unsigned int timeout; /*!< timeout in seconds */
 };
 
 /*! ro_session timer */
 struct ro_timer {
     struct ro_tl first; /*!< ro session timeout list */
     gen_lock_t *lock; /*!< lock for the list */
 };
 
 /*! ro_session timer handler */
 typedef void (*ro_timer_handler)(struct ro_tl *);
 
 
 /*!
  * \brief Initialize the ro_session timer handler
  * Initialize the ro_session timer handler, allocate the lock and a global
  * timer in shared memory. The global timer handler will be set on success.
  * \param hdl dialog timer handler
  * \return 0 on success, -1 on failure
  */
 int init_ro_timer(ro_timer_handler);
 
 
 /*!
  * \brief Destroy ro_session dialog timer
  */
 void destroy_ro_timer(void);
 
 
 /*!
  * \brief Insert a ro_session timer to the list
  * \param tl ro_session timer list
  * \param interval timeout value in seconds
  * \return 0 on success, -1 when the input timer list is invalid
  */
 int insert_ro_timer(struct ro_tl *tl, int interval);
 
 
 /*!
  * \brief Remove a ro_session timer from the list
  * \param tl ro_session timer that should be removed
  * \return 1 when the input timer is empty, 0 when the timer was removed,
  * -1 when the input timer list is invalid
  */
 int remove_ro_timer(struct ro_tl *tl);
 
 
 /*!
  * \brief Update a ro_session timer on the list
  * \param tl ro_session timer
  * \param timeout new timeout value in seconds
  * \return 0 on success, -1 when the input list is invalid
  * \note the update is implemented as a remove, insert
  */
 int update_ro_timer(struct ro_tl *tl, int timeout);
 
 
 /*!
  * \brief Timer routine for expiration of ro_session credit reservations
  * Timer handler for expiration of ro_session credit reservations, runs the global timer handler on them.
  * \param time for expiration checks on credit reservations
  * \param attr unused
  */
 void ro_timer_routine(unsigned int ticks, void * attr);
 
 /* this is the function called when a we need to request more funds/credit. We need to try and reserve more credit.
  * If we cant we need to put a new timer to kill the call at the appropriate time
  */
 void ro_session_ontimeout(struct ro_tl *tl);
 
e745e18e
 void resume_ro_session_ontimeout(struct interim_ccr *i_req, int timeour_or_error);
32e26c3e
 
acbbae2a
 #endif	/* RO_TIMER_H */