aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lib/ndpi_serializer.c32
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));
}