aboutsummaryrefslogtreecommitdiff
path: root/src/lib/ndpi_main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/ndpi_main.c')
-rw-r--r--src/lib/ndpi_main.c35
1 files changed, 27 insertions, 8 deletions
diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c
index 20b27c7fe..2bf1a103e 100644
--- a/src/lib/ndpi_main.c
+++ b/src/lib/ndpi_main.c
@@ -3439,22 +3439,41 @@ ndpi_protocol ndpi_detection_giveup(struct ndpi_detection_module_struct *ndpi_st
/* TODO: add the remaining stage_XXXX protocols */
if(flow->detected_protocol_stack[0] == NDPI_PROTOCOL_UNKNOWN) {
+ u_int16_t guessed_protocol_id, guessed_host_protocol_id;
+
if((flow->guessed_protocol_id == NDPI_PROTOCOL_UNKNOWN)
&& (flow->packet.l4_protocol == IPPROTO_TCP)
&& (flow->l4.tcp.ssl_stage > 1))
flow->guessed_protocol_id = NDPI_PROTOCOL_SSL;
-
- ndpi_int_change_protocol(ndpi_struct, flow,
- flow->guessed_host_protocol_id,
- flow->guessed_protocol_id);
+
+ guessed_protocol_id = flow->guessed_protocol_id,
+ guessed_host_protocol_id = flow->guessed_host_protocol_id;
+
+ if((guessed_host_protocol_id != NDPI_PROTOCOL_UNKNOWN)
+ && (NDPI_ISSET(&flow->excluded_protocol_bitmask, guessed_host_protocol_id)))
+ guessed_host_protocol_id = NDPI_PROTOCOL_UNKNOWN;
+
+
+ /* Ignore guessed protocol if they have been discarded */
+ if((guessed_protocol_id != NDPI_PROTOCOL_UNKNOWN)
+ && (guessed_host_protocol_id == NDPI_PROTOCOL_UNKNOWN)
+ && (NDPI_ISSET(&flow->excluded_protocol_bitmask, guessed_protocol_id)))
+ guessed_protocol_id = NDPI_PROTOCOL_UNKNOWN;
+
+ if((guessed_protocol_id != NDPI_PROTOCOL_UNKNOWN)
+ || (guessed_host_protocol_id != NDPI_PROTOCOL_UNKNOWN)) {
+ ndpi_int_change_protocol(ndpi_struct, flow,
+ guessed_host_protocol_id,
+ guessed_protocol_id);
+ }
} else {
flow->detected_protocol_stack[1] = flow->guessed_protocol_id,
flow->detected_protocol_stack[0] = flow->guessed_host_protocol_id;
-
+
if(flow->detected_protocol_stack[1] == flow->detected_protocol_stack[0])
flow->detected_protocol_stack[1] = flow->guessed_host_protocol_id;
}
-
+
if((flow->detected_protocol_stack[0] == NDPI_PROTOCOL_UNKNOWN) && (flow->num_stun_udp_pkts > 0))
ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_STUN, flow->guessed_host_protocol_id);
@@ -4177,10 +4196,10 @@ void ndpi_int_change_protocol(struct ndpi_detection_module_struct *ndpi_struct,
if((upper_detected_protocol == NDPI_PROTOCOL_UNKNOWN)
&& (lower_detected_protocol != NDPI_PROTOCOL_UNKNOWN))
upper_detected_protocol = lower_detected_protocol;
-
+
if(upper_detected_protocol == lower_detected_protocol)
lower_detected_protocol = NDPI_PROTOCOL_UNKNOWN;
-
+
ndpi_int_change_flow_protocol(ndpi_struct, flow,
upper_detected_protocol, lower_detected_protocol);
ndpi_int_change_packet_protocol(ndpi_struct, flow,