diff options
-rw-r--r-- | src/lib/ndpi_serializer.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/lib/ndpi_serializer.c b/src/lib/ndpi_serializer.c index 94bc4dadd..98d3d4796 100644 --- a/src/lib/ndpi_serializer.c +++ b/src/lib/ndpi_serializer.c @@ -1262,6 +1262,38 @@ int ndpi_serialize_binary_int32(ndpi_serializer *_serializer, int ndpi_serialize_string_int32(ndpi_serializer *_serializer, const char *key, int32_t value) { +#ifdef OPTIMIZE_CSV_SERIALIZATION + ndpi_private_serializer *serializer = (ndpi_private_serializer*)_serializer; + + if(serializer->fmt == ndpi_serialization_format_csv) { + /* Key is ignored */ + u_int32_t buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; + u_int16_t needed = 11 /* 10 (billion) + CVS separator */; + int rc; + + if(buff_diff < needed) { + if(ndpi_extend_serializer_buffer(&serializer->buffer, needed - buff_diff) < 0) + return(-1); + else + buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; + } + + if(!(serializer->status.flags & NDPI_SERIALIZER_STATUS_HDR_DONE)) { + if(ndpi_serializer_header_string(serializer, key, strlen(key)) < 0) + return(-1); + } + + ndpi_serialize_csv_pre(serializer); + needed--; + + rc = snprintf((char*)&serializer->buffer.data[serializer->status.buffer.size_used], + needed, "%u", value); + + if(rc > 0) + serializer->status.buffer.size_used += rc; + return(0); + } else +#endif return(ndpi_serialize_binary_int32(_serializer, key, strlen(key), value)); } |