diff options
Diffstat (limited to 'src/lua_binding_cfunc.c')
| -rw-r--r-- | src/lua_binding_cfunc.c | 77 |
1 files changed, 40 insertions, 37 deletions
diff --git a/src/lua_binding_cfunc.c b/src/lua_binding_cfunc.c index 7ef4d33..26271cf 100644 --- a/src/lua_binding_cfunc.c +++ b/src/lua_binding_cfunc.c @@ -14,14 +14,12 @@ void lua_cfunc_mq_msg_free_cb_func(void *msg, void *msg_free_arg) struct lua_fn_arg_pair *free_arg = (struct lua_fn_arg_pair *)msg_free_arg; struct lua_state *state = lua_fn_arg_pair_get_thread_state(free_arg); - struct lua_cdata param[2]; - if (lua_context_check_if_context(msg)) - lua_cdata_data_set(¶m[0], DATATYPE_CONTEXT, msg, 0); - else - lua_cdata_data_set(¶m[0], DATATYPE_POINTER, msg, 0); - lua_cdata_data_set(¶m[1], DATATYPE_TABLE, NULL, lua_fn_arg_pair_get_arg_ref_id(free_arg)); - - lua_state_execute_chunk(state, lua_fn_arg_pair_get_fn_ref_id(free_arg), param, 2, NULL, 0, NULL, 0); + struct lua_cdata *param_array = lua_cdata_array_new(2); + lua_cdata_data_set(lua_cdata_array_get_index(param_array, 0), DATATYPE_CONTEXT, msg, 0); + lua_cdata_data_set(lua_cdata_array_get_index(param_array, 1), DATATYPE_TABLE, NULL, lua_fn_arg_pair_get_arg_ref_id(free_arg)); + lua_state_execute_chunk(state, lua_fn_arg_pair_get_fn_ref_id(free_arg), param_array, 2, NULL, 0, NULL, 0); + lua_cdata_array_free(param_array, 2); + lua_context_free((struct lua_context *)msg); return; } @@ -32,15 +30,16 @@ void lua_cfunc_mq_on_msg_cb_func(int topic_id, void *msg, void *on_msg_arg) struct lua_fn_arg_pair *msg_arg = (struct lua_fn_arg_pair *)on_msg_arg; struct lua_state *state = lua_fn_arg_pair_get_thread_state(msg_arg); - struct lua_cdata param[3]; - lua_cdata_data_set(¶m[0], DATATYPE_INT, NULL, topic_id); + struct lua_cdata *param_array = lua_cdata_array_new(3); + lua_cdata_data_set(lua_cdata_array_get_index(param_array, 0), DATATYPE_INT, NULL, topic_id); if (lua_context_check_if_context(msg)) - lua_cdata_data_set(¶m[1], DATATYPE_CONTEXT, msg, 0); + lua_cdata_data_set(lua_cdata_array_get_index(param_array, 1), DATATYPE_CONTEXT, msg, 0); else - lua_cdata_data_set(¶m[1], DATATYPE_POINTER, msg, 0); - lua_cdata_data_set(¶m[2], DATATYPE_TABLE, NULL, lua_fn_arg_pair_get_arg_ref_id(msg_arg)); + lua_cdata_data_set(lua_cdata_array_get_index(param_array, 1), DATATYPE_POINTER, msg, 0); + lua_cdata_data_set(lua_cdata_array_get_index(param_array, 2), DATATYPE_TABLE, NULL, lua_fn_arg_pair_get_arg_ref_id(msg_arg)); - lua_state_execute_chunk(state, lua_fn_arg_pair_get_fn_ref_id(msg_arg), param, 3, NULL, 0, NULL, 0); + lua_state_execute_chunk(state, lua_fn_arg_pair_get_fn_ref_id(msg_arg), param_array, 3, NULL, 0, NULL, 0); + lua_cdata_array_free(param_array, 3); return; } @@ -51,17 +50,18 @@ void lua_cfunc_mq_on_msg_dispatch_cb_func(int topic_id, void *msg, on_msg_cb_fun struct lua_fn_arg_pair *dis_arg = (struct lua_fn_arg_pair *)dispatch_arg; struct lua_state *state = lua_fn_arg_pair_get_thread_state(dis_arg); - struct lua_cdata param[4]; + struct lua_cdata *param_array = lua_cdata_array_new(4); struct lua_context *new_context = lua_context_new(state); - lua_cdata_data_set(¶m[0], DATATYPE_INT, NULL, topic_id); - lua_cdata_data_set(¶m[1], DATATYPE_CONTEXT, msg, 0); - lua_cdata_data_set(¶m[2], DATATYPE_TABLE, 0, lua_fn_arg_pair_get_arg_ref_id(dis_arg)); - lua_cdata_data_set(¶m[3], DATATYPE_CONTEXT, (void *)new_context, 0); + lua_cdata_data_set(lua_cdata_array_get_index(param_array, 0), DATATYPE_INT, NULL, topic_id); + lua_cdata_data_set(lua_cdata_array_get_index(param_array, 1), DATATYPE_CONTEXT, msg, 0); + lua_cdata_data_set(lua_cdata_array_get_index(param_array, 2), DATATYPE_TABLE, 0, lua_fn_arg_pair_get_arg_ref_id(dis_arg)); + lua_cdata_data_set(lua_cdata_array_get_index(param_array, 3), DATATYPE_CONTEXT, (void *)new_context, 0); - lua_state_execute_chunk(state, lua_fn_arg_pair_get_fn_ref_id(dis_arg), param, 4, NULL, 0, NULL, 0); + lua_state_execute_chunk(state, lua_fn_arg_pair_get_fn_ref_id(dis_arg), param_array, 4, NULL, 0, NULL, 0); + lua_cdata_array_free(param_array, 4); ((lua_mq_on_msg_cb_func *)(void *)on_msg_cb)(topic_id, msg, on_msg_cb_arg, (void *)new_context); - lua_context_free(new_context); + return; } @@ -72,12 +72,13 @@ void lua_cfunc_packet_on_stage_callback(enum packet_stage stage, struct packet * struct lua_fn_arg_pair *on_stage_callback = (struct lua_fn_arg_pair *)args; struct lua_state *state = lua_fn_arg_pair_get_thread_state(on_stage_callback); - struct lua_cdata param[3]; - lua_cdata_data_set(¶m[0], DATATYPE_INT, NULL, stage); - lua_cdata_data_set(¶m[1], DATATYPE_POINTER, pkt, 0); - lua_cdata_data_set(¶m[2], DATATYPE_TABLE, NULL, lua_fn_arg_pair_get_arg_ref_id(on_stage_callback)); + struct lua_cdata *param_array = lua_cdata_array_new(3); + lua_cdata_data_set(lua_cdata_array_get_index(param_array, 0), DATATYPE_INT, NULL, stage); + lua_cdata_data_set(lua_cdata_array_get_index(param_array, 1), DATATYPE_POINTER, pkt, 0); + lua_cdata_data_set(lua_cdata_array_get_index(param_array, 2), DATATYPE_TABLE, NULL, lua_fn_arg_pair_get_arg_ref_id(on_stage_callback)); - lua_state_execute_chunk(state, lua_fn_arg_pair_get_fn_ref_id(on_stage_callback), param, 3, NULL, 0, NULL, 0); + lua_state_execute_chunk(state, lua_fn_arg_pair_get_fn_ref_id(on_stage_callback), param_array, 3, NULL, 0, NULL, 0); + lua_cdata_array_free(param_array, 3); return; } @@ -88,12 +89,13 @@ void lua_cfunc_session_callback(struct session *sess, struct packet *pkt, void * struct lua_fn_arg_pair *sess_callback = (struct lua_fn_arg_pair *)args; struct lua_state *state = lua_fn_arg_pair_get_thread_state(sess_callback); - struct lua_cdata param[3]; - lua_cdata_data_set(¶m[0], DATATYPE_POINTER, sess, 0); - lua_cdata_data_set(¶m[1], DATATYPE_POINTER, pkt, 0); - lua_cdata_data_set(¶m[2], DATATYPE_TABLE, NULL, lua_fn_arg_pair_get_arg_ref_id(sess_callback)); + struct lua_cdata *param_array = lua_cdata_array_new(3); + lua_cdata_data_set(lua_cdata_array_get_index(param_array, 0), DATATYPE_POINTER, sess, 0); + lua_cdata_data_set(lua_cdata_array_get_index(param_array, 1), DATATYPE_POINTER, pkt, 0); + lua_cdata_data_set(lua_cdata_array_get_index(param_array, 2), DATATYPE_TABLE, NULL, lua_fn_arg_pair_get_arg_ref_id(sess_callback)); - lua_state_execute_chunk(state, lua_fn_arg_pair_get_fn_ref_id(sess_callback), param, 3, NULL, 0, NULL, 0); + lua_state_execute_chunk(state, lua_fn_arg_pair_get_fn_ref_id(sess_callback), param_array, 3, NULL, 0, NULL, 0); + lua_cdata_array_free(param_array, 3); return; } @@ -104,12 +106,13 @@ void lua_cfunc_tcp_stream_callback(struct session *sess, const char *tcp_payload struct lua_fn_arg_pair *tcp_stream_callback = (struct lua_fn_arg_pair *)args; struct lua_state *state = lua_fn_arg_pair_get_thread_state(tcp_stream_callback); - struct lua_cdata param[4]; - lua_cdata_data_set(¶m[0], DATATYPE_POINTER, sess, 0); - lua_cdata_data_set(¶m[1], DATATYPE_BUFF, (void *)tcp_payload, (int)tcp_payload_len); - lua_cdata_data_set(¶m[2], DATATYPE_INT, NULL, (int)tcp_payload_len); - lua_cdata_data_set(¶m[3], DATATYPE_TABLE, NULL, lua_fn_arg_pair_get_arg_ref_id(tcp_stream_callback)); + struct lua_cdata *param_array = lua_cdata_array_new(4); + lua_cdata_data_set(lua_cdata_array_get_index(param_array, 0), DATATYPE_POINTER, sess, 0); + lua_cdata_data_set(lua_cdata_array_get_index(param_array, 1), DATATYPE_BUFF, (void *)tcp_payload, (int)tcp_payload_len); + lua_cdata_data_set(lua_cdata_array_get_index(param_array, 2), DATATYPE_INT, NULL, (int)tcp_payload_len); + lua_cdata_data_set(lua_cdata_array_get_index(param_array, 3), DATATYPE_TABLE, NULL, lua_fn_arg_pair_get_arg_ref_id(tcp_stream_callback)); - lua_state_execute_chunk(state, lua_fn_arg_pair_get_fn_ref_id(tcp_stream_callback), param, 4, NULL, 0, NULL, 0); + lua_state_execute_chunk(state, lua_fn_arg_pair_get_fn_ref_id(tcp_stream_callback), param_array, 4, NULL, 0, NULL, 0); + lua_cdata_array_free(param_array, 4); return; } |
