summaryrefslogtreecommitdiff
path: root/src/session/session.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/session/session.cpp')
-rw-r--r--src/session/session.cpp55
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;