#include "packet_io.h" #include "session_manager.h" #include "plugin_manager.h" #include "http.h" #include "../sdk/include/logger.h" struct engine_instance { struct packet_io_config pio_config; }; struct engine_instance g_engine_instance; struct packet_io_loop_arg { struct packet_io_device *dev; int thread_id; }; void packet_io_loop(struct packet_io_loop_arg *arg) { struct packet *rx_pkt; struct session_event *event; while(1) { int fetch_num = packet_io_rx(arg->dev, arg->thread_id, &rx_pkt, 1); if(fetch_num > 0) { event = session_manager_commit(rx_pkt); while(event) { plugin_manager_dispatch(event); event = session_manager_fetch_event(); } //clean session_manager event queue packet_io_tx(arg->dev, arg->thread_id, &rx_pkt, 1); } else { //dispatch to time event //dispatch to trigger polling event } } return; } struct packet_io_device *packet_io_init(int worker_thread_num, const char *device_name) { struct packet_io_instance *ppio_instance = packet_io_instance_init(&g_engine_instance.pio_config); if (nullptr == ppio_instance) { log_error(ST_ERR_PIO_INSTANCE, "packet_io instance init failed."); return nullptr; } struct packet_io_device *ppio_device = packet_io_open_device(ppio_instance, nullptr, worker_thread_num, worker_thread_num); if (nullptr == ppio_device) { log_error(ST_ERR_PIO_DEVICE, "packet_io device open failed."); } return ppio_device; } int main(int argc, char ** argv) { /* global engine instance init */ memset(&g_engine_instance, 0, sizeof(g_engine_instance)); g_engine_instance.pio_config.mode = PACKET_IO_RUN_MODE_PCAP_FILE; strncpy(g_engine_instance.pio_config.dev_name[0], "./test.pcap", sizeof(NAME_MAX_LEN)); g_engine_instance.pio_config.dev_cnt = 1; /* packet io init */ packet_io_instance_init(&g_engine_instance.pio_config); session_manager_session_event_register(http_decoder, SESSION_TYPE_HTTP); //create_worker_thread //main_loop return 0; }