}
void LuaExtensionsMatchSetup(lua_State *lua_state, DetectLuaData *ld, DetectEngineThreadCtx *det_ctx,
- Flow *f, int flow_locked, Packet *p)
+ Flow *f, int flow_locked, Packet *p, uint8_t flags)
{
SCLogDebug("det_ctx %p, f %p", det_ctx, f);
if (p != NULL)
LuaStateSetPacket(lua_state, p);
+
+ LuaStateSetDirection(lua_state, (flags & STREAM_TOSERVER));
}
/**
void LuaExtensionsMatchSetup(lua_State *lua_state,
DetectLuaData *, DetectEngineThreadCtx *det_ctx,
- Flow *f, int flow_locked, Packet *p);
+ Flow *f, int flow_locked, Packet *p, uint8_t flags);
#endif /* HAVE_LUA */
#endif
/* setup extension data for use in lua c functions */
LuaExtensionsMatchSetup(tluajit->luastate, luajit, det_ctx,
- f, flow_lock, /* no packet in the ctx */NULL);
+ f, flow_lock, /* no packet in the ctx */NULL, 0);
/* prepare data to pass to script */
lua_getglobal(tluajit->luastate, "match");
SCReturnInt(0);
/* setup extension data for use in lua c functions */
+ uint8_t flags = 0;
+ if (p->flowflags & FLOW_PKT_TOSERVER)
+ flags = STREAM_TOSERVER;
+ else if (p->flowflags & FLOW_PKT_TOCLIENT)
+ flags = STREAM_TOCLIENT;
+
LuaExtensionsMatchSetup(tluajit->luastate, luajit, det_ctx,
- p->flow, /* flow not locked */LUA_FLOW_NOT_LOCKED_BY_PARENT, p);
+ p->flow, /* flow not locked */LUA_FLOW_NOT_LOCKED_BY_PARENT, p, flags);
if ((tluajit->flags & DATATYPE_PAYLOAD) && p->payload_len == 0)
SCReturnInt(0);
/* setup extension data for use in lua c functions */
LuaExtensionsMatchSetup(tluajit->luastate, luajit, det_ctx,
- f, /* flow is locked */LUA_FLOW_LOCKED_BY_PARENT, NULL);
+ f, /* flow is locked */LUA_FLOW_LOCKED_BY_PARENT,
+ NULL, flags);
if (tluajit->alproto != ALPROTO_UNKNOWN) {
int alproto = f->alproto;