aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuca Deri <deri@ntop.org>2019-07-18 11:38:43 +0200
committerLuca Deri <deri@ntop.org>2019-07-18 11:38:43 +0200
commite902478bd3e59156ef670b6c7aa639b43b816c4c (patch)
tree4cc10339959f2ec5889c4df68f78096ab59b5438
parentb50635cb89927b7f80cee81571f1b8b1f53ae939 (diff)
parentc85f7de2c18980e06c4634f4f10a2b07bd77648a (diff)
Merge branch 'dev' of https://github.com/ntop/nDPI into dev
-rw-r--r--example/ndpiReader.c2
-rw-r--r--src/lib/ndpi_utils.c118
2 files changed, 74 insertions, 46 deletions
diff --git a/example/ndpiReader.c b/example/ndpiReader.c
index 1daac81e6..c24db0ffe 100644
--- a/example/ndpiReader.c
+++ b/example/ndpiReader.c
@@ -3144,6 +3144,8 @@ void serializerUnitTest() {
break;
default:
+ printf("serializerUnitTest: unsupported type %u detected!\n", et);
+ return;
break;
}
}
diff --git a/src/lib/ndpi_utils.c b/src/lib/ndpi_utils.c
index 52021a365..e9d66718a 100644
--- a/src/lib/ndpi_utils.c
+++ b/src/lib/ndpi_utils.c
@@ -747,6 +747,12 @@ static u_int64_t ndpi_ntohll(u_int64_t v) {
/* ********************************** */
+void ndpi_reset_serializer(ndpi_serializer *serializer) {
+ serializer->size_used = 2 * sizeof(u_int8_t);
+}
+
+/* ********************************** */
+
int ndpi_init_serializer(ndpi_serializer *serializer,
ndpi_serialization_format fmt) {
serializer->buffer_size = 8192;
@@ -755,7 +761,7 @@ int ndpi_init_serializer(ndpi_serializer *serializer,
serializer->buffer[0] = 1; /* version */
serializer->buffer[1] = (u_int8_t) fmt;
- serializer->size_used = 2;
+ ndpi_reset_serializer(serializer);
return(serializer->buffer ? 1 : -1);
}
@@ -771,12 +777,6 @@ void ndpi_term_serializer(ndpi_serializer *serializer) {
/* ********************************** */
-void ndpi_reset_serializer(ndpi_serializer *serializer) {
- serializer->size_used = 2;
-}
-
-/* ********************************** */
-
static int ndpi_extend_serializer_buffer(ndpi_serializer *serializer, u_int32_t min_len) {
u_int32_t new_size;
void *r;
@@ -799,19 +799,6 @@ static int ndpi_extend_serializer_buffer(ndpi_serializer *serializer, u_int32_t
/* ********************************** */
-static void ndpi_serialize_single_string(ndpi_serializer *serializer,
- char *s, u_int32_t slen) {
- u_int16_t l = htonl(slen);
-
- memcpy(&serializer->buffer[serializer->size_used], &l, sizeof(u_int16_t));
- serializer->size_used += 2;
-
- memcpy(&serializer->buffer[serializer->size_used], s, slen);
- serializer->size_used += slen;
-}
-
-/* ********************************** */
-
static void ndpi_serialize_single_uint32(ndpi_serializer *serializer,
u_int32_t s) {
@@ -823,14 +810,6 @@ static void ndpi_serialize_single_uint32(ndpi_serializer *serializer,
/* ********************************** */
-static void ndpi_deserialize_single_uint32(ndpi_serializer *serializer,
- u_int32_t *s) {
- *s = ntohl(*(u_int32_t*)&serializer->buffer[serializer->size_used]);
- serializer->size_used += sizeof(u_int32_t);
-}
-
-/* ********************************** */
-
static void ndpi_serialize_single_uint64(ndpi_serializer *serializer,
u_int64_t s) {
@@ -842,21 +821,42 @@ static void ndpi_serialize_single_uint64(ndpi_serializer *serializer,
/* ********************************** */
-static void ndpi_deserialize_single_uint64(ndpi_serializer *serializer,
+static void ndpi_serialize_single_string(ndpi_serializer *serializer,
+ char *s, u_int32_t slen) {
+ u_int16_t l = htonl(slen);
+
+ memcpy(&serializer->buffer[serializer->size_used], &l, sizeof(u_int16_t));
+ serializer->size_used += sizeof(u_int16_t);
+
+ memcpy(&serializer->buffer[serializer->size_used], s, slen);
+ serializer->size_used += slen;
+}
+
+/* ********************************** */
+
+static void ndpi_deserialize_single_uint32(ndpi_serializer *deserializer,
+ u_int32_t *s) {
+ *s = ntohl(*(u_int32_t*)&deserializer->buffer[deserializer->size_used]);
+ deserializer->size_used += sizeof(u_int32_t);
+}
+
+/* ********************************** */
+
+static void ndpi_deserialize_single_uint64(ndpi_serializer *deserializer,
u_int64_t *s) {
- *s = ndpi_ntohll(*(u_int64_t*)&serializer->buffer[serializer->size_used]);
- serializer->size_used += sizeof(u_int64_t);
+ *s = ndpi_ntohll(*(u_int64_t*)&deserializer->buffer[deserializer->size_used]);
+ deserializer->size_used += sizeof(u_int64_t);
}
/* ********************************** */
-static void ndpi_deserialize_single_string(ndpi_serializer *serializer,
+static void ndpi_deserialize_single_string(ndpi_serializer *deserializer,
ndpi_string *v) {
- v->str_len = ntohs(*((u_int16_t *) &serializer->buffer[serializer->size_used]));
- serializer->size_used += 2;
+ v->str_len = ntohs(*((u_int16_t *) &deserializer->buffer[deserializer->size_used]));
+ deserializer->size_used += sizeof(u_int16_t);
- v->str = (char*)&serializer->buffer[serializer->size_used];
- serializer->size_used += v->str_len;
+ v->str = (char*)&deserializer->buffer[deserializer->size_used];
+ deserializer->size_used += v->str_len;
}
/* ********************************** */
@@ -1069,17 +1069,17 @@ int ndpi_serialize_string_string(ndpi_serializer *serializer,
int ndpi_init_deserializer_buf(ndpi_deserializer *deserializer,
u_int8_t *serialized_buffer,
u_int32_t serialized_buffer_len) {
- if(serialized_buffer_len < 3)
+ if(serialized_buffer_len < (2 * sizeof(u_int8_t)))
return(-1);
- deserializer->buffer_size = serialized_buffer_len;
deserializer->buffer = serialized_buffer;
if(deserializer->buffer[0] != 1)
return(-2); /* Invalid version */
+ deserializer->buffer_size = serialized_buffer_len;
deserializer->fmt = deserializer->buffer[1];
- deserializer->size_used = 2;
+ ndpi_reset_serializer(deserializer);
return(0);
}
@@ -1111,8 +1111,10 @@ ndpi_serialization_element_type ndpi_deserialize_get_nextitem_type(ndpi_deserial
int ndpi_deserialize_end_of_record(ndpi_deserializer *deserializer) {
if(ndpi_deserialize_get_nextitem_type(deserializer) == ndpi_serialization_end_of_record) {
u_int32_t buff_diff = deserializer->buffer_size - deserializer->size_used;
+ u_int16_t expected =
+ sizeof(u_int8_t) /* type */;
- if(buff_diff < 1) return(-2);
+ if(buff_diff < expected) return(-2);
deserializer->size_used++; /* Skip element type */
@@ -1127,8 +1129,12 @@ int ndpi_deserialize_uint32_uint32(ndpi_deserializer *deserializer,
u_int32_t *key, u_int32_t *value) {
if(ndpi_deserialize_get_nextitem_type(deserializer) == ndpi_serialization_uint32_uint32) {
u_int32_t buff_diff = deserializer->buffer_size - deserializer->size_used;
+ u_int16_t expected =
+ sizeof(u_int8_t) /* type */ +
+ sizeof(u_int32_t) /* key */ +
+ sizeof(u_int32_t);
- if(buff_diff < 10) return(-2);
+ if(buff_diff < expected) return(-2);
deserializer->size_used++; /* Skip element type */
ndpi_deserialize_single_uint32(deserializer, key);
@@ -1145,8 +1151,12 @@ int ndpi_deserialize_uint32_uint64(ndpi_deserializer *deserializer,
u_int32_t *key, u_int64_t *value) {
if(ndpi_deserialize_get_nextitem_type(deserializer) == ndpi_serialization_uint32_uint64) {
u_int32_t buff_diff = deserializer->buffer_size - deserializer->size_used;
+ u_int16_t expected =
+ sizeof(u_int8_t) /* type */ +
+ sizeof(u_int32_t) /* key */ +
+ sizeof(u_int64_t);
- if(buff_diff < 10) return(-2);
+ if(buff_diff < expected) return(-2);
deserializer->size_used++; /* Skip element type */
ndpi_deserialize_single_uint32(deserializer, key);
@@ -1163,8 +1173,12 @@ int ndpi_deserialize_uint32_string(ndpi_deserializer *deserializer,
u_int32_t *key, ndpi_string *value) {
if(ndpi_deserialize_get_nextitem_type(deserializer) == ndpi_serialization_uint32_string) {
u_int32_t buff_diff = deserializer->buffer_size - deserializer->size_used;
+ u_int32_t expected =
+ sizeof(u_int8_t) /* type */ +
+ sizeof(u_int32_t) /* key */ +
+ sizeof(u_int16_t) /* len */;
- if(buff_diff < 7) return(-2);
+ if(buff_diff < expected) return(-2);
deserializer->size_used++; /* Skip element type */
ndpi_deserialize_single_uint32(deserializer, key);
@@ -1181,8 +1195,12 @@ 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;
+ u_int32_t expected =
+ sizeof(u_int8_t) /* type */ +
+ sizeof(u_int16_t) /* key len */ +
+ sizeof(u_int32_t);
- if(buff_diff < 7) return(-2);
+ if(buff_diff < expected) return(-2);
deserializer->size_used++; /* Skip element type */
ndpi_deserialize_single_string(deserializer, key);
@@ -1199,8 +1217,12 @@ int ndpi_deserialize_string_uint64(ndpi_deserializer *deserializer,
ndpi_string *key, u_int64_t *value) {
if(ndpi_deserialize_get_nextitem_type(deserializer) == ndpi_serialization_string_uint64) {
u_int32_t buff_diff = deserializer->buffer_size - deserializer->size_used;
+ u_int32_t expected =
+ sizeof(u_int8_t) /* type */ +
+ sizeof(u_int16_t) /* key len */ +
+ sizeof(u_int64_t);
- if(buff_diff < 11) return(-2);
+ if(buff_diff < expected) return(-2);
deserializer->size_used++; /* Skip element type */
ndpi_deserialize_single_string(deserializer, key);
@@ -1217,8 +1239,12 @@ int ndpi_deserialize_string_string(ndpi_deserializer *deserializer,
ndpi_string *key, ndpi_string *value) {
if(ndpi_deserialize_get_nextitem_type(deserializer) == ndpi_serialization_string_string) {
u_int32_t buff_diff = deserializer->buffer_size - deserializer->size_used;
+ u_int32_t expected =
+ sizeof(u_int8_t) /* type */ +
+ sizeof(u_int16_t) /* key len */ +
+ sizeof(u_int16_t) /* len */;
- if(buff_diff < 5) return(-2);
+ if(buff_diff < expected) return(-2);
deserializer->size_used++; /* Skip element type */
ndpi_deserialize_single_string(deserializer, key);