75 while (lua_gettop(s) > 0) {
87 const char lua_ext_key_tv[] =
"suricata:lua:tv:ptr";
89 const char lua_ext_key_tx[] =
"suricata:lua:tx:ptr";
91 const char lua_ext_key_p[] =
"suricata:lua:pkt:ptr";
93 const char lua_ext_key_flow[] =
"suricata:lua:flow:ptr";
95 const char lua_ext_key_flow_lock_hint[] =
"suricata:lua:flow:lock_hint";
97 const char lua_ext_key_direction[] =
"suricata:lua:direction";
100 const char lua_ext_key_pa[] =
"suricata:lua:pkt:alert:ptr";
102 const char lua_ext_key_s[] =
"suricata:lua:signature:ptr";
104 const char lua_ext_key_file[] =
"suricata:lua:file:ptr";
106 const char lua_ext_key_det_ctx[] =
"suricata:lua:det_ctx:ptr";
108 const char lua_ext_key_streaming_buffer[] =
"suricata:lua:streaming_buffer:ptr";
113 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_tv);
114 lua_gettable(luastate, LUA_REGISTRYINDEX);
115 void *
tv = lua_touserdata(luastate, -1);
121 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_tv);
122 lua_pushlightuserdata(luastate, (
void *)
tv);
123 lua_settable(luastate, LUA_REGISTRYINDEX);
129 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_p);
130 lua_gettable(luastate, LUA_REGISTRYINDEX);
131 void *p = lua_touserdata(luastate, -1);
137 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_p);
138 lua_pushlightuserdata(luastate, (
void *)p);
139 lua_settable(luastate, LUA_REGISTRYINDEX);
145 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_tx);
146 lua_gettable(luastate, LUA_REGISTRYINDEX);
147 void *tx = lua_touserdata(luastate, -1);
151 void LuaStateSetTX(
lua_State *luastate,
void *txptr)
153 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_tx);
154 lua_pushlightuserdata(luastate, (
void *)txptr);
155 lua_settable(luastate, LUA_REGISTRYINDEX);
162 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_flow);
163 lua_gettable(luastate, LUA_REGISTRYINDEX);
164 f = lua_touserdata(luastate, -1);
167 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_flow_lock_hint);
168 lua_gettable(luastate, LUA_REGISTRYINDEX);
176 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_flow);
177 lua_pushlightuserdata(luastate, (
void *)f);
178 lua_settable(luastate, LUA_REGISTRYINDEX);
181 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_flow_lock_hint);
183 lua_pushboolean(luastate, 0);
184 lua_settable(luastate, LUA_REGISTRYINDEX);
190 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_pa);
191 lua_gettable(luastate, LUA_REGISTRYINDEX);
192 void *pa = lua_touserdata(luastate, -1);
198 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_pa);
199 lua_pushlightuserdata(luastate, (
void *)pa);
200 lua_settable(luastate, LUA_REGISTRYINDEX);
206 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_s);
207 lua_gettable(luastate, LUA_REGISTRYINDEX);
208 void *s = lua_touserdata(luastate, -1);
214 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_s);
215 lua_pushlightuserdata(luastate, (
void *)s);
216 lua_settable(luastate, LUA_REGISTRYINDEX);
222 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_file);
223 lua_gettable(luastate, LUA_REGISTRYINDEX);
224 void *file = lua_touserdata(luastate, -1);
230 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_file);
231 lua_pushlightuserdata(luastate, (
void *)file);
232 lua_settable(luastate, LUA_REGISTRYINDEX);
238 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_det_ctx);
239 lua_gettable(luastate, LUA_REGISTRYINDEX);
240 void *det_ctx = lua_touserdata(luastate, -1);
246 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_det_ctx);
247 lua_pushlightuserdata(luastate, (
void *)det_ctx);
248 lua_settable(luastate, LUA_REGISTRYINDEX);
251 LuaStreamingBuffer *LuaStateGetStreamingBuffer(
lua_State *luastate)
253 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_streaming_buffer);
254 lua_gettable(luastate, LUA_REGISTRYINDEX);
255 void *b = lua_touserdata(luastate, -1);
256 return (LuaStreamingBuffer *)b;
259 void LuaStateSetStreamingBuffer(
lua_State *luastate, LuaStreamingBuffer *b)
261 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_streaming_buffer);
262 lua_pushlightuserdata(luastate, (
void *)b);
263 lua_settable(luastate, LUA_REGISTRYINDEX);
267 int LuaStateGetDirection(
lua_State *luastate)
269 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_direction);
270 lua_gettable(luastate, LUA_REGISTRYINDEX);
271 int dir = lua_toboolean(luastate, -1);
275 void LuaStateSetDirection(
lua_State *luastate,
int direction)
277 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_direction);
278 lua_pushboolean(luastate, direction);
279 lua_settable(luastate, LUA_REGISTRYINDEX);
284 int size = lua_gettop(state);
287 for (i = 1; i <= size; i++) {
288 int type = lua_type(state, i);
289 printf(
"Stack size=%d, level=%d, type=%d, ", size, i,
type);
293 printf(
"function %s", lua_tostring(state, i) ?
"true" :
"false");
296 printf(
"bool %s", lua_toboolean(state, i) ?
"true" :
"false");
299 printf(
"number %g", lua_tonumber(state, i));
302 printf(
"string `%s'", lua_tostring(state, i));
305 printf(
"table `%s'", lua_tostring(state, i));
308 printf(
"other %s", lua_typename(state,
type));
316 int LuaPushStringBuffer(
lua_State *luastate,
const uint8_t *input,
size_t input_len)
318 if (input_len % 4 != 0) {
323 size_t buflen = input_len + 1 + ((input_len + 1) % 4);
325 memset(buf, 0x00, buflen);
326 memcpy(buf, input, input_len);
327 buf[input_len] =
'\0';
330 lua_pushlstring(luastate, (
char *)buf, input_len);
332 lua_pushlstring(luastate, (
char *)input, input_len);
337 int LuaPushInteger(
lua_State *luastate, lua_Integer n)
339 lua_pushinteger(luastate, n);