74 while (lua_gettop(s) > 0) {
86 const char lua_ext_key_tv[] =
"suricata:lua:tv:ptr";
88 const char lua_ext_key_tx[] =
"suricata:lua:tx:ptr";
90 const char lua_ext_key_tx_id[] =
"suricata:lua:tx_id";
92 const char lua_ext_key_p[] =
"suricata:lua:pkt:ptr";
94 const char lua_ext_key_flow[] =
"suricata:lua:flow:ptr";
96 const char lua_ext_key_flow_lock_hint[] =
"suricata:lua:flow:lock_hint";
98 const char lua_ext_key_direction[] =
"suricata:lua:direction";
101 const char lua_ext_key_pa[] =
"suricata:lua:pkt:alert:ptr";
103 const char lua_ext_key_s[] =
"suricata:lua:signature:ptr";
105 const char lua_ext_key_file[] =
"suricata:lua:file:ptr";
107 const char lua_ext_key_det_ctx[] =
"suricata:lua:det_ctx:ptr";
109 const char lua_ext_key_streaming_buffer[] =
"suricata:lua:streaming_buffer:ptr";
114 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_tv);
115 lua_gettable(luastate, LUA_REGISTRYINDEX);
116 void *
tv = lua_touserdata(luastate, -1);
122 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_tv);
123 lua_pushlightuserdata(luastate, (
void *)
tv);
124 lua_settable(luastate, LUA_REGISTRYINDEX);
130 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_p);
131 lua_gettable(luastate, LUA_REGISTRYINDEX);
132 void *p = lua_touserdata(luastate, -1);
138 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_p);
139 lua_pushlightuserdata(luastate, (
void *)p);
140 lua_settable(luastate, LUA_REGISTRYINDEX);
146 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_tx);
147 lua_gettable(luastate, LUA_REGISTRYINDEX);
148 void *tx = lua_touserdata(luastate, -1);
153 uint64_t LuaStateGetTxId(
lua_State *luastate)
155 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_tx_id);
156 lua_gettable(luastate, LUA_REGISTRYINDEX);
157 uint64_t tx_id = lua_tointeger(luastate, -1);
160 void LuaStateSetTX(
lua_State *luastate,
void *txptr,
const uint64_t tx_id)
162 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_tx);
163 lua_pushlightuserdata(luastate, (
void *)txptr);
164 lua_settable(luastate, LUA_REGISTRYINDEX);
166 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_tx_id);
167 lua_pushinteger(luastate, tx_id);
168 lua_settable(luastate, LUA_REGISTRYINDEX);
175 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_flow);
176 lua_gettable(luastate, LUA_REGISTRYINDEX);
177 f = lua_touserdata(luastate, -1);
180 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_flow_lock_hint);
181 lua_gettable(luastate, LUA_REGISTRYINDEX);
189 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_flow);
190 lua_pushlightuserdata(luastate, (
void *)f);
191 lua_settable(luastate, LUA_REGISTRYINDEX);
194 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_flow_lock_hint);
196 lua_pushboolean(luastate, 0);
197 lua_settable(luastate, LUA_REGISTRYINDEX);
203 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_pa);
204 lua_gettable(luastate, LUA_REGISTRYINDEX);
205 void *pa = lua_touserdata(luastate, -1);
211 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_pa);
212 lua_pushlightuserdata(luastate, (
void *)pa);
213 lua_settable(luastate, LUA_REGISTRYINDEX);
219 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_s);
220 lua_gettable(luastate, LUA_REGISTRYINDEX);
221 void *s = lua_touserdata(luastate, -1);
227 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_s);
228 lua_pushlightuserdata(luastate, (
void *)s);
229 lua_settable(luastate, LUA_REGISTRYINDEX);
235 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_file);
236 lua_gettable(luastate, LUA_REGISTRYINDEX);
237 void *file = lua_touserdata(luastate, -1);
243 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_file);
244 lua_pushlightuserdata(luastate, (
void *)file);
245 lua_settable(luastate, LUA_REGISTRYINDEX);
251 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_det_ctx);
252 lua_gettable(luastate, LUA_REGISTRYINDEX);
253 void *det_ctx = lua_touserdata(luastate, -1);
259 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_det_ctx);
260 lua_pushlightuserdata(luastate, (
void *)det_ctx);
261 lua_settable(luastate, LUA_REGISTRYINDEX);
264 LuaStreamingBuffer *LuaStateGetStreamingBuffer(
lua_State *luastate)
266 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_streaming_buffer);
267 lua_gettable(luastate, LUA_REGISTRYINDEX);
268 void *b = lua_touserdata(luastate, -1);
269 return (LuaStreamingBuffer *)b;
272 void LuaStateSetStreamingBuffer(
lua_State *luastate, LuaStreamingBuffer *b)
274 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_streaming_buffer);
275 lua_pushlightuserdata(luastate, (
void *)b);
276 lua_settable(luastate, LUA_REGISTRYINDEX);
280 int LuaStateGetDirection(
lua_State *luastate)
282 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_direction);
283 lua_gettable(luastate, LUA_REGISTRYINDEX);
284 int dir = lua_toboolean(luastate, -1);
288 void LuaStateSetDirection(
lua_State *luastate,
int direction)
290 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_direction);
291 lua_pushboolean(luastate, direction);
292 lua_settable(luastate, LUA_REGISTRYINDEX);
297 int size = lua_gettop(state);
300 for (i = 1; i <= size; i++) {
301 int type = lua_type(state, i);
302 printf(
"Stack size=%d, level=%d, type=%d, ", size, i,
type);
306 printf(
"function %s", lua_tostring(state, i) ?
"true" :
"false");
309 printf(
"bool %s", lua_toboolean(state, i) ?
"true" :
"false");
312 printf(
"number %g", lua_tonumber(state, i));
315 printf(
"string `%s'", lua_tostring(state, i));
318 printf(
"table `%s'", lua_tostring(state, i));
321 printf(
"other %s", lua_typename(state,
type));
329 int LuaPushStringBuffer(
lua_State *luastate,
const uint8_t *input,
size_t input_len)
331 if (input_len % 4 != 0) {
336 size_t buflen = input_len + 1 + ((input_len + 1) % 4);
338 memset(buf, 0x00, buflen);
339 memcpy(buf, input, input_len);
340 buf[input_len] =
'\0';
343 lua_pushlstring(luastate, (
char *)buf, input_len);
345 lua_pushlstring(luastate, (
char *)input, input_len);
350 int LuaPushInteger(
lua_State *luastate, lua_Integer n)
352 lua_pushinteger(luastate, n);