AppLayerDecoderEventsFreeEvents(&tx->decoder_events);
+ if (tx->de_state != NULL)
+ DetectEngineStateFree(tx->de_state);
+
SCFree(tx);
SCReturn;
}
return ALPROTO_MODBUS;
}
+DetectEngineState *ModbusGetTxDetectState(void *vtx)
+{
+ ModbusTransaction *tx = (ModbusTransaction *)vtx;
+ return tx->de_state;
+}
+
+int ModbusSetTxDetectState(void *vtx, DetectEngineState *s)
+{
+ ModbusTransaction *tx = (ModbusTransaction *)vtx;
+ tx->de_state = s;
+ return 0;
+}
+
/**
* \brief Function to register the Modbus protocol parsers and other functions
*/
AppLayerParserRegisterGetEventsFunc(IPPROTO_TCP, ALPROTO_MODBUS, ModbusGetEvents);
AppLayerParserRegisterHasEventsFunc(IPPROTO_TCP, ALPROTO_MODBUS, ModbusHasEvents);
+ AppLayerParserRegisterDetectStateFuncs(IPPROTO_TCP, ALPROTO_MODBUS,
+ ModbusGetTxDetectState, ModbusSetTxDetectState);
AppLayerParserRegisterGetTx(IPPROTO_TCP, ALPROTO_MODBUS, ModbusGetTx);
AppLayerParserRegisterGetTxCnt(IPPROTO_TCP, ALPROTO_MODBUS, ModbusGetTxCnt);
#define __APP_LAYER_MODBUS_H__
#include "decode.h"
-
+#include "detect-engine-state.h"
#include "queue.h"
/* Modbus Application Data Unit (ADU)
uint16_t *data; /**< to store data to write, bit is converted in 16bits. */
AppLayerDecoderEvents *decoder_events; /**< per tx events */
+ DetectEngineState *de_state;
TAILQ_ENTRY(ModbusTransaction_) next;
} ModbusTransaction;