aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/include/ndpi_api.h.in6
-rw-r--r--src/lib/ndpi_utils.c62
2 files changed, 41 insertions, 27 deletions
diff --git a/src/include/ndpi_api.h.in b/src/include/ndpi_api.h.in
index 1cc96e854..82010ece5 100644
--- a/src/include/ndpi_api.h.in
+++ b/src/include/ndpi_api.h.in
@@ -1538,8 +1538,10 @@ extern "C" {
u_int8_t ndpi_is_protocol_detected(struct ndpi_detection_module_struct *ndpi_str,
ndpi_protocol proto);
- void ndpi_serialize_risk(ndpi_serializer *serializer, struct ndpi_flow_struct *flow);
-
+ void ndpi_serialize_risk(ndpi_serializer *serializer, ndpi_risk_enum risk);
+ void ndpi_serialize_proto(struct ndpi_detection_module_struct *ndpi_struct,
+ ndpi_serializer *serializer, ndpi_risk_enum risk,
+ ndpi_protocol l7_protocol);
const char* ndpi_risk2str(ndpi_risk_enum risk);
const char* ndpi_severity2str(ndpi_risk_severity s);
ndpi_risk_info* ndpi_risk2severity(ndpi_risk_enum risk);
diff --git a/src/lib/ndpi_utils.c b/src/lib/ndpi_utils.c
index 14be40d86..0a2eba307 100644
--- a/src/lib/ndpi_utils.c
+++ b/src/lib/ndpi_utils.c
@@ -1104,25 +1104,43 @@ char* ndpi_base64_encode(unsigned char const* bytes_to_encode, size_t in_len) {
/* ********************************** */
void ndpi_serialize_risk(ndpi_serializer *serializer,
- struct ndpi_flow_struct *flow) {
- if(flow->risk != 0) {
- u_int32_t i;
+ ndpi_risk_enum risk)
+{
+ u_int32_t i;
- ndpi_serialize_start_of_block(serializer, "flow_risk");
+ ndpi_serialize_start_of_block(serializer, "flow_risk");
+ for(i = 0; i < NDPI_MAX_RISK; i++) {
+ ndpi_risk_enum r = (ndpi_risk_enum)i;
- for(i = 0; i < NDPI_MAX_RISK; i++) {
- ndpi_risk_enum r = (ndpi_risk_enum)i;
+ if(NDPI_ISSET_BIT(risk, r))
+ ndpi_serialize_uint32_string(serializer, i, ndpi_risk2str(r));
+ }
- if(NDPI_ISSET_BIT(flow->risk, r))
- ndpi_serialize_uint32_string(serializer, i, ndpi_risk2str(r));
- }
+ ndpi_serialize_end_of_block(serializer);
+}
- ndpi_serialize_end_of_block(serializer);
- }
+ /* ********************************** */
+
+void ndpi_serialize_proto(struct ndpi_detection_module_struct *ndpi_struct,
+ ndpi_serializer *serializer,
+ ndpi_risk_enum risk,
+ ndpi_protocol l7_protocol)
+{
+ char buf[64];
+
+ ndpi_serialize_start_of_block(serializer, "ndpi");
+ ndpi_serialize_risk(serializer, risk);
+ ndpi_serialize_string_string(serializer, "proto", ndpi_protocol2name(ndpi_struct, l7_protocol, buf, sizeof(buf)));
+ ndpi_protocol_breed_t breed =
+ ndpi_get_proto_breed(ndpi_struct,
+ (l7_protocol.app_protocol != NDPI_PROTOCOL_UNKNOWN ? l7_protocol.app_protocol : l7_protocol.master_protocol));
+ ndpi_serialize_string_string(serializer, "breed", ndpi_get_proto_breed_name(ndpi_struct, breed));
+ if(l7_protocol.category != NDPI_PROTOCOL_CATEGORY_UNSPECIFIED)
+ ndpi_serialize_string_string(serializer, "category", ndpi_category_get_name(ndpi_struct, l7_protocol.category));
+ ndpi_serialize_end_of_block(serializer);
}
/* ********************************** */
-/* ********************************** */
/* NOTE: serializer must have been already initialized */
int ndpi_dpi2json(struct ndpi_detection_module_struct *ndpi_struct,
@@ -1133,21 +1151,15 @@ int ndpi_dpi2json(struct ndpi_detection_module_struct *ndpi_struct,
if(flow == NULL) return(-1);
- ndpi_serialize_start_of_block(serializer, "ndpi");
- ndpi_serialize_risk(serializer, flow);
- if (l7_protocol.master_protocol == NDPI_PROTOCOL_IP_ICMP && flow->entropy > 0.0f) {
- ndpi_serialize_string_float(serializer, "entropy", flow->entropy, "%.6f");
- }
- ndpi_serialize_string_string(serializer, "proto", ndpi_protocol2name(ndpi_struct, l7_protocol, buf, sizeof(buf)));
- ndpi_protocol_breed_t breed =
- ndpi_get_proto_breed(ndpi_struct,
- (l7_protocol.app_protocol != NDPI_PROTOCOL_UNKNOWN ? l7_protocol.app_protocol : l7_protocol.master_protocol));
- ndpi_serialize_string_string(serializer, "breed", ndpi_get_proto_breed_name(ndpi_struct, breed));
- if(l7_protocol.category != NDPI_PROTOCOL_CATEGORY_UNSPECIFIED)
- ndpi_serialize_string_string(serializer, "category", ndpi_category_get_name(ndpi_struct, l7_protocol.category));
- ndpi_serialize_end_of_block(serializer);
+ ndpi_serialize_proto(ndpi_struct, serializer, flow->risk, l7_protocol);
switch(l7_protocol.master_protocol ? l7_protocol.master_protocol : l7_protocol.app_protocol) {
+ case NDPI_PROTOCOL_IP_ICMP:
+ if (flow->entropy > 0.0f) {
+ ndpi_serialize_string_float(serializer, "entropy", flow->entropy, "%.6f");
+ }
+ break;
+
case NDPI_PROTOCOL_DHCP:
ndpi_serialize_start_of_block(serializer, "dhcp");
ndpi_serialize_string_string(serializer, "hostname", flow->host_server_name);