1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
#include "lua_module_manage_internal.h"
#include "lua_binding_function.h"
#include "stellar/utils.h"
#define GLOBAL_BASIC_SPACE_NAME "lua_module_manager_space"
#define MQ_SCHEMA_SPACE_NAME "mq_schema_space"
#define MQ_RUNTIME_SPACE_NAME "mq_runtime_space"
#define MODULE_MANAGER_SPACE_NAME "stellar_module_manager_space"
#define PACKET_SPACE_NAME "packet_space"
#define PACKET_MANAGER_SPACE_NAME "packet_manager_space"
#define SESSION_SPACE_NAME "session_space"
#define SESSION_MANAGER_SPACE_NAME "session_manager_space"
struct lua_state_cbind_func_spec lua_bind_function[] = {
{lua_get_lua_module_manager, GLOBAL_BASIC_SPACE_NAME, "get_lua_module_manager"},
{lua_get_stellar_module_manager, GLOBAL_BASIC_SPACE_NAME, "get_stellar_module_manager"},
{lua_get_mq_schema, GLOBAL_BASIC_SPACE_NAME, "get_mq_schema"},
{lua_get_mq_runtime, GLOBAL_BASIC_SPACE_NAME, "get_mq_runtime"},
{lua_get_logger, GLOBAL_BASIC_SPACE_NAME, "get_logger"},
{lua_get_packet_manager, GLOBAL_BASIC_SPACE_NAME, "get_pacekt_manager"},
{lua_get_session_manager, GLOBAL_BASIC_SPACE_NAME, "get_session_manager"},
{lua_get_current_thread_id, GLOBAL_BASIC_SPACE_NAME, "get_current_thread_id"},
{lua_get_max_thread_num, GLOBAL_BASIC_SPACE_NAME, "get_max_thread_num"},
{lua_mq_schema_get_topic_id, MQ_SCHEMA_SPACE_NAME, "get_topic_id"},
{lua_mq_schema_create_topic, MQ_SCHEMA_SPACE_NAME, "create_topic"},
{lua_mq_schema_update_topic, MQ_SCHEMA_SPACE_NAME, "update_topic"},
{lua_mq_shcema_destory_topic, MQ_SCHEMA_SPACE_NAME, "destory_topic"},
{lua_mq_schema_subscribe, MQ_SCHEMA_SPACE_NAME, "subcribe"},
{lua_mq_runtime_publish_message, MQ_RUNTIME_SPACE_NAME, "publish_message"},
{lua_packet_get_direction, PACKET_SPACE_NAME, "get_direction"},
{lua_packet_get_payload, PACKET_SPACE_NAME, "get_payload"},
{lua_packet_get_payload_len, PACKET_SPACE_NAME, "get_payload_len"},
{lua_packet_manager_subscribe, PACKET_MANAGER_SPACE_NAME, "subscribe"},
{lua_session_get0_current_packet, SESSION_SPACE_NAME, "get0_current_payload"},
{lua_session_manager_subscribe_tcp, SESSION_MANAGER_SPACE_NAME, "subscribe_tcp"},
{lua_session_manager_subscribe_udp, SESSION_MANAGER_SPACE_NAME, "subscribe_udp"},
{lua_session_manager_subscribe_control_packet, SESSION_MANAGER_SPACE_NAME, "subscribe_control_packet"},
{lua_session_manager_subscribe_tcp_stream, SESSION_MANAGER_SPACE_NAME, "subscribe_tcp_stream"},
{NULL, NULL, NULL},
};
#define ENUM_PACKET_STAGE_SPACE_NAME "packet_stage"
struct lua_state_cbind_data_spec lua_bind_data[] = {
{DATATYPE_INT, "0", ENUM_PACKET_STAGE_SPACE_NAME, "prerouting"},
{DATATYPE_INT, "1", ENUM_PACKET_STAGE_SPACE_NAME, "input"},
{DATATYPE_INT, "2", ENUM_PACKET_STAGE_SPACE_NAME, "forward"},
{DATATYPE_INT, "3", ENUM_PACKET_STAGE_SPACE_NAME, "output"},
{DATATYPE_INT, "4", ENUM_PACKET_STAGE_SPACE_NAME, "postrouting"},
{DATATYPE_END, NULL, NULL, NULL},
};
struct stellar_module *lua_module_manager_on_init(struct stellar_module_manager *mod_mgr)
{
struct lua_module_manager *new_lua_mod_mgr = lua_module_manager_new(mod_mgr);
if (lua_module_manager_state_create(
new_lua_mod_mgr,
lua_bind_function,
sizeof(lua_bind_function) / sizeof(struct lua_state_cbind_func_spec),
lua_bind_data,
sizeof(lua_bind_data) / sizeof(struct lua_state_cbind_data_spec)))
goto err;
if (lua_module_manager_load_config(new_lua_mod_mgr, LUA_MODULE_MANAGE_CONF_PATH))
goto err;
if (lua_module_manager_call_init(new_lua_mod_mgr))
goto err;
if (lua_module_manager_duplicate_state(new_lua_mod_mgr))
goto err;
struct stellar_module *module = stellar_module_new(LUA_MODULE_MANAGE_MODULE_NAME, (void *)new_lua_mod_mgr);
return module;
err:
lua_module_manager_free(new_lua_mod_mgr);
return NULL;
}
void lua_module_manager_on_exit(struct stellar_module_manager *mod_mgr __unused, struct stellar_module *mod)
{
if (mod)
{
struct lua_module_manager *lua_mod_mgr = (struct lua_module_manager *)stellar_module_get_ctx(mod);
lua_module_manager_free(lua_mod_mgr);
stellar_module_free(mod);
}
return;
}
|