summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/stellar/session.h2
-rw-r--r--infra/session_manager/session_manager.c30
-rw-r--r--infra/version.map2
3 files changed, 32 insertions, 2 deletions
diff --git a/include/stellar/session.h b/include/stellar/session.h
index a5dae67..5ada791 100644
--- a/include/stellar/session.h
+++ b/include/stellar/session.h
@@ -150,6 +150,8 @@ void *session_get_exdata(const struct session *sess, int idx);
struct session_manager;
struct session_manager *module_to_session_manager(struct module *mod);
int session_manager_new_session_exdata_index(struct session_manager *sess_mgr, const char *name, exdata_free *func, void *arg);
+struct session *session_manager_lookup_session_by_packet(struct session_manager *sess_mgr, uint16_t thread_id, const struct packet *pkt);
+struct session *session_manager_lookup_session_by_id(struct session_manager *sess_mgr, uint16_t thread_id, uint64_t sess_id);
struct session *packet_exdata_to_session(struct packet *pkt);
diff --git a/infra/session_manager/session_manager.c b/infra/session_manager/session_manager.c
index 96d421c..da6935b 100644
--- a/infra/session_manager/session_manager.c
+++ b/infra/session_manager/session_manager.c
@@ -337,6 +337,26 @@ int session_manager_new_session_exdata_index(struct session_manager *sess_mgr, c
return exdata_schema_new_index(sess_mgr->ex_sche, name, func, arg);
}
+struct session *session_manager_lookup_session_by_packet(struct session_manager *sess_mgr, uint16_t thread_id, const struct packet *pkt)
+{
+ struct session_manager_rte *rte = session_manager_get_rte(sess_mgr, thread_id);
+ if (rte == NULL)
+ {
+ return NULL;
+ }
+ return session_manager_rte_lookup_session_by_packet(rte, pkt);
+}
+
+struct session *session_manager_lookup_session_by_id(struct session_manager *sess_mgr, uint16_t thread_id, uint64_t sess_id)
+{
+ struct session_manager_rte *rte = session_manager_get_rte(sess_mgr, thread_id);
+ if (rte == NULL)
+ {
+ return NULL;
+ }
+ return session_manager_rte_lookup_session_by_id(rte, sess_id);
+}
+
int session_manager_init(struct session_manager *sess_mgr, uint16_t thread_id)
{
assert(sess_mgr);
@@ -462,8 +482,14 @@ void session_manager_on_thread_exit(struct module_manager *mod_mgr, int thread_i
struct session_manager_rte *session_manager_get_rte(struct session_manager *sess_mgr, uint16_t thread_id)
{
assert(sess_mgr);
- assert(thread_id < sess_mgr->cfg->thread_num);
- return sess_mgr->rte[thread_id];
+ if (thread_id < sess_mgr->cfg->thread_num)
+ {
+ return sess_mgr->rte[thread_id];
+ }
+ else
+ {
+ return NULL;
+ }
}
struct session_manager_cfg *session_manager_get_cfg(struct session_manager *sess_mgr)
diff --git a/infra/version.map b/infra/version.map
index 47a20b9..85ec0ed 100644
--- a/infra/version.map
+++ b/infra/version.map
@@ -48,6 +48,8 @@ global:
session_manager_on_thread_init;
session_manager_on_thread_exit;
session_manager_new_session_exdata_index;
+ session_manager_lookup_session_by_packet;
+ session_manager_lookup_session_by_id;
packet_exdata_to_session;
session_monitor_on_init;