#include "session_timer.h" #include "session_private.h" struct session_timer { struct timeouts *timeouts; }; struct session_timer *session_timer_new() { timeout_error_t err; struct session_timer *timer = (struct session_timer *)calloc(1, sizeof(struct session_timer)); if (timer == NULL) { return NULL; } timer->timeouts = timeouts_open(0, &err); if (timer->timeouts == NULL) { goto error; } return timer; error: session_timer_free(timer); return NULL; } void session_timer_free(struct session_timer *timer) { if (timer) { if (timer->timeouts) { timeouts_close(timer->timeouts); } free(timer); timer = NULL; } } void session_timer_add(struct session_timer *timer, struct session *sess) { struct timeout *timeout = &sess->timeout; timeouts_add(timer->timeouts, timeout, sess->expire_abs_ts); } void session_timer_del(struct session_timer *timer, struct session *sess) { struct timeout *timeout = &sess->timeout; timeouts_del(timer->timeouts, timeout); } struct session *session_timer_expire(struct session_timer *timer, uint64_t abs_current_ts) { timeouts_update(timer->timeouts, abs_current_ts); struct timeout *timeout = timeouts_get(timer->timeouts); if (timeout == NULL) { return NULL; } struct session *sess = (struct session *)timeout->callback.arg; return sess; } uint64_t session_timer_next_expire_interval(struct session_timer *timer) { return timeouts_timeout(timer->timeouts); }