#include #include #include "packet_io.h" #include "session_manager.h" #include "plugin_manager.h" #include "http.h" struct stellar_event_base_loop_arg { struct packet_io_device *dev; struct session_manager *session_mgr; struct plugin_manager *plug_mgr; int tid; }; void *stellar_event_base_loop(void *arg) { struct stellar_packet *rx_pkt; struct stellar_event *event; struct stellar_event_base_loop_arg *thread_arg = (struct stellar_event_base_loop_arg *)arg; while(1) { int fetch_num = packet_io_rx(thread_arg->dev, thread_arg->tid, &rx_pkt, 1); if(fetch_num > 0) { event = session_manager_commit(thread_arg->session_mgr, rx_pkt); while(event) { plugin_manager_dispatch(thread_arg->plug_mgr ,event); event = session_manager_fetch_event(thread_arg->session_mgr); } //clean session_manager event queue packet_io_tx(thread_arg->dev, thread_arg->tid, &rx_pkt, 1); } else { //dispatch to time event //dispatch to trigger polling event } } return nullptr; } struct packet_io_device *packet_io_init(int worker_thread_num, const char *instance_name, const char *device_name) { struct packet_io_instance * instance = packet_io_create(PACKET_IO_PCAP, instance_name); struct packet_io_device *dev = packet_io_open_device(instance, device_name, worker_thread_num, worker_thread_num); return dev; } int main(int argc, char ** argv) { //manager_init struct session_manager *session_mgr = session_manager_init(); struct plugin_manager *plug_mgr = plugin_manager_create(); // register build-in plugin plugin_manager_register(plug_mgr, "HTTP", http_decoder); // load external plugins char absolute_plugin_file[] = "/op/tsg/sapp/plug/plugins.inf"; plugin_manager_load(plug_mgr, absolute_plugin_file); //packet_io_init struct packet_io_device *dev = packet_io_init(1, "stellar", "cap0"); //create_worker_thread stellar_event_base_loop_arg arg = {dev, session_mgr, plug_mgr, 0}; pthread_t worker_pid; pthread_create(&worker_pid, NULL, stellar_event_base_loop, (void *)&arg); //main_loop while (1) { /* main loop code */ usleep(1); } plugin_manager_destory(plug_mgr); return 0; }