From 702a9d08677cd1da788e7c51af39bf665efbbee6 Mon Sep 17 00:00:00 2001 From: Luca Deri Date: Sun, 14 Jun 2015 12:21:29 +0200 Subject: Improved RTCP decoder Added detection of KakaoTalk Voice and Chat --- src/lib/protocols/rtcp.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'src/lib/protocols/rtcp.c') diff --git a/src/lib/protocols/rtcp.c b/src/lib/protocols/rtcp.c index 02875648a..f618261dd 100644 --- a/src/lib/protocols/rtcp.c +++ b/src/lib/protocols/rtcp.c @@ -35,6 +35,19 @@ void ndpi_search_rtcp(struct ndpi_detection_module_struct *ndpi_struct, struct n ndpi_int_rtcp_add_connection(ndpi_struct, flow); } } else if(packet->udp != NULL) { + /* Let's check first the RTCP packet length */ + u_int16_t len, offset = 0, rtcp_section_len; + + while(offset < packet->payload_packet_len) { + len = packet->payload[2+offset] * 256 + packet->payload[2+offset+1]; + rtcp_section_len = (len + 1) * 4; + + if((offset+rtcp_section_len) > packet->payload_packet_len) + goto exclude_rtcp; + else + offset += rtcp_section_len; + } + sport = ntohs(packet->udp->source), dport = ntohs(packet->udp->dest); NDPI_LOG(NDPI_PROTOCOL_RTCP, ndpi_struct, NDPI_LOG_DEBUG, "calculating dport over udp.\n"); if(((packet->payload_packet_len >= 28 || packet->payload_packet_len <= 1200) && @@ -45,6 +58,8 @@ void ndpi_search_rtcp(struct ndpi_detection_module_struct *ndpi_struct, struct n ndpi_int_rtcp_add_connection(ndpi_struct, flow); } } else { + exclude_rtcp: + NDPI_LOG(NDPI_PROTOCOL_RTCP, ndpi_struct, NDPI_LOG_DEBUG, "exclude RTCP.\n"); NDPI_ADD_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, NDPI_PROTOCOL_RTCP); } -- cgit v1.2.3