aboutsummaryrefslogtreecommitdiff
path: root/src/lib/ndpi_utils.c
diff options
context:
space:
mode:
authorToni <matzeton@googlemail.com>2021-12-04 13:28:55 +0100
committerGitHub <noreply@github.com>2021-12-04 13:28:55 +0100
commit4d60c70c8bc1439fd59ac78869767fe5f1ef109e (patch)
tree319f1f9a0b8c5f646ad31396006c87c85a6a0e8b /src/lib/ndpi_utils.c
parentfb85dac9059a93078921c23f5983ed6a70453a8e (diff)
Make serialize risk and proto not dependant on any flow. (#1377)
Signed-off-by: Toni Uhlig <matzeton@googlemail.com>
Diffstat (limited to 'src/lib/ndpi_utils.c')
-rw-r--r--src/lib/ndpi_utils.c62
1 files changed, 37 insertions, 25 deletions
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);