]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
modbus: tx de_state
authorVictor Julien <victor@inliniac.net>
Mon, 9 Mar 2015 14:58:07 +0000 (15:58 +0100)
committerVictor Julien <victor@inliniac.net>
Mon, 16 Mar 2015 14:36:34 +0000 (15:36 +0100)
src/app-layer-modbus.c
src/app-layer-modbus.h

index d2518b5313d32a32501eacf4f0dcbaab6bd342f5..873423184ae64e971dfcac37a694fcc55112a30a 100644 (file)
@@ -332,6 +332,9 @@ static void ModbusTxFree(ModbusTransaction *tx) {
 
     AppLayerDecoderEventsFreeEvents(&tx->decoder_events);
 
+    if (tx->de_state != NULL)
+        DetectEngineStateFree(tx->de_state);
+
     SCFree(tx);
     SCReturn;
 }
@@ -1332,6 +1335,19 @@ static uint16_t ModbusProbingParser(uint8_t     *input,
     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
  */
@@ -1392,6 +1408,8 @@ void RegisterModbusParsers(void)
 
         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);
index 99e07e885f84c9f472873033d40735611dc5f199..25ac519afd39a6e69ee32aa63e0ff2019ad701c3 100644 (file)
@@ -35,7 +35,7 @@
 #define __APP_LAYER_MODBUS_H__
 
 #include "decode.h"
-
+#include "detect-engine-state.h"
 #include "queue.h"
 
 /* Modbus Application Data Unit (ADU)
@@ -108,6 +108,7 @@ typedef struct ModbusTransaction_ {
     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;