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

index 15d507d2616995525e9356db25e26e13dc259a64..90bc7d89fea96338f82951e16fccfe352836443a 100644 (file)
@@ -1128,6 +1128,8 @@ static void SMTPTransactionFree(SMTPTransaction *tx, SMTPState *state)
 
     if (tx->decoder_events != NULL) {
         AppLayerDecoderEventsFreeEvents(&tx->decoder_events);
+    if (tx->de_state != NULL)
+        DetectEngineStateFree(tx->de_state);
 #if 0
         if (tx->decoder_events->cnt <= smtp_state->events)
             smtp_state->events -= tx->decoder_events->cnt;
@@ -1332,6 +1334,19 @@ static AppLayerDecoderEvents *SMTPGetEvents(void *state, uint64_t tx_id)
     return NULL;
 }
 
+static DetectEngineState *SMTPGetTxDetectState(void *vtx)
+{
+    SMTPTransaction *tx = (SMTPTransaction *)vtx;
+    return tx->de_state;
+}
+
+static int SMTPSetTxDetectState(void *vtx, DetectEngineState *s)
+{
+    SMTPTransaction *tx = (SMTPTransaction *)vtx;
+    tx->de_state = s;
+    return 0;
+}
+
 /**
  * \brief Register the SMTP Protocol parser.
  */
@@ -1359,6 +1374,8 @@ void RegisterSMTPParsers(void)
 
         AppLayerParserRegisterGetEventInfo(IPPROTO_TCP, ALPROTO_SMTP, SMTPStateGetEventInfo);
         AppLayerParserRegisterGetEventsFunc(IPPROTO_TCP, ALPROTO_SMTP, SMTPGetEvents);
+        AppLayerParserRegisterDetectStateFuncs(IPPROTO_TCP, ALPROTO_SMTP,
+                                               SMTPGetTxDetectState, SMTPSetTxDetectState);
 
         AppLayerParserRegisterLocalStorageFunc(IPPROTO_TCP, ALPROTO_SMTP, SMTPLocalStorageAlloc,
                                                SMTPLocalStorageFree);
index d5e936a9384942a41b6a37390b46d3b7af7ae695..8bb4a9323902cf11bef3bb39e7ce68805067bb66 100644 (file)
@@ -62,6 +62,7 @@ typedef struct SMTPTransaction_ {
     MimeDecParseState *mime_state;
 
     AppLayerDecoderEvents *decoder_events;          /**< per tx events */
+    DetectEngineState *de_state;
 
     TAILQ_ENTRY(SMTPTransaction_) next;
 } SMTPTransaction;