modbus: tx de_state

pull/1375/head
Victor Julien 11 years ago
parent e984a57203
commit 840efe17fe

@ -332,6 +332,9 @@ static void ModbusTxFree(ModbusTransaction *tx) {
AppLayerDecoderEventsFreeEvents(&tx->decoder_events); AppLayerDecoderEventsFreeEvents(&tx->decoder_events);
if (tx->de_state != NULL)
DetectEngineStateFree(tx->de_state);
SCFree(tx); SCFree(tx);
SCReturn; SCReturn;
} }
@ -1332,6 +1335,19 @@ static uint16_t ModbusProbingParser(uint8_t *input,
return ALPROTO_MODBUS; 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 * \brief Function to register the Modbus protocol parsers and other functions
*/ */
@ -1392,6 +1408,8 @@ void RegisterModbusParsers(void)
AppLayerParserRegisterGetEventsFunc(IPPROTO_TCP, ALPROTO_MODBUS, ModbusGetEvents); AppLayerParserRegisterGetEventsFunc(IPPROTO_TCP, ALPROTO_MODBUS, ModbusGetEvents);
AppLayerParserRegisterHasEventsFunc(IPPROTO_TCP, ALPROTO_MODBUS, ModbusHasEvents); AppLayerParserRegisterHasEventsFunc(IPPROTO_TCP, ALPROTO_MODBUS, ModbusHasEvents);
AppLayerParserRegisterDetectStateFuncs(IPPROTO_TCP, ALPROTO_MODBUS,
ModbusGetTxDetectState, ModbusSetTxDetectState);
AppLayerParserRegisterGetTx(IPPROTO_TCP, ALPROTO_MODBUS, ModbusGetTx); AppLayerParserRegisterGetTx(IPPROTO_TCP, ALPROTO_MODBUS, ModbusGetTx);
AppLayerParserRegisterGetTxCnt(IPPROTO_TCP, ALPROTO_MODBUS, ModbusGetTxCnt); AppLayerParserRegisterGetTxCnt(IPPROTO_TCP, ALPROTO_MODBUS, ModbusGetTxCnt);

@ -35,7 +35,7 @@
#define __APP_LAYER_MODBUS_H__ #define __APP_LAYER_MODBUS_H__
#include "decode.h" #include "decode.h"
#include "detect-engine-state.h"
#include "queue.h" #include "queue.h"
/* Modbus Application Data Unit (ADU) /* 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. */ uint16_t *data; /**< to store data to write, bit is converted in 16bits. */
AppLayerDecoderEvents *decoder_events; /**< per tx events */ AppLayerDecoderEvents *decoder_events; /**< per tx events */
DetectEngineState *de_state;
TAILQ_ENTRY(ModbusTransaction_) next; TAILQ_ENTRY(ModbusTransaction_) next;
} ModbusTransaction; } ModbusTransaction;

Loading…
Cancel
Save