]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
eve/json: add common helper funcs
authorVictor Julien <victor@inliniac.net>
Tue, 9 Oct 2018 14:39:05 +0000 (16:39 +0200)
committerVictor Julien <victor@inliniac.net>
Tue, 9 Oct 2018 15:22:01 +0000 (17:22 +0200)
Add simple helper funcs for option-less loggers

src/Makefile.am
src/output-json-common.c [new file with mode: 0644]
src/output-json.h

index dac22fe3ff6142b692baec636d9ea17e657e7bd1..9a9f7ed88a703be55667c59f3b21b2a46e1760df 100644 (file)
@@ -343,6 +343,7 @@ output-stats.c output-stats.h \
 output-streaming.c output-streaming.h \
 output-tx.c output-tx.h \
 output-json.c output-json.h \
+output-json-common.c \
 packet-queue.c packet-queue.h \
 pkt-var.c pkt-var.h \
 reputation.c reputation.h \
diff --git a/src/output-json-common.c b/src/output-json-common.c
new file mode 100644 (file)
index 0000000..fba9c88
--- /dev/null
@@ -0,0 +1,114 @@
+/* Copyright (C) 2018 Open Information Security Foundation
+ *
+ * You can copy, redistribute or modify this Program under the terms of
+ * the GNU General Public License version 2 as published by the Free
+ * Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * version 2 along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA.
+ */
+
+/**
+ * \file
+ *
+ * \author Victor Julien <victor@inliniac.net>
+ */
+
+#include "suricata-common.h"
+#include "debug.h"
+#include "pkt-var.h"
+#include "conf.h"
+
+#include "threads.h"
+#include "threadvars.h"
+#include "tm-threads.h"
+
+#include "util-unittest.h"
+#include "util-buffer.h"
+#include "util-debug.h"
+#include "util-byte.h"
+
+#include "output.h"
+#include "output-json.h"
+
+#include "app-layer.h"
+#include "app-layer-parser.h"
+
+#ifdef HAVE_LIBJANSSON
+
+static void OutputJsonLogDeInitCtxSub(OutputCtx *output_ctx)
+{
+    SCFree(output_ctx->data);
+    SCFree(output_ctx);
+}
+
+OutputInitResult OutputJsonLogInitSub(ConfNode *conf, OutputCtx *parent_ctx)
+{
+    OutputInitResult result = { NULL, false };
+    OutputJsonCtx *ajt = parent_ctx->data;
+
+    OutputJsonCtx *log_ctx = SCCalloc(1, sizeof(*log_ctx));
+    if (unlikely(log_ctx == NULL)) {
+        return result;
+    }
+    *log_ctx = *ajt;
+
+    OutputCtx *output_ctx = SCCalloc(1, sizeof(*output_ctx));
+    if (unlikely(output_ctx == NULL)) {
+        SCFree(log_ctx);
+        return result;
+    }
+    output_ctx->data = log_ctx;
+    output_ctx->DeInit = OutputJsonLogDeInitCtxSub;
+
+    result.ctx = output_ctx;
+    result.ok = true;
+    return result;
+}
+
+#define OUTPUT_BUFFER_SIZE 65535
+
+TmEcode JsonLogThreadInit(ThreadVars *t, const void *initdata, void **data)
+{
+    if (initdata == NULL) {
+        return TM_ECODE_FAILED;
+    }
+
+    OutputJsonThreadCtx *thread = SCCalloc(1, sizeof(*thread));
+    if (unlikely(thread == NULL)) {
+        return TM_ECODE_FAILED;
+    }
+
+    thread->buffer = MemBufferCreateNew(OUTPUT_BUFFER_SIZE);
+    if (unlikely(thread->buffer == NULL)) {
+        SCFree(thread);
+        return TM_ECODE_FAILED;
+    }
+
+    thread->ctx = ((OutputCtx *)initdata)->data;
+    *data = (void *)thread;
+    return TM_ECODE_OK;
+}
+
+TmEcode JsonLogThreadDeinit(ThreadVars *t, void *data)
+{
+    OutputJsonThreadCtx *thread = (OutputJsonThreadCtx *)data;
+    if (thread == NULL) {
+        return TM_ECODE_OK;
+    }
+    if (thread->buffer != NULL) {
+        MemBufferFree(thread->buffer);
+    }
+    SCFree(thread);
+    return TM_ECODE_OK;
+}
+
+#endif /* HAVE_LIBJANSSON */
+
index e37f8b8f2635ab511113862b528c2850c87dc2e4..586299d9c3ad4377e57690c4a0b96ba4b2f7a9a3 100644 (file)
@@ -61,6 +61,10 @@ json_t *CreateJSONHeaderWithTxId(const Packet *p,
 int OutputJSONBuffer(json_t *js, LogFileCtx *file_ctx, MemBuffer **buffer);
 OutputInitResult OutputJsonInitCtx(ConfNode *);
 
+OutputInitResult OutputJsonLogInitSub(ConfNode *conf, OutputCtx *parent_ctx);
+TmEcode JsonLogThreadInit(ThreadVars *t, const void *initdata, void **data);
+TmEcode JsonLogThreadDeinit(ThreadVars *t, void *data);
+
 /*
  * Global configuration context data
  */
@@ -71,6 +75,11 @@ typedef struct OutputJsonCtx_ {
     HttpXFFCfg *xff_cfg;
 } OutputJsonCtx;
 
+typedef struct OutputJsonThreadCtx_ {
+    OutputJsonCtx *ctx;
+    MemBuffer *buffer;
+} OutputJsonThreadCtx;
+
 json_t *SCJsonBool(int val);
 json_t *SCJsonString(const char *val);
 void SCJsonDecref(json_t *js);