#include #include "plugin_manager.h" #include "session_private.h" struct plugin_manager { // TODO }; void *plugin_manager_new_ctx(struct session *sess) { // TODO 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 static struct plugin_manager mgr; return &mgr; } void plugin_manager_free(struct plugin_manager *mgr) { // TODO } void plugin_manager_dispatch_session(struct plugin_manager *mgr, struct session *sess, struct packet *pkt) { // TODO // current implementation only for testing 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)); // session_print(sess); if (packet_is_ctrl(pkt)) { // trigger ctrl msg with (mgr, sess, pkt) // dispatch_plugin() } else { 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; } } } void plugin_manager_dispatch_packet(struct plugin_manager *mgr, struct packet *pkt) { // TODO }