Add session_set_discard

This commit is contained in:
luwenpeng
2024-05-20 17:02:16 +08:00
parent be9a68935b
commit 3701fc7361
5 changed files with 43 additions and 18 deletions

View File

@@ -700,6 +700,7 @@ static struct session *session_manager_new_tcp_session(struct session_manager *m
return NULL;
}
session_init(sess);
sess->mgr = mgr;
sess->mgr_stat = &mgr->stat;
enum session_state next_state = session_transition_run(SESSION_STATE_INIT, TCP_SYN);
@@ -746,6 +747,7 @@ static struct session *session_manager_new_udp_session(struct session_manager *m
return NULL;
}
session_init(sess);
sess->mgr = mgr;
sess->mgr_stat = &mgr->stat;
enum flow_direction dir = identify_direction_by_port(ntohs(key->src_port), ntohs(key->dst_port));
@@ -1168,3 +1170,29 @@ struct session_manager_stat *session_manager_stat(struct session_manager *mgr)
{
return &mgr->stat;
}
void session_set_discard(struct session *sess)
{
uint64_t now = stellar_get_monotonic_time_msec();
struct session_manager *mgr = sess->mgr;
enum session_type type = session_get_type(sess);
enum session_state curr_state = session_get_current_state(sess);
enum session_state next_state = session_transition_run(curr_state, USER_CLOSE);
session_transition_log(sess, curr_state, next_state, USER_CLOSE);
session_set_current_state(sess, next_state);
switch (type)
{
case SESSION_TYPE_TCP:
session_timer_update(mgr->sess_timer, sess, now + mgr->opts.tcp_discard_timeout);
SESS_MGR_STAT_UPDATE(&mgr->stat, curr_state, next_state, tcp);
break;
case SESSION_TYPE_UDP:
session_timer_update(mgr->sess_timer, sess, now + mgr->opts.udp_discard_timeout);
SESS_MGR_STAT_UPDATE(&mgr->stat, curr_state, next_state, udp);
break;
default:
assert(0);
break;
}
}