aboutsummaryrefslogtreecommitdiff
path: root/src/lib/ndpi_utils.c
diff options
context:
space:
mode:
authorLuca <deri@ntop.org>2022-05-30 17:54:09 +0200
committerLuca <deri@ntop.org>2022-05-30 17:54:30 +0200
commit34ede63c1590684919ec101efd4116b46edefac3 (patch)
treea2676c548f85773edd7dec279abf3a2a719767bb /src/lib/ndpi_utils.c
parent48065d80e989bdf708f7b87283e0625b490f1f19 (diff)
Added ability to return risk info in JSON format in ndpi_get_flow_risk_info()
Diffstat (limited to 'src/lib/ndpi_utils.c')
-rw-r--r--src/lib/ndpi_utils.c67
1 files changed, 48 insertions, 19 deletions
diff --git a/src/lib/ndpi_utils.c b/src/lib/ndpi_utils.c
index c4ab36238..e20dca6f3 100644
--- a/src/lib/ndpi_utils.c
+++ b/src/lib/ndpi_utils.c
@@ -1132,8 +1132,7 @@ void ndpi_serialize_risk(ndpi_serializer *serializer,
/* ********************************** */
void ndpi_serialize_risk_score(ndpi_serializer *serializer,
- ndpi_risk_enum risk)
-{
+ ndpi_risk_enum risk) {
u_int16_t rs, rs_client = 0, rs_server = 0;
if(risk == NDPI_NO_RISK) {
@@ -2255,7 +2254,9 @@ void ndpi_set_risk(struct ndpi_detection_module_struct *ndpi_str,
char *s = ndpi_strdup(risk_message);
if(s != NULL) {
- flow->risk_infos[flow->num_risk_infos++] = s;
+ flow->risk_infos[flow->num_risk_infos].id = r;
+ flow->risk_infos[flow->num_risk_infos].info = s;
+ flow->num_risk_infos++;
}
}
}
@@ -2523,28 +2524,56 @@ int ndpi_snprintf(char * str, size_t size, char const * format, ...) {
/* ******************************************* */
char* ndpi_get_flow_risk_info(struct ndpi_flow_struct *flow,
- char *out, u_int out_len) {
+ char *out, u_int out_len,
+ u_int8_t use_json) {
u_int i, offset = 0;
if((out == NULL) || (flow->num_risk_infos == 0))
return(NULL);
-
- out[0] = '\0', out_len--;
- for(i=0; (i<flow->num_risk_infos) && (out_len > offset); i++) {
- int rc = snprintf(&out[offset], out_len-offset, "%s%s",
- (i == 0) ? "" : " / ",
- flow->risk_infos[i]);
+ if(use_json) {
+ ndpi_serializer serializer;
+ u_int32_t buffer_len;
+ char *buffer;
+
+ if(ndpi_init_serializer(&serializer, ndpi_serialization_format_json) == -1)
+ return(NULL);
- if(rc <= 0)
- break;
- else
- offset += rc;
- }
+ for(i=0; i<flow->num_risk_infos; i++)
+ ndpi_serialize_uint32_string(&serializer,
+ flow->risk_infos[i].id,
+ flow->risk_infos[i].info);
+
+ buffer = ndpi_serializer_get_buffer(&serializer, &buffer_len);
- if(offset > out_len) offset = out_len;
-
- out[offset] = '\0';
+ if(buffer && (buffer_len > 0)) {
+ u_int l = ndpi_min(out_len-1, buffer_len);
+
+ strncpy(out, buffer, l);
+ out[l] = '\0';
+ }
+
+ ndpi_term_serializer(&serializer);
- return(out[0] == '\0' ? NULL : out);
+ return(out);
+ } else {
+ out[0] = '\0', out_len--;
+
+ for(i=0; (i<flow->num_risk_infos) && (out_len > offset); i++) {
+ int rc = snprintf(&out[offset], out_len-offset, "%s%s",
+ (i == 0) ? "" : " / ",
+ flow->risk_infos[i].info);
+
+ if(rc <= 0)
+ break;
+ else
+ offset += rc;
+ }
+
+ if(offset > out_len) offset = out_len;
+
+ out[offset] = '\0';
+
+ return(out[0] == '\0' ? NULL : out);
+ }
}