diff options
author | Alfredo Cardigliano <cardigliano@ntop.org> | 2020-02-14 16:32:00 +0100 |
---|---|---|
committer | Alfredo Cardigliano <cardigliano@ntop.org> | 2020-02-14 16:32:00 +0100 |
commit | 80e9826040bf9fb411a73fa7397e1f1870a07cd7 (patch) | |
tree | 767deb29d6f22bb76902eb6bd2c70bf90b01c6cc /src | |
parent | cb34c6b23366dcfae75a27987f4676a7de021ea3 (diff) |
Add ndpi_serialize_string_raw to add raw json values
Diffstat (limited to 'src')
-rw-r--r-- | src/include/ndpi_api.h | 3 | ||||
-rw-r--r-- | src/lib/ndpi_serializer.c | 47 |
2 files changed, 41 insertions, 9 deletions
diff --git a/src/include/ndpi_api.h b/src/include/ndpi_api.h index c069b811d..e52993243 100644 --- a/src/include/ndpi_api.h +++ b/src/include/ndpi_api.h @@ -918,6 +918,9 @@ extern "C" { int ndpi_serialize_string_binary(ndpi_serializer *serializer, const char *key, const char *_value, u_int16_t vlen); + int ndpi_serialize_string_raw(ndpi_serializer *_serializer, + const char *key, const char *_value, + u_int16_t vlen); int ndpi_serialize_string_float(ndpi_serializer *serializer, const char *key, float value, const char *format /* e.f. "%.2f" */); diff --git a/src/lib/ndpi_serializer.c b/src/lib/ndpi_serializer.c index a0924c1e2..05b346bbb 100644 --- a/src/lib/ndpi_serializer.c +++ b/src/lib/ndpi_serializer.c @@ -1184,19 +1184,17 @@ int ndpi_serialize_string_float(ndpi_serializer *_serializer, /* ********************************** */ -static int ndpi_serialize_binary_binary(ndpi_serializer *_serializer, +/* Key is a <string, len> pair, value is a raw value */ +static int ndpi_serialize_binary_raw(ndpi_serializer *_serializer, const char *key, u_int16_t klen, - const char *_value, - u_int16_t vlen) { + const char *value, + u_int16_t vlen, + u_int8_t escape) { ndpi_private_serializer *serializer = (ndpi_private_serializer*)_serializer; - const char *value = _value ? _value : ""; u_int32_t buff_diff = serializer->buffer_size - serializer->status.size_used; u_int32_t needed; - if(ndpi_is_number(key, klen)) - return(ndpi_serialize_uint32_string(_serializer, atoi(key), _value)); - needed = sizeof(u_int8_t) /* type */ + sizeof(u_int16_t) /* key len */ + @@ -1220,8 +1218,13 @@ static int ndpi_serialize_binary_binary(ndpi_serializer *_serializer, buff_diff = serializer->buffer_size - serializer->status.size_used; serializer->status.size_used += snprintf((char *) &serializer->buffer[serializer->status.size_used], buff_diff, ":"); buff_diff = serializer->buffer_size - serializer->status.size_used; - serializer->status.size_used += ndpi_json_string_escape(value, vlen, - (char *) &serializer->buffer[serializer->status.size_used], buff_diff); + + if (escape) + serializer->status.size_used += ndpi_json_string_escape(value, vlen, + (char *) &serializer->buffer[serializer->status.size_used], buff_diff); + else + serializer->status.size_used += snprintf((char *) &serializer->buffer[serializer->status.size_used], buff_diff, + value, vlen); ndpi_serialize_json_post(_serializer); } else if(serializer->fmt == ndpi_serialization_format_csv) { serializer->status.size_used += snprintf((char *) &serializer->buffer[serializer->status.size_used], buff_diff, @@ -1239,6 +1242,23 @@ static int ndpi_serialize_binary_binary(ndpi_serializer *_serializer, /* ********************************** */ +/* Key is a <string, len> pair, value is a <string, len> pair */ +static int ndpi_serialize_binary_binary(ndpi_serializer *_serializer, + const char *key, + u_int16_t klen, + const char *_value, + u_int16_t vlen) { + const char *value = _value ? _value : ""; + + if(ndpi_is_number(key, klen)) + return(ndpi_serialize_uint32_binary(_serializer, atoi(key), value, vlen)); + + return ndpi_serialize_binary_raw(_serializer, key, klen, value, vlen, 1 /* escape */); +} + +/* ********************************** */ + +/* Key is a string, value is a <string, len> pair */ int ndpi_serialize_string_binary(ndpi_serializer *_serializer, const char *key, const char *_value, u_int16_t vlen) { @@ -1247,6 +1267,7 @@ int ndpi_serialize_string_binary(ndpi_serializer *_serializer, /* ********************************** */ +/* Key is a string, value is a string (strlen is used to compute the len) */ int ndpi_serialize_string_string(ndpi_serializer *_serializer, const char *key, const char *_value) { return(ndpi_serialize_binary_binary(_serializer, key, strlen(key), _value, strlen(_value))); @@ -1254,6 +1275,14 @@ int ndpi_serialize_string_string(ndpi_serializer *_serializer, /* ********************************** */ +/* Key is a string, value is a raw json value (it can be a number, an escaped/quoted string, an array, ..) */ +int ndpi_serialize_string_raw(ndpi_serializer *_serializer, + const char *key, const char *_value, u_int16_t vlen) { + return(ndpi_serialize_binary_raw(_serializer, key, strlen(key), _value, vlen, 0 /* do not escape */)); +} + +/* ********************************** */ + int ndpi_serialize_string_boolean(ndpi_serializer *_serializer, const char *key, u_int8_t value) { ndpi_private_serializer *serializer = (ndpi_private_serializer*)_serializer; |