struct plugin_manager; struct stellar { struct plugin_manager *plug_mgr; struct session_manager *sess_mgr; }; struct plugin_manager { int plug_mgr_session_exdata_index; UT_array *plugin_specs_array; UT_array *session_mq_schema_array; }; struct session_message { int topic_id; void *msg_data; struct session_message *next, *prev; }; struct bitmap; //store in session exdata struct plugin_manager_runtime { struct session_message *msgs;// message list struct bitmap *session_mq_status; //N * M bits, N topic, M subscriber void **plugin_exdata_array; void **plugin_ctx_array;//N plugins }; struct plugin_manager *plugin_manager_init( const char *plugin_spec_file_path); void plugin_manager_exit(struct plugin_manager *plug_mgr); struct packet; void plugin_manager_on_packet(struct plugin_manager *plug_mgr, struct packet *pkt); struct session; //void plugin_manager_on_session_opening(struct plugin_manager *plug_mgr, struct session *sess); //void plugin_manager_on_session_closing(struct plugin_manager *plug_mgr, struct session *sess); //publish and dispatch session msg(msg, pkt) on session_mq void plugin_manager_on_session_update(struct plugin_manager *plug_mgr, struct session *sess,const struct packet *pkt); struct plugin_managr_runtime *plugin_manager_per_session_runtime_new(struct plugin_manager *plug_mgr, struct session *sess); void plugin_manager_per_session_runtime_free(struct plugin_managr_runtime *rt);