This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
stellar-stellar/src/session/session_timer.cpp

79 lines
1.7 KiB
C++
Raw Normal View History

2023-12-12 18:41:53 +08:00
#include "session_timer.h"
#include "session_private.h"
struct session_timer
{
struct timeouts *timeouts;
};
2024-03-29 19:44:20 +08:00
struct session_timer *session_timer_new(uint64_t now)
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;
}
2024-03-29 19:44:20 +08:00
timeouts_update(timer->timeouts, now);
2023-12-12 18:41:53 +08:00
return timer;
error:
session_timer_free(timer);
2023-12-12 18:41:53 +08:00
return NULL;
}
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;
}
}
2024-03-29 19:44:20 +08:00
void session_timer_add(struct session_timer *timer, struct session *sess, uint64_t expires)
2023-12-12 18:41:53 +08:00
{
2024-03-29 19:44:20 +08:00
timeout_init(&sess->timeout, TIMEOUT_ABS);
timeouts_add(timer->timeouts, &sess->timeout, expires);
2023-12-12 18:41:53 +08:00
}
void session_timer_del(struct session_timer *timer, struct session *sess)
2023-12-12 18:41:53 +08:00
{
2024-03-29 19:44:20 +08:00
timeouts_del(timer->timeouts, &sess->timeout);
2023-12-12 18:41:53 +08:00
}
2024-03-29 19:44:20 +08:00
void session_timer_update(struct session_timer *timer, struct session *sess, uint64_t expires)
2023-12-12 18:41:53 +08:00
{
2024-03-29 19:44:20 +08:00
session_timer_del(timer, sess);
session_timer_add(timer, sess, expires);
}
struct session *session_timer_expire(struct session_timer *timer, uint64_t now)
{
timeouts_update(timer->timeouts, now);
2023-12-12 18:41:53 +08:00
struct timeout *timeout = timeouts_get(timer->timeouts);
if (timeout == NULL)
{
return NULL;
}
2024-03-29 19:44:20 +08:00
return container_of(timeout, struct session, timeout);
2023-12-12 18:41:53 +08:00
}
uint64_t session_timer_next_expire_interval(struct session_timer *timer)
{
return timeouts_timeout(timer->timeouts);
}