diff options
author | Luca Deri <deri@ntop.org> | 2015-06-14 12:21:29 +0200 |
---|---|---|
committer | Luca Deri <deri@ntop.org> | 2015-06-14 12:21:29 +0200 |
commit | 702a9d08677cd1da788e7c51af39bf665efbbee6 (patch) | |
tree | aaff66ce8dec540c2e065713eca6329fdc38880d /src/lib/protocols/rtcp.c | |
parent | 20740e1b68eeedef49363e86004467011a412236 (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.c | 15 |
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); } |