summaryrefslogtreecommitdiff
path: root/test/include/plugin_manager_interna.h
diff options
context:
space:
mode:
Diffstat (limited to 'test/include/plugin_manager_interna.h')
-rw-r--r--test/include/plugin_manager_interna.h199
1 files changed, 199 insertions, 0 deletions
diff --git a/test/include/plugin_manager_interna.h b/test/include/plugin_manager_interna.h
new file mode 100644
index 0000000..e579e03
--- /dev/null
+++ b/test/include/plugin_manager_interna.h
@@ -0,0 +1,199 @@
+#include "plugin_manager.h"
+
+#include "stellar/stellar.h"
+
+#include "stellar/session_exdata.h"
+#include "stellar/session_mq.h"
+
+
+#include "stellar/packet_exdata.h"
+#include "stellar/packet_mq.h"
+
+
+#include "bitmap.h"
+#include "utarray.h"
+
+struct per_thread_exdata_array
+{
+ struct stellar_exdata *exdata_array;
+};
+
+struct stellar_message;
+
+struct plugin_manger_per_thread_data
+{
+ struct per_thread_exdata_array per_thread_pkt_exdata_array;
+ struct stellar_message *priority_mq[SESSION_MQ_PRIORITY_MAX];// message list
+ struct stellar_message *dealth_letter_queue;// dlq list
+ long long pub_packet_msg_cnt;
+};
+
+
+
+struct plugin_manager_schema
+{
+ struct stellar *st;
+ UT_array *plugin_load_specs_array;
+ UT_array *packet_exdata_schema_array;
+ UT_array *session_exdata_schema_array;
+ UT_array *stellar_mq_schema_array;
+ UT_array *registered_session_plugin_array;
+ UT_array *registered_packet_plugin_array;
+ UT_array *registered_polling_plugin_array;
+ int packet_mq_topic_num;
+ int session_mq_topic_num;
+ int packet_topic_subscriber_num;
+ int session_topic_subscriber_num;
+ int tcp_topic_id;
+ int tcp_stream_topic_id;
+ int udp_topic_id;
+ int egress_topic_id;
+ int control_packet_topic_id;
+ int max_message_dispatch;
+ struct plugin_manger_per_thread_data *per_thread_data;
+}__attribute__((aligned(sizeof(void*))));
+
+enum plugin_exdata_state
+{ INIT, ACTIVE, EXIT };
+
+struct stellar_exdata
+{
+ void *exdata;
+ enum plugin_exdata_state state;
+};
+
+
+
+struct stellar_exdata_schema
+{
+ char *name;
+ union
+ {
+ void *free_func;
+ session_exdata_free *sess_free_func;
+ packet_exdata_free *pkt_free_func;
+ };
+
+ void *free_arg;
+ int idx;
+}__attribute__((aligned(sizeof(void*))));
+
+
+enum stellar_topic_type
+{
+ ON_SESSION_TOPIC,
+ ON_PACKET_TOPIC,
+};
+
+struct stellar_message
+{
+ struct
+ {
+ int topic_id;
+ enum stellar_topic_type type;
+ enum session_mq_priority priority;
+ } header;
+ void *body;
+ struct stellar_message *next, *prev;
+} __attribute__((aligned(sizeof(void *))));
+
+typedef struct stellar_mq_subscriber
+{
+ int topic_subscriber_idx;
+ int plugin_idx;
+ union
+ {
+ on_session_msg_cb_func *sess_msg_cb;
+ on_packet_msg_cb_func *pkt_msg_cb;
+ void *msg_cb;
+ };
+ struct stellar_mq_subscriber *next, *prev;
+}stellar_mq_subscriber __attribute__((aligned(sizeof(void*))));
+
+
+struct stellar_mq_topic_schema
+{
+ char *topic_name;
+ void *free_cb_arg;
+ int topic_id;
+ int subscriber_cnt;
+ int is_destroyed;
+ union
+ {
+ void *free_cb;
+ session_msg_free_cb_func *sess_msg_free_cb;
+ packet_msg_free_cb_func *pkt_msg_free_cb;
+ };
+ struct stellar_mq_subscriber *subscribers;
+}__attribute__((aligned(sizeof(void*))));
+
+
+
+struct session_plugin_ctx_runtime
+{
+ enum plugin_exdata_state state;
+ int session_plugin_id;
+ void *plugin_ctx;
+}__attribute__((aligned(sizeof(void*))));
+
+
+
+struct plugin_manager_runtime
+{
+ struct plugin_manager_schema *plug_mgr;
+ struct session *sess;
+ struct bitmap *session_mq_status; //N * M bits, N topic, M subscriber
+ struct bitmap *session_topic_status; //N bits, N topic
+ struct stellar_exdata *sess_exdata_array;
+ struct session_plugin_ctx_runtime *plugin_ctx_array;//N plugins TODO: call alloc and free
+ int current_session_plugin_id;
+ int pub_session_msg_cnt;
+}__attribute__((aligned(sizeof(void*))));
+
+struct registered_packet_plugin_schema
+{
+ char ip_protocol;
+ plugin_on_packet_func *on_packet;
+ void *plugin_env;
+ UT_array *registed_packet_mq_subscriber_info;
+}__attribute__((aligned(sizeof(void*))));
+
+struct registered_polling_plugin_schema
+{
+ plugin_on_polling_func *on_polling;
+ void *plugin_env;
+}__attribute__((aligned(sizeof(void*))));
+
+struct stellar_mq_subscriber_info
+{
+ int topic_id;
+ int subscriber_idx;
+}__attribute__((aligned(sizeof(void*))));
+
+struct registered_session_plugin_schema
+{
+ session_ctx_new_func *on_ctx_new;
+ session_ctx_free_func *on_ctx_free;
+ void *plugin_env;
+ UT_array *registed_session_mq_subscriber_info;
+}__attribute__((aligned(sizeof(void*))));
+
+#define SESSION_PULGIN_ID_BASE 0x00000
+#define PACKET_PULGIN_ID_BASE 0x10000
+#define POLLING_PULGIN_ID_BASE 0x20000
+
+/*******************************
+ * PLUGIN MANAGER INIT & EXIT *
+ *******************************/
+
+#define MAX_MSG_PER_DISPATCH 128
+
+#include <dlfcn.h>
+
+struct plugin_specific
+{
+ char plugin_name[256];
+ plugin_on_load_func *load_cb;
+ plugin_on_unload_func *unload_cb;
+ void *plugin_ctx;
+}__attribute__((aligned(sizeof(void*)))); \ No newline at end of file