aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/include/ndpi_api.h16
-rw-r--r--src/lib/ndpi_serializer.c74
2 files changed, 84 insertions, 6 deletions
diff --git a/src/include/ndpi_api.h b/src/include/ndpi_api.h
index 088837f98..0b4187ad2 100644
--- a/src/include/ndpi_api.h
+++ b/src/include/ndpi_api.h
@@ -867,10 +867,7 @@ extern "C" {
int ndpi_init_serializer(ndpi_serializer *serializer, ndpi_serialization_format fmt);
void ndpi_term_serializer(ndpi_serializer *serializer);
void ndpi_reset_serializer(ndpi_serializer *serializer);
- int ndpi_serialize_string_int32(ndpi_serializer *serializer,
- const char *key, int32_t value);
- int ndpi_serialize_string_int64(ndpi_serializer *serializer,
- const char *key, int64_t value);
+
int ndpi_serialize_uint32_uint32(ndpi_serializer *serializer,
u_int32_t key, u_int32_t value);
int ndpi_serialize_uint32_uint64(ndpi_serializer *serializer,
@@ -884,6 +881,13 @@ extern "C" {
const char *format /* e.f. "%.2f" */);
int ndpi_serialize_uint32_string(ndpi_serializer *serializer,
u_int32_t key, const char *value);
+ int ndpi_serialize_uint32_boolean(ndpi_serializer *serializer,
+ u_int32_t key, u_int8_t value);
+
+ int ndpi_serialize_string_int32(ndpi_serializer *serializer,
+ const char *key, int32_t value);
+ int ndpi_serialize_string_int64(ndpi_serializer *serializer,
+ const char *key, int64_t value);
int ndpi_serialize_string_uint32(ndpi_serializer *serializer,
const char *key, u_int32_t value);
int ndpi_serialize_string_uint32_format(ndpi_serializer *serializer,
@@ -896,10 +900,12 @@ extern "C" {
int ndpi_serialize_string_binary(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" */);
+ int ndpi_serialize_string_boolean(ndpi_serializer *serializer,
+ const char *key, u_int8_t value);
+
int ndpi_serialize_end_of_record(ndpi_serializer *serializer);
int ndpi_serialize_start_of_block(ndpi_serializer *_serializer,
const char *key);
diff --git a/src/lib/ndpi_serializer.c b/src/lib/ndpi_serializer.c
index 945e60b37..6875af342 100644
--- a/src/lib/ndpi_serializer.c
+++ b/src/lib/ndpi_serializer.c
@@ -816,6 +816,38 @@ int ndpi_serialize_uint32_string(ndpi_serializer *_serializer,
/* ********************************** */
+int ndpi_serialize_uint32_boolean(ndpi_serializer *_serializer,
+ u_int32_t key, u_int8_t value) {
+ ndpi_private_serializer *serializer = (ndpi_private_serializer*)_serializer;
+ u_int32_t buff_diff = serializer->buffer_size - serializer->status.size_used;
+ u_int32_t needed = 24;
+
+ if(serializer->fmt != ndpi_serialization_format_json &&
+ serializer->fmt != ndpi_serialization_format_csv)
+ return -1;
+
+ if(buff_diff < needed) {
+ if(ndpi_extend_serializer_buffer(_serializer, needed - buff_diff) < 0)
+ return(-1);
+ buff_diff = serializer->buffer_size - serializer->status.size_used;
+ }
+
+ if(serializer->fmt == ndpi_serialization_format_json) {
+ ndpi_serialize_json_pre(_serializer);
+ serializer->status.size_used += snprintf((char *) &serializer->buffer[serializer->status.size_used], buff_diff,
+ "\"%u\":%s", key, value ? "true" : "false");
+ 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,
+ "%s%s", (serializer->status.size_used > 0) ? serializer->csv_separator : "",
+ value ? "true" : "false");
+ }
+
+ return(0);
+}
+
+/* ********************************** */
+
static int ndpi_serialize_binary_int32(ndpi_serializer *_serializer,
const char *key, u_int16_t klen,
int32_t value) {
@@ -1182,7 +1214,6 @@ static int ndpi_serialize_binary_binary(ndpi_serializer *_serializer,
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);
- buff_diff = serializer->buffer_size - serializer->status.size_used;
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,
@@ -1215,6 +1246,47 @@ int ndpi_serialize_string_string(ndpi_serializer *_serializer,
/* ********************************** */
+int ndpi_serialize_string_boolean(ndpi_serializer *_serializer,
+ const char *key, u_int8_t value) {
+ ndpi_private_serializer *serializer = (ndpi_private_serializer*)_serializer;
+ u_int32_t buff_diff = serializer->buffer_size - serializer->status.size_used;
+ u_int16_t klen = strlen(key);
+ u_int32_t needed;
+
+ if(serializer->fmt != ndpi_serialization_format_json &&
+ serializer->fmt != ndpi_serialization_format_csv)
+ return -1;
+
+ if(ndpi_is_number(key, klen))
+ return(ndpi_serialize_uint32_boolean(_serializer, atoi(key), value));
+
+ needed = klen + 16;
+
+ if(buff_diff < needed) {
+ if(ndpi_extend_serializer_buffer(_serializer, needed - buff_diff) < 0)
+ return(-1);
+ buff_diff = serializer->buffer_size - serializer->status.size_used;
+ }
+
+ if(serializer->fmt == ndpi_serialization_format_json) {
+ ndpi_serialize_json_pre(_serializer);
+ serializer->status.size_used += ndpi_json_string_escape(key, klen,
+ (char *) &serializer->buffer[serializer->status.size_used], buff_diff);
+ buff_diff = serializer->buffer_size - serializer->status.size_used;
+ serializer->status.size_used += snprintf((char *) &serializer->buffer[serializer->status.size_used], buff_diff, ":%s",
+ value ? "true" : "false");
+ 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,
+ "%s%s", (serializer->status.size_used > 0) ? serializer->csv_separator : "",
+ value ? "true" : "false");
+ }
+
+ return(0);
+}
+
+/* ********************************** */
+
/* Serialize start of nested block (JSON only)*/
int ndpi_serialize_start_of_block(ndpi_serializer *_serializer,
const char *key) {