30 static const char suricata_flowvar_mt[] =
"suricata:flowvar:mt";
36 lua_gettable(luastate, LUA_REGISTRYINDEX);
37 ld = lua_touserdata(luastate, -1);
50 static int LuaFlowvarRegister(
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 flowvars registered");
64 luaL_getmetatable(L, suricata_flowvar_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_flowvar_mt);
80 lua_setmetatable(L, -2);
87 uint32_t *flowvar_id = luaL_checkudata(L, 1, suricata_flowvar_mt);
105 const char *value = luaL_checklstring(L, 2, &slen);
106 lua_Integer req = luaL_optinteger(L, 3, (lua_Integer)slen);
107 if (req < 0 || ((
size_t)req > slen) || (
size_t)req > UINT16_MAX) {
108 return luaL_error(L,
"length out of range");
110 const size_t len = (size_t)req;
111 uint32_t *flowvar_id = luaL_checkudata(L, 1, suricata_flowvar_mt);
114 return luaL_error(L,
"no flow");
119 return luaL_error(L,
"alloc failure");
121 memcpy(buf, value,
len);
128 static const luaL_Reg flowvarlib[] = {
130 {
"register", LuaFlowvarRegister, },
131 {
"get", LuaFlowvarGet },
136 static const luaL_Reg flowvarmt[] = {
138 {
"value", LuaFlowvarValue, },
139 {
"set", LuaFlowvarSet, },
146 luaL_newmetatable(L, suricata_flowvar_mt);
147 lua_pushvalue(L, -1);
148 lua_setfield(L, -2,
"__index");
149 luaL_setfuncs(L, flowvarmt, 0);
151 luaL_newlib(L, flowvarlib);