diff options
| author | luwenpeng <[email protected]> | 2024-05-16 17:05:45 +0800 |
|---|---|---|
| committer | luwenpeng <[email protected]> | 2024-05-16 17:07:53 +0800 |
| commit | 1559f0a13e2f91cff98afe24b4f05df87f8d7549 (patch) | |
| tree | 5b5a31f5180b9cea55273b0c2d425139c53112cd | |
| parent | d6ae7c79f78a97e13d638d40261c8488b100b0c8 (diff) | |
bugfix: session cannot get current flow direction on duplicate package
| -rw-r--r-- | src/session/session.cpp | 2 | ||||
| -rw-r--r-- | src/session/session_manager.cpp | 7 | ||||
| -rw-r--r-- | src/session/session_priv.h | 2 | ||||
| -rw-r--r-- | src/stellar/stellar.cpp | 3 |
4 files changed, 9 insertions, 5 deletions
diff --git a/src/session/session.cpp b/src/session/session.cpp index 542dba1..659f7b5 100644 --- a/src/session/session.cpp +++ b/src/session/session.cpp @@ -75,7 +75,7 @@ enum session_direction session_get_direction(const struct session *sess) return sess->sess_dir; } -void session_set_flow_direction(struct session *sess, enum flow_direction dir) +void session_set_current_flow_direction(struct session *sess, enum flow_direction dir) { sess->flow_dir = dir; } diff --git a/src/session/session_manager.cpp b/src/session/session_manager.cpp index 9bf66ee..ce6431e 100644 --- a/src/session/session_manager.cpp +++ b/src/session/session_manager.cpp @@ -496,6 +496,9 @@ static int duplicated_packet_bypass(struct session_manager *mgr, struct session break; } session_set_duplicate_traffic(sess); + + session_set_current_packet(sess, pkt); + session_set_current_flow_direction(sess, dir); return 1; } else @@ -578,7 +581,7 @@ static void session_update(struct session *sess, enum session_state next_state, } session_set_current_packet(sess, pkt); - session_set_flow_direction(sess, dir); + session_set_current_flow_direction(sess, dir); session_set_timestamp(sess, SESSION_TIMESTAMP_LAST, real_sec); session_set_state(sess, next_state); } @@ -997,7 +1000,7 @@ void session_manager_free_session(struct session_manager *mgr, struct session *s session_clear_sid_list(sess, FLOW_DIRECTION_C2S); session_clear_sid_list(sess, FLOW_DIRECTION_S2C); session_set_current_packet(sess, NULL); - session_set_flow_direction(sess, FLOW_DIRECTION_NONE); + session_set_current_flow_direction(sess, FLOW_DIRECTION_NONE); session_pool_push(mgr->sess_pool, sess); sess = NULL; } diff --git a/src/session/session_priv.h b/src/session/session_priv.h index 8261649..b04906d 100644 --- a/src/session/session_priv.h +++ b/src/session/session_priv.h @@ -81,7 +81,7 @@ void session_set_tuple(struct session *sess, const struct tuple6 *key); void session_set_tuple_direction(struct session *sess, enum flow_direction dir); void session_set_direction(struct session *sess, enum session_direction dir); -void session_set_flow_direction(struct session *sess, enum flow_direction dir); +void session_set_current_flow_direction(struct session *sess, enum flow_direction dir); void session_set_state(struct session *sess, enum session_state state); void session_set_type(struct session *sess, enum session_type type); void session_set_duplicate_traffic(struct session *sess); diff --git a/src/stellar/stellar.cpp b/src/stellar/stellar.cpp index d1bf30d..da5c79d 100644 --- a/src/stellar/stellar.cpp +++ b/src/stellar/stellar.cpp @@ -19,6 +19,7 @@ static void update_session_stat(struct session *sess, struct packet *pkt) if (sess) { enum flow_direction dir = session_get_current_flow_direction(sess); + assert(dir != FLOW_DIRECTION_NONE); int is_ctrl = packet_is_ctrl(pkt); switch (packet_get_action(pkt)) { @@ -36,7 +37,7 @@ static void update_session_stat(struct session *sess, struct packet *pkt) } session_set_current_packet(sess, NULL); - session_set_flow_direction(sess, FLOW_DIRECTION_NONE); + session_set_current_flow_direction(sess, FLOW_DIRECTION_NONE); } } |
