Skip to content

Commit

Permalink
Added ndpi_serialization_string_uint32
Browse files Browse the repository at this point in the history
  • Loading branch information
cardigliano committed Jul 16, 2019
1 parent 1777841 commit 2ce4adf
Show file tree
Hide file tree
Showing 4 changed files with 65 additions and 2 deletions.
12 changes: 12 additions & 0 deletions example/ndpiReader.c
Original file line number Diff line number Diff line change
Expand Up @@ -3092,6 +3092,7 @@ void serializerUnitTest() {
snprintf(vbuf, sizeof(vbuf), "World %u", i);
assert(ndpi_serialize_uint32_string(&serializer, i, "Hello") != -1);
assert(ndpi_serialize_string_string(&serializer, kbuf, vbuf) != -1);
assert(ndpi_serialize_string_uint32(&serializer, kbuf, i*i) != -1);
}

if(trace)
Expand Down Expand Up @@ -3136,6 +3137,17 @@ void serializerUnitTest() {
}
break;

case ndpi_serialization_string_uint32:
assert(ndpi_deserialize_string_uint32(&deserializer, &ks, &v32) != -1);
if(trace) {
u_int8_t bkpk = ks.str[ks.str_len];

ks.str[ks.str_len] = '\0';
printf("%s=%u\n", ks.str, v32);
ks.str[ks.str_len] = bkpk;
}
break;

default:
break;
}
Expand Down
6 changes: 4 additions & 2 deletions src/include/ndpi_api.h
Original file line number Diff line number Diff line change
Expand Up @@ -825,8 +825,8 @@ extern "C" {
u_int32_t key, char *value);
int ndpi_serialize_string_string(ndpi_serializer *serializer,
char *key, char *value);
int ndpi_serialize_string_string(ndpi_serializer *serializer,
char *key, char *value);
int ndpi_serialize_string_uint32(ndpi_serializer *serializer,
char *key, u_int32_t value);
/* **** */

int ndpi_init_deserializer(ndpi_deserializer *deserializer,
Expand All @@ -843,6 +843,8 @@ extern "C" {
u_int32_t *key, ndpi_string *value);
int ndpi_deserialize_string_string(ndpi_deserializer *deserializer,
ndpi_string *key, ndpi_string *value);
int ndpi_deserialize_string_uint32(ndpi_deserializer *deserializer,
ndpi_string *key, u_int32_t *value);

#ifdef __cplusplus
}
Expand Down
1 change: 1 addition & 0 deletions src/include/ndpi_typedefs.h
Original file line number Diff line number Diff line change
Expand Up @@ -1270,6 +1270,7 @@ typedef enum {
ndpi_serialization_uint32_uint32,
ndpi_serialization_uint32_string,
ndpi_serialization_string_string,
ndpi_serialization_string_uint32,
} ndpi_serialization_element_type;

typedef struct {
Expand Down
48 changes: 48 additions & 0 deletions src/lib/ndpi_utils.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

/* ********************************** */
/* ********************************** */

Expand Down Expand Up @@ -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);
}

/* ********************************** */

0 comments on commit 2ce4adf

Please sign in to comment.