aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlfredo Cardigliano <cardigliano@ntop.org>2020-02-14 16:32:00 +0100
committerAlfredo Cardigliano <cardigliano@ntop.org>2020-02-14 16:32:00 +0100
commit80e9826040bf9fb411a73fa7397e1f1870a07cd7 (patch)
tree767deb29d6f22bb76902eb6bd2c70bf90b01c6cc /src
parentcb34c6b23366dcfae75a27987f4676a7de021ea3 (diff)
Add ndpi_serialize_string_raw to add raw json values
Diffstat (limited to 'src')
-rw-r--r--src/include/ndpi_api.h3
-rw-r--r--src/lib/ndpi_serializer.c47
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;