diff options
Diffstat (limited to 'src/session/session.cpp')
| -rw-r--r-- | src/session/session.cpp | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/src/session/session.cpp b/src/session/session.cpp index 542dba1..d57b843 100644 --- a/src/session/session.cpp +++ b/src/session/session.cpp @@ -1,5 +1,7 @@ +#include "stellar/session.h" #include <assert.h> +#include "packet_priv.h" #include "session_priv.h" #include "tcp_utils.h" #include "tcp_reassembly.h" @@ -65,6 +67,11 @@ const char *session_get_tuple6_str(const struct session *sess) return sess->tuple_str; } +const char *session_get0_readable_addr(struct session *sess) +{ + return sess->tuple_str; +} + void session_set_direction(struct session *sess, enum session_direction dir) { sess->sess_dir = dir; @@ -95,6 +102,11 @@ enum session_state session_get_state(const struct session *sess) return sess->state; } +enum session_state session_get_current_state(const struct session *sess) +{ + return sess->state; +} + void session_set_type(struct session *sess, enum session_type type) { sess->type = type; @@ -195,6 +207,49 @@ const struct packet *session_get_current_packet(const struct session *sess) return sess->curr_pkt; } +const inline struct packet *session_get0_current_packet(struct session *sess) +{ + return sess->curr_pkt; +} + +const char *session_get0_current_payload(struct session *sess, size_t *payload_len) +{ + const struct packet *pkt=session_get_current_packet(sess); + if(pkt) + { + const struct packet_layer *pkt_layer=packet_get_innermost_layer(pkt, LAYER_TYPE_ALL); + if(pkt_layer) + { + *payload_len=pkt_layer->pld_len; + return pkt_layer->pld_ptr; + } + } + *payload_len=0; + return NULL; +} + +int session_is_symmetric(struct session *sess, unsigned char *flag) +{ + int is_symmetric=0; + if (sess->first_pkt[FLOW_DIRECTION_C2S] && sess->first_pkt[FLOW_DIRECTION_S2C]) + { + if (flag) + *flag = (SESSION_SEEN_C2S_FLOW | SESSION_SEEN_S2C_FLOW); + is_symmetric = 1; + } + else if (sess->first_pkt[FLOW_DIRECTION_C2S]) + { + if (flag) + *flag = SESSION_SEEN_C2S_FLOW; + } + else if (sess->first_pkt[FLOW_DIRECTION_S2C]) + { + if (flag) + *flag = SESSION_SEEN_S2C_FLOW; + } + return is_symmetric; +} + void session_set_user_data(struct session *sess, void *user_data) { sess->user_data = user_data; |
