30 static const char suricata_flowint_mt[] =
"suricata:flowint:mt";
36 lua_gettable(luastate, LUA_REGISTRYINDEX);
37 ld = lua_touserdata(luastate, -1);
50 static int LuaFlowintRegister(
lua_State *L)
53 const char *
name = luaL_checkstring(L, 1);
54 uint32_t *flowvar_id = lua_newuserdata(L,
sizeof(*flowvar_id));
56 if (*flowvar_id == 0) {
57 return luaL_error(L,
"failed to register flowvar");
60 return luaL_error(L,
"too many flowints registered");
64 luaL_getmetatable(L, suricata_flowint_mt);
65 lua_setmetatable(L, -2);
72 const char *
name = luaL_checkstring(L, 1);
73 uint32_t *flowvar_id = lua_newuserdata(L,
sizeof(*flowvar_id));
75 if (*flowvar_id == 0) {
76 return luaL_error(L,
"flowvar does not exist");
79 luaL_getmetatable(L, suricata_flowint_mt);
80 lua_setmetatable(L, -2);
87 uint32_t *flowvar_id = luaL_checkudata(L, 1, suricata_flowint_mt);
103 const int value = (int)luaL_checkinteger(L, 2);
104 uint32_t *flowvar_id = luaL_checkudata(L, 1, suricata_flowint_mt);
107 return luaL_error(L,
"no flow");
117 uint32_t *flowvar_id = luaL_checkudata(L, 1, suricata_flowint_mt);
120 return luaL_error(L,
"no flow");
129 if (value < UINT32_MAX) {
135 lua_pushnumber(L, (lua_Number)value);
142 uint32_t *flowvar_id = luaL_checkudata(L, 1, suricata_flowint_mt);
145 return luaL_error(L,
"no flow");
160 lua_pushnumber(L, (lua_Number)value);
165 static const luaL_Reg flowvarlib[] = {
167 {
"register", LuaFlowintRegister, },
168 {
"get", LuaFlowintGet },
173 static const luaL_Reg flowvarmt[] = {
175 {
"value", LuaFlowintValue, },
176 {
"set", LuaFlowintSet, },
177 {
"incr", LuaFlowintIncr, },
178 {
"decr", LuaFlowintDecr, },
185 luaL_newmetatable(L, suricata_flowint_mt);
186 lua_pushvalue(L, -1);
187 lua_setfield(L, -2,
"__index");
188 luaL_setfuncs(L, flowvarmt, 0);
190 luaL_newlib(L, flowvarlib);