Add session manager
This commit is contained in:
@@ -300,13 +300,15 @@ void session_free_ex_data(struct session *sess, uint8_t idx)
|
||||
******************************************************************************/
|
||||
|
||||
// session expire
|
||||
void session_set_expirecb(struct session *sess, session_expire_cb fn, uint64_t abs_expire_ts)
|
||||
void session_set_expirecb(struct session *sess, session_expire_cb expire_cb, void *expire_arg, uint64_t expire_abs_ts)
|
||||
{
|
||||
struct timeout *timeout = &sess->timeout;
|
||||
|
||||
timeout_init(timeout, TIMEOUT_ABS);
|
||||
timeout_setcb(timeout, fn, sess);
|
||||
sess->abs_expire_ts = abs_expire_ts;
|
||||
timeout_setcb(timeout, NULL, sess);
|
||||
sess->expire_cb = expire_cb;
|
||||
sess->expire_arg = expire_arg;
|
||||
sess->expire_abs_ts = expire_abs_ts;
|
||||
}
|
||||
|
||||
void session_del_expirecb(struct session *sess)
|
||||
@@ -314,14 +316,15 @@ void session_del_expirecb(struct session *sess)
|
||||
struct timeout *timeout = &sess->timeout;
|
||||
|
||||
timeout_init(timeout, 0);
|
||||
sess->abs_expire_ts = 0;
|
||||
sess->expire_cb = NULL;
|
||||
sess->expire_arg = NULL;
|
||||
sess->expire_abs_ts = 0;
|
||||
}
|
||||
|
||||
void session_run_expirecb(struct session *sess)
|
||||
{
|
||||
struct timeout *timeout = &sess->timeout;
|
||||
if (timeout->callback.fn)
|
||||
if (sess->expire_cb)
|
||||
{
|
||||
timeout->callback.fn(timeout->callback.arg);
|
||||
sess->expire_cb(sess, sess->expire_arg);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user