2023-12-12 18:41:53 +08:00
|
|
|
#include "session_timer.h"
|
|
|
|
|
#include "session_private.h"
|
|
|
|
|
|
|
|
|
|
struct session_timer
|
|
|
|
|
{
|
|
|
|
|
struct timeouts *timeouts;
|
|
|
|
|
};
|
|
|
|
|
|
2024-03-08 14:20:36 +08:00
|
|
|
struct session_timer *session_timer_new()
|
2023-12-12 18:41:53 +08:00
|
|
|
{
|
|
|
|
|
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:
|
2024-03-08 14:20:36 +08:00
|
|
|
session_timer_free(timer);
|
2023-12-12 18:41:53 +08:00
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
|
2024-03-08 14:20:36 +08:00
|
|
|
void session_timer_free(struct session_timer *timer)
|
2023-12-12 18:41:53 +08:00
|
|
|
{
|
|
|
|
|
if (timer)
|
|
|
|
|
{
|
|
|
|
|
if (timer->timeouts)
|
|
|
|
|
{
|
|
|
|
|
timeouts_close(timer->timeouts);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
free(timer);
|
|
|
|
|
timer = NULL;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void session_timer_add_session(struct session_timer *timer, struct session *sess)
|
|
|
|
|
{
|
|
|
|
|
struct timeout *timeout = &sess->timeout;
|
2023-12-13 19:20:34 +08:00
|
|
|
timeouts_add(timer->timeouts, timeout, sess->expire_abs_ts);
|
2023-12-12 18:41:53 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void session_timer_del_session(struct session_timer *timer, struct session *sess)
|
|
|
|
|
{
|
|
|
|
|
struct timeout *timeout = &sess->timeout;
|
|
|
|
|
timeouts_del(timer->timeouts, timeout);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
struct session *session_timer_expire_session(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;
|
|
|
|
|
}
|
2024-01-17 11:47:55 +08:00
|
|
|
|
|
|
|
|
uint64_t session_timer_next_expire_interval(struct session_timer *timer)
|
|
|
|
|
{
|
|
|
|
|
return timeouts_timeout(timer->timeouts);
|
|
|
|
|
}
|