]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
output-lua: give access to packet payload
authorVictor Julien <victor@inliniac.net>
Wed, 2 Apr 2014 22:09:57 +0000 (00:09 +0200)
committerVictor Julien <victor@inliniac.net>
Fri, 15 Aug 2014 11:58:26 +0000 (13:58 +0200)
Add SCPacketPayload()

Example:
    function log(args)
        p = SCPacketPayload()
        print(p)
    end

src/output-lua-common.c

index 42a584115dbd0dffa103289fde6f1dfff8cfe6ff..2f264386abdb8fee3a884742870eaafff720dcd6 100644 (file)
@@ -118,6 +118,33 @@ void LogLuaPushTableKeyValueArray(lua_State *luastate, const char *key, const ui
     lua_settable(luastate, -3);
 }
 
+/** \internal
+ *  \brief fill lua stack with payload
+ *  \param luastate the lua state
+ *  \param p packet
+ *  \retval cnt number of data items placed on the stack
+ *
+ *  Places: payload (string)
+ */
+static int LuaCallbackPacketPayloadPushToStackFromPacket(lua_State *luastate, const Packet *p)
+{
+    lua_pushlstring (luastate, (const char *)p->payload, p->payload_len);
+    return 1;
+}
+
+/** \internal
+ *  \brief Wrapper for getting payload into a lua script
+ *  \retval cnt number of items placed on the stack
+ */
+static int LuaCallbackPacketPayload(lua_State *luastate)
+{
+    const Packet *p = LuaStateGetPacket(luastate);
+    if (p == NULL)
+        return LuaCallbackError(luastate, "internal error: no packet");
+
+    return LuaCallbackPacketPayloadPushToStackFromPacket(luastate, p);
+}
+
 /** \internal
  *  \brief fill lua stack with header info
  *  \param luastate the lua state
@@ -619,6 +646,8 @@ static int LuaCallbackThreadInfo(lua_State *luastate)
 int LogLuaRegisterFunctions(lua_State *luastate)
 {
     /* registration of the callbacks */
+    lua_pushcfunction(luastate, LuaCallbackPacketPayload);
+    lua_setglobal(luastate, "SCPacketPayload");
     lua_pushcfunction(luastate, LuaCallbackPacketTimeString);
     lua_setglobal(luastate, "SCPacketTimeString");
     lua_pushcfunction(luastate, LuaCallbackTuple);