Add session timer

This commit is contained in:
luwenpeng
2023-12-12 18:41:53 +08:00
parent 006315fb7c
commit 2d3e182b5a
11 changed files with 612 additions and 234 deletions

View File

@@ -0,0 +1,69 @@
#include "session_timer.h"
#include "session_private.h"
struct session_timer
{
struct timeouts *timeouts;
};
struct session_timer *session_timer_create()
{
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_destroy(timer);
return NULL;
}
void session_timer_destroy(struct session_timer *timer)
{
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;
timeouts_add(timer->timeouts, timeout, sess->abs_expire_ts);
}
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;
}