aboutsummaryrefslogtreecommitdiff
path: root/src/lib/protocols/rtcp.c
diff options
context:
space:
mode:
authorLuca Deri <deri@ntop.org>2015-06-14 12:21:29 +0200
committerLuca Deri <deri@ntop.org>2015-06-14 12:21:29 +0200
commit702a9d08677cd1da788e7c51af39bf665efbbee6 (patch)
treeaaff66ce8dec540c2e065713eca6329fdc38880d /src/lib/protocols/rtcp.c
parent20740e1b68eeedef49363e86004467011a412236 (diff)
Improved RTCP decoder
Added detection of KakaoTalk Voice and Chat
Diffstat (limited to 'src/lib/protocols/rtcp.c')
-rw-r--r--src/lib/protocols/rtcp.c15
1 files changed, 15 insertions, 0 deletions
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);
}