]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
DNP3: Use directional logging.
authorJason Ish <ish@unx.ca>
Wed, 13 Jul 2016 15:04:15 +0000 (09:04 -0600)
committerVictor Julien <victor@inliniac.net>
Thu, 27 Oct 2016 08:25:34 +0000 (10:25 +0200)
Instead of waiting for a transaction complete, log the
request as soon as it is completes which will give it a
more accurate timestamp.

src/output-json-dnp3.c

index 1ea1c3df87565c1d26b3ab80bd076e824ee69445..e726959d48e9d533e1ae3fc6ca1d8928b16b2fd9 100644 (file)
@@ -300,8 +300,8 @@ error:
     return NULL;
 }
 
-static int JsonDNP3Logger(ThreadVars *tv, void *thread_data, const Packet *p,
-    Flow *f, void *state, void *vtx, uint64_t tx_id)
+static int JsonDNP3LoggerToServer(ThreadVars *tv, void *thread_data,
+    const Packet *p, Flow *f, void *state, void *vtx, uint64_t tx_id)
 {
     SCEnter();
     LogDNP3LogThread *thread = (LogDNP3LogThread *)thread_data;
@@ -323,6 +323,18 @@ static int JsonDNP3Logger(ThreadVars *tv, void *thread_data, const Packet *p,
         json_decref(js);
     }
 
+    SCReturnInt(TM_ECODE_OK);
+}
+
+static int JsonDNP3LoggerToClient(ThreadVars *tv, void *thread_data,
+    const Packet *p, Flow *f, void *state, void *vtx, uint64_t tx_id)
+{
+    SCEnter();
+    LogDNP3LogThread *thread = (LogDNP3LogThread *)thread_data;
+    DNP3Transaction *tx = vtx;
+
+    MemBuffer *buffer = (MemBuffer *)thread->buffer;
+
     MemBufferReset(buffer);
     if (tx->has_response && tx->response_done) {
         json_t *js = CreateJSONHeader((Packet *)p, 1, "dnp3");
@@ -417,17 +429,21 @@ static TmEcode JsonDNP3LogThreadDeinit(ThreadVars *t, void *data)
 
 void JsonDNP3LogRegister(void)
 {
-    /* Register as en eve sub-module. */
-    OutputRegisterTxSubModule(LOGGER_JSON_DNP3, "eve-log", "JsonDNP3Log",
-        "eve-log.dnp3", OutputDNP3LogInitSub, ALPROTO_DNP3, JsonDNP3Logger,
-        JsonDNP3LogThreadInit, JsonDNP3LogThreadDeinit, NULL);
+    /* Register direction aware eve sub-modules. */
+    OutputRegisterTxSubModuleWithProgress(LOGGER_JSON_DNP3, "eve-log",
+        "JsonDNP3Log", "eve-log.dnp3", OutputDNP3LogInitSub, ALPROTO_DNP3,
+        JsonDNP3LoggerToServer, 0, 1, JsonDNP3LogThreadInit,
+        JsonDNP3LogThreadDeinit, NULL);
+    OutputRegisterTxSubModuleWithProgress(LOGGER_JSON_DNP3, "eve-log",
+        "JsonDNP3Log", "eve-log.dnp3", OutputDNP3LogInitSub, ALPROTO_DNP3,
+        JsonDNP3LoggerToClient, 1, 1, JsonDNP3LogThreadInit,
+        JsonDNP3LogThreadDeinit, NULL);
 }
 
 #else
 
 void JsonDNP3LogRegister (void)
 {
-    SCLogInfo("Can't init JSON output - JSON support was disabled during build.");
 }
 
 #endif