From 2ce4adf09d80cbe26febb05bf995334fa966bb52 Mon Sep 17 00:00:00 2001 From: Alfredo Cardigliano Date: Tue, 16 Jul 2019 12:31:41 +0200 Subject: Added ndpi_serialization_string_uint32 --- src/lib/ndpi_utils.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) (limited to 'src/lib/ndpi_utils.c') diff --git a/src/lib/ndpi_utils.c b/src/lib/ndpi_utils.c index 9dcb5fda3..641c1091f 100644 --- a/src/lib/ndpi_utils.c +++ b/src/lib/ndpi_utils.c @@ -880,6 +880,33 @@ int ndpi_serialize_string_string(ndpi_serializer *serializer, return(0); } +/* ********************************** */ + +int ndpi_serialize_string_uint32(ndpi_serializer *serializer, + char *key, u_int32_t value) { + u_int32_t klen = strlen(key); + u_int32_t needed = 1 /* type */ + 2 /* key len */ + klen /* key */ + 4 /* value */; + u_int32_t buff_diff = serializer->buffer_size - serializer->size_used; + + if(buff_diff < needed) { + ndpi_extend_serializer_buffer(serializer); + if(serializer->size_used < 10) return(-1); + } + + serializer->buffer[serializer->size_used++] = ndpi_serialization_string_uint32; + + if(serializer->fmt == ndpi_serialization_format_json) { + serializer->size_used += snprintf((char*)serializer->buffer, buff_diff, "%s\"%s\":%u", + (serializer->size_used > 2) ? "," : "", + key, value); + } else { + ndpi_serialize_single_string(serializer, key, klen); + ndpi_serialize_single_uint32(serializer, value); + } + + return(0); +} + /* ********************************** */ /* ********************************** */ @@ -972,3 +999,24 @@ int ndpi_deserialize_string_string(ndpi_deserializer *deserializer, } else return(-1); } + +/* ********************************** */ + +int ndpi_deserialize_string_uint32(ndpi_deserializer *deserializer, + ndpi_string *key, u_int32_t *value) { + if(ndpi_deserialize_get_nextitem_type(deserializer) == ndpi_serialization_string_uint32) { + u_int32_t buff_diff = deserializer->buffer_size - deserializer->size_used; + + if(buff_diff < 8) return(-2); + + deserializer->size_used++; /* Skip element type */ + ndpi_deserialize_single_string(deserializer, key); + ndpi_deserialize_single_uint32(deserializer, value); + + return(0); + } else + return(-1); +} + +/* ********************************** */ + -- cgit v1.2.3