From: Victor Julien Date: Thu, 20 Feb 2014 14:47:50 +0000 (+0100) Subject: output-lua: initial packet support X-Git-Tag: suricata-2.1beta2~156 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=53d7f800bf45852a3b914df2fd917a4ecd780182;p=thirdparty%2Fsuricata.git output-lua: initial packet support Add key for storing packet pointer in the lua stack and a utility function to retrieve it from lua callbacks. --- diff --git a/src/output-lua-common.c b/src/output-lua-common.c index ae4384ed9f..c62f19c83a 100644 --- a/src/output-lua-common.c +++ b/src/output-lua-common.c @@ -89,6 +89,15 @@ void LuaPrintStack(lua_State *state) { } extern const char lualog_ext_key_tx; +extern const char lualog_ext_key_p; + +Packet *LuaStateGetPacket(lua_State *luastate) +{ + lua_pushlightuserdata(luastate, (void *)&lualog_ext_key_p); + lua_gettable(luastate, LUA_REGISTRYINDEX); + void *p = lua_touserdata(luastate, -1); + return (Packet *)p; +} void *LuaStateGetTX(lua_State *luastate) { diff --git a/src/output-lua-common.h b/src/output-lua-common.h index eeefbaa170..d5f46f6469 100644 --- a/src/output-lua-common.h +++ b/src/output-lua-common.h @@ -28,6 +28,7 @@ void LuaPrintStack(lua_State *state); +Packet *LuaStateGetPacket(lua_State *luastate); void *LuaStateGetTX(lua_State *luastate); int LuaCallbackError(lua_State *luastate, const char *msg); int LuaReturnStringBuffer(lua_State *luastate, const uint8_t *input, size_t input_len); diff --git a/src/output-lua.c b/src/output-lua.c index 8ed2a1062d..762ef66683 100644 --- a/src/output-lua.c +++ b/src/output-lua.c @@ -69,6 +69,8 @@ typedef struct LogLuaThreadCtx_ { } LogLuaThreadCtx; const char lualog_ext_key_tx[] = "suricata:lualog:tx:ptr"; +/* key for p (packet) pointer */ +const char lualog_ext_key_p[] = "suricata:lualog:pkt:ptr"; static int LuaTxLogger(ThreadVars *tv, void *thread_data, const Packet *p, Flow *f, void *alstate, void *txptr, uint64_t tx_id) {