aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlfredo Cardigliano <cardigliano@ntop.org>2024-10-31 18:14:56 +0100
committerAlfredo Cardigliano <cardigliano@ntop.org>2024-10-31 18:14:56 +0100
commit9009d207d85fd94bf71a9725b9c7fa9ec64803e2 (patch)
tree039fdf08368467df6ac6b908e1a93f2f0acb4360 /src
parent8ad34b381ca5d352dc4f877f93bc0f7625d8b28c (diff)
Fix blocks with inner-json mode
Diffstat (limited to 'src')
2 files changed, 13 insertions, 6 deletions
diff --git a/src/include/ndpi_typedefs.h b/src/include/ndpi_typedefs.h
index b09c6bc21..4dfddc5f0 100644
--- a/src/include/ndpi_typedefs.h
+++ b/src/include/ndpi_typedefs.h
@@ -1695,6 +1695,7 @@ typedef enum {
#define NDPI_SERIALIZER_STATUS_LIST (1 << 5)
#define NDPI_SERIALIZER_STATUS_SOL (1 << 6)
#define NDPI_SERIALIZER_STATUS_HDR_DONE (1 << 7)
+#define NDPI_SERIALIZER_STATUS_CEOB (1 << 8)
typedef struct {
u_int32_t size_used;
diff --git a/src/lib/ndpi_serializer.c b/src/lib/ndpi_serializer.c
index ec8bfad51..f9439c8f8 100644
--- a/src/lib/ndpi_serializer.c
+++ b/src/lib/ndpi_serializer.c
@@ -151,11 +151,12 @@ void ndpi_reset_serializer(ndpi_serializer *_serializer) {
serializer->status.buffer.size_used = 0;
buff_diff = serializer->buffer.size - serializer->status.buffer.size_used;
- if (serializer->multiline_json_array) {
- serializer->status.buffer.size_used += ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, "{}");
- } else {
+ if (!serializer->multiline_json_array) {
/* Note: please keep a space at the beginning as it is used for arrays when an end-of-record is used */
- serializer->status.buffer.size_used += ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, " {}");
+ serializer->buffer.data[serializer->status.buffer.size_used++] = ' ';
+ }
+ if (!serializer->inner_json) {
+ serializer->status.buffer.size_used += ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, "{}");
}
} else if(serializer->fmt == ndpi_serialization_format_csv) {
serializer->status.header.size_used = 0;
@@ -765,8 +766,11 @@ static inline int ndpi_serialize_json_post(ndpi_serializer *_serializer) {
if(serializer->status.buffer.size_used >= serializer->buffer.size)
return -1;
- if (!serializer->inner_json)
+
+ if (!serializer->inner_json || serializer->status.flags & NDPI_SERIALIZER_STATUS_CEOB) {
serializer->buffer.data[serializer->status.buffer.size_used++] = '}';
+ serializer->status.flags &= ~NDPI_SERIALIZER_STATUS_CEOB;
+ }
if (!serializer->multiline_json_array) {
if(serializer->status.flags & NDPI_SERIALIZER_STATUS_ARRAY) {
@@ -2375,6 +2379,7 @@ int ndpi_serialize_end_of_block(ndpi_serializer *_serializer) {
serializer->status.flags &= ~NDPI_SERIALIZER_STATUS_SOB;
// buff_diff = serializer->buffer.size - serializer->status.buffer.size_used;
+ serializer->status.flags |= NDPI_SERIALIZER_STATUS_CEOB;
if(ndpi_serialize_json_post(_serializer) != 0)
return(-1);
} else {
@@ -2409,7 +2414,8 @@ void ndpi_serializer_rollback_snapshot(ndpi_serializer *_serializer) {
} else {
if (!serializer->multiline_json_array)
serializer->buffer.data[0] = ' ';
- serializer->buffer.data[serializer->status.buffer.size_used-1] = '}';
+ if (!serializer->inner_json)
+ serializer->buffer.data[serializer->status.buffer.size_used-1] = '}';
}
}
}