59 lua_State *LuaGetState(
void)
70 void LuaReturnState(lua_State *s)
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_p[] =
"suricata:lua:pkt:ptr";
92 const char lua_ext_key_flow[] =
"suricata:lua:flow:ptr";
94 const char lua_ext_key_flow_lock_hint[] =
"suricata:lua:flow:lock_hint";
96 const char lua_ext_key_direction[] =
"suricata:lua:direction";
99 const char lua_ext_key_pa[] =
"suricata:lua:pkt:alert:ptr";
101 const char lua_ext_key_file[] =
"suricata:lua:file:ptr";
103 const char lua_ext_key_streaming_buffer[] =
"suricata:lua:streaming_buffer:ptr";
106 ThreadVars *LuaStateGetThreadVars(lua_State *luastate)
108 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_tv);
109 lua_gettable(luastate, LUA_REGISTRYINDEX);
110 void *tv = lua_touserdata(luastate, -1);
114 void LuaStateSetThreadVars(lua_State *luastate,
ThreadVars *tv)
116 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_tv);
117 lua_pushlightuserdata(luastate, (
void *)tv);
118 lua_settable(luastate, LUA_REGISTRYINDEX);
122 Packet *LuaStateGetPacket(lua_State *luastate)
124 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_p);
125 lua_gettable(luastate, LUA_REGISTRYINDEX);
126 void *p = lua_touserdata(luastate, -1);
130 void LuaStateSetPacket(lua_State *luastate,
Packet *p)
132 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_p);
133 lua_pushlightuserdata(luastate, (
void *)p);
134 lua_settable(luastate, LUA_REGISTRYINDEX);
138 void *LuaStateGetTX(lua_State *luastate)
140 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_tx);
141 lua_gettable(luastate, LUA_REGISTRYINDEX);
142 void *tx = lua_touserdata(luastate, -1);
146 void LuaStateSetTX(lua_State *luastate,
void *txptr)
148 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_tx);
149 lua_pushlightuserdata(luastate, (
void *)txptr);
150 lua_settable(luastate, LUA_REGISTRYINDEX);
153 Flow *LuaStateGetFlow(lua_State *luastate)
157 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_flow);
158 lua_gettable(luastate, LUA_REGISTRYINDEX);
159 f = lua_touserdata(luastate, -1);
162 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_flow_lock_hint);
163 lua_gettable(luastate, LUA_REGISTRYINDEX);
168 void LuaStateSetFlow(lua_State *luastate,
Flow *f)
171 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_flow);
172 lua_pushlightuserdata(luastate, (
void *)f);
173 lua_settable(luastate, LUA_REGISTRYINDEX);
176 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_flow_lock_hint);
178 lua_pushboolean(luastate, 0);
179 lua_settable(luastate, LUA_REGISTRYINDEX);
183 PacketAlert *LuaStateGetPacketAlert(lua_State *luastate)
185 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_pa);
186 lua_gettable(luastate, LUA_REGISTRYINDEX);
187 void *pa = lua_touserdata(luastate, -1);
191 void LuaStateSetPacketAlert(lua_State *luastate,
PacketAlert *pa)
193 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_pa);
194 lua_pushlightuserdata(luastate, (
void *)pa);
195 lua_settable(luastate, LUA_REGISTRYINDEX);
199 File *LuaStateGetFile(lua_State *luastate)
201 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_file);
202 lua_gettable(luastate, LUA_REGISTRYINDEX);
203 void *file = lua_touserdata(luastate, -1);
207 void LuaStateSetFile(lua_State *luastate,
File *file)
209 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_file);
210 lua_pushlightuserdata(luastate, (
void *)file);
211 lua_settable(luastate, LUA_REGISTRYINDEX);
214 LuaStreamingBuffer *LuaStateGetStreamingBuffer(lua_State *luastate)
216 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_streaming_buffer);
217 lua_gettable(luastate, LUA_REGISTRYINDEX);
218 void *b = lua_touserdata(luastate, -1);
219 return (LuaStreamingBuffer *)b;
222 void LuaStateSetStreamingBuffer(lua_State *luastate, LuaStreamingBuffer *b)
224 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_streaming_buffer);
225 lua_pushlightuserdata(luastate, (
void *)b);
226 lua_settable(luastate, LUA_REGISTRYINDEX);
230 int LuaStateGetDirection(lua_State *luastate)
232 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_direction);
233 lua_gettable(luastate, LUA_REGISTRYINDEX);
234 int dir = lua_toboolean(luastate, -1);
238 void LuaStateSetDirection(lua_State *luastate,
int direction)
240 lua_pushlightuserdata(luastate, (
void *)&lua_ext_key_direction);
241 lua_pushboolean(luastate, direction);
242 lua_settable(luastate, LUA_REGISTRYINDEX);
246 void LuaPrintStack(lua_State *state) {
247 int size = lua_gettop(state);
250 for (i = 1; i <= size; i++) {
251 int type = lua_type(state, i);
252 printf(
"Stack size=%d, level=%d, type=%d, ", size, i, type);
256 printf(
"function %s", lua_tostring(state, i) ?
"true" :
"false");
259 printf(
"bool %s", lua_toboolean(state, i) ?
"true" :
"false");
262 printf(
"number %g", lua_tonumber(state, i));
265 printf(
"string `%s'", lua_tostring(state, i));
268 printf(
"table `%s'", lua_tostring(state, i));
271 printf(
"other %s", lua_typename(state, type));
279 int LuaPushStringBuffer(lua_State *luastate,
const uint8_t *input,
size_t input_len)
281 if (input_len % 4 != 0) {
286 size_t buflen = input_len + 1 + ((input_len + 1) % 4);
288 memset(buf, 0x00, buflen);
289 memcpy(buf, input, input_len);
290 buf[input_len] =
'\0';
293 lua_pushlstring(luastate, (
char *)buf, input_len);
295 lua_pushlstring(luastate, (
char *)input, input_len);
300 int LuaPushInteger(lua_State *luastate, lua_Integer n)
302 lua_pushinteger(luastate, n);
Per thread variable structure.