summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorluwenpeng <[email protected]>2024-05-16 17:05:45 +0800
committerluwenpeng <[email protected]>2024-05-16 17:07:53 +0800
commit1559f0a13e2f91cff98afe24b4f05df87f8d7549 (patch)
tree5b5a31f5180b9cea55273b0c2d425139c53112cd
parentd6ae7c79f78a97e13d638d40261c8488b100b0c8 (diff)
bugfix: session cannot get current flow direction on duplicate package
-rw-r--r--src/session/session.cpp2
-rw-r--r--src/session/session_manager.cpp7
-rw-r--r--src/session/session_priv.h2
-rw-r--r--src/stellar/stellar.cpp3
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);
}
}