Add packet utils to packet.h

This commit is contained in:
luwenpeng
2024-04-11 19:44:02 +08:00
parent 84541c40e2
commit 17f5d338de
32 changed files with 615 additions and 558 deletions

View File

@@ -1,3 +1,4 @@
#include <assert.h>
#include "plugin_manager.h"
#include "session_private.h"
@@ -9,18 +10,23 @@ struct plugin_manager
void *plugin_manager_new_ctx(struct session *sess)
{
// TODO
return NULL;
return sess;
}
void plugin_manager_free_ctx(void *ctx)
{
// TODO
struct session *sess = (struct session *)ctx;
char buff[4096] = {0};
session_to_json(sess, buff, sizeof(buff));
PLUGIN_MANAGER_LOG_DEBUG("=> SESSION : %s", buff);
}
struct plugin_manager *plugin_manager_new(void)
{
// TODO
return NULL;
static struct plugin_manager mgr;
return &mgr;
}
void plugin_manager_free(struct plugin_manager *mgr)
@@ -31,30 +37,42 @@ void plugin_manager_free(struct plugin_manager *mgr)
void plugin_manager_dispatch_session(struct plugin_manager *mgr, struct session *sess, struct packet *pkt)
{
// TODO
// current implementation only for testing
PLUGIN_MANAGER_LOG_DEBUG("=> plugin dispatch session: %u %s\n", session_get_id(sess), session_get_tuple_str(sess));
session_dump(sess);
struct tcp_segment *seg;
enum session_state state = session_get_state(sess);
enum session_type type = session_get_type(sess);
PLUGIN_MANAGER_LOG_DEBUG("=> plugin dispatch session: %u %s %s %s", session_get_id(sess), session_get_tuple_str(sess), session_type_to_str(type), session_state_to_str(state));
if (session_get_type(sess) == SESSION_TYPE_TCP)
// session_print(sess);
if (packet_is_ctrl(pkt))
{
// TODO Trigger TCP ALL MSG with (mgr, sess, pkt)
do
{
struct tcp_segment *seg = session_get_tcp_segment(sess);
if (seg == NULL)
{
break;
}
// TODO Trigger TCP Stream MSG with (mgr, sess, seg->data, seg->len)
session_free_tcp_segment(sess, seg);
} while (1);
// trigger ctrl msg with (mgr, sess, pkt)
// dispatch_plugin()
}
else
{
// TODO Trigger UDP MSG
switch (type)
{
case SESSION_TYPE_TCP:
// trigger TCP msg with (mgr, sess, pkt)
// dispatch_plugin()
while ((seg = session_get_tcp_segment(sess)) != NULL)
{
// trigger TCP stream msg with (mgr, sess, seg->data, seg->len)
// dispatch_plugin()
session_free_tcp_segment(sess, seg);
}
break;
case SESSION_TYPE_UDP:
// trigger UDP msg with (mgr, sess, pkt)
// dispatch_plugin()
break;
default:
assert(0);
break;
}
}
}