return tx->logged;
}
+static void ModbusSetTxDetectFlags(void *vtx, uint8_t dir, uint64_t flags)
+{
+ ModbusTransaction *tx = (ModbusTransaction *)vtx;
+ if (dir & STREAM_TOSERVER) {
+ tx->detect_flags_ts = flags;
+ } else {
+ tx->detect_flags_ts = flags;
+ }
+}
+
+static uint64_t ModbusGetTxDetectFlags(void *vtx, uint8_t dir)
+{
+ ModbusTransaction *tx = (ModbusTransaction *)vtx;
+ if (dir & STREAM_TOSERVER) {
+ return tx->detect_flags_ts;
+ } else {
+ return tx->detect_flags_tc;
+ }
+}
+
static uint64_t ModbusGetTxCnt(void *alstate)
{
return ((uint64_t) ((ModbusState *) alstate)->transaction_max);
AppLayerParserRegisterGetEventInfoById(IPPROTO_TCP, ALPROTO_MODBUS, ModbusStateGetEventInfoById);
AppLayerParserRegisterParserAcceptableDataDirection(IPPROTO_TCP, ALPROTO_MODBUS, STREAM_TOSERVER);
+ AppLayerParserRegisterDetectFlagsFuncs(IPPROTO_TCP, ALPROTO_MODBUS,
+ ModbusGetTxDetectFlags, ModbusSetTxDetectFlags);
AppLayerParserSetStreamDepth(IPPROTO_TCP, ALPROTO_MODBUS, stream_depth);
} else {
AppLayerDecoderEvents *decoder_events; /**< per tx events */
DetectEngineState *de_state;
+ uint64_t detect_flags_ts;
+ uint64_t detect_flags_tc;
TAILQ_ENTRY(ModbusTransaction_) next;
} ModbusTransaction;