From 7395f8bef18d0f856c6fbe526e67a8e3d56223e7 Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Mon, 21 Nov 2016 12:31:31 -0500 Subject: [PATCH] TT#5566 recognize and ignore (for now) RTCP packets Change-Id: Ife95c9506a652b5410380963dbc1cf98f4ace611 --- daemon/crypto.c | 1 + daemon/media_socket.c | 1 + daemon/rtcp.c | 17 +---------------- daemon/rtcp.h | 13 ------------- lib/rtcplib.h | 38 ++++++++++++++++++++++++++++++++++++++ recording-daemon/packet.c | 5 +++++ 6 files changed, 46 insertions(+), 29 deletions(-) create mode 100644 lib/rtcplib.h diff --git a/daemon/crypto.c b/daemon/crypto.c index 2861d256a..008d5fe0d 100644 --- a/daemon/crypto.c +++ b/daemon/crypto.c @@ -13,6 +13,7 @@ #include "rtcp.h" #include "log.h" #include "rtplib.h" +#include "rtcplib.h" diff --git a/daemon/media_socket.c b/daemon/media_socket.c index 46caf99bc..5195c6a6c 100644 --- a/daemon/media_socket.c +++ b/daemon/media_socket.c @@ -20,6 +20,7 @@ #include "poller.h" #include "recording.h" #include "rtplib.h" +#include "rtcplib.h" #ifndef PORT_RANDOM_MIN diff --git a/daemon/rtcp.c b/daemon/rtcp.c index fe3244d1a..43a414f7d 100644 --- a/daemon/rtcp.c +++ b/daemon/rtcp.c @@ -14,6 +14,7 @@ #include "rtcp_xr.h" #include "homer.h" #include "media_socket.h" +#include "rtcplib.h" @@ -460,22 +461,6 @@ error: } -/* RFC 5761 section 4 */ -int rtcp_demux_is_rtcp(const str *s) { - struct rtcp_packet *rtcp; - - if (s->len < sizeof(*rtcp)) - return 0; - - rtcp = (void *) s->s; - - if (rtcp->header.pt < 194) - return 0; - if (rtcp->header.pt > 223) - return 0; - return 1; -} - static void print_rtcp_common(GString *log, const pjmedia_rtcp_common *common) { if (log) g_string_append_printf(log,"version=%u, padding=%u, count=%u, payloadtype=%u, length=%u, ssrc=%u, ", diff --git a/daemon/rtcp.h b/daemon/rtcp.h index c266460f9..56637947b 100644 --- a/daemon/rtcp.h +++ b/daemon/rtcp.h @@ -10,17 +10,6 @@ struct crypto_context; -struct rtcp_header { - unsigned char v_p_x; - unsigned char pt; - u_int16_t length; -} __attribute__ ((packed)); - -struct rtcp_packet { - struct rtcp_header header; - u_int32_t ssrc; -} __attribute__ ((packed)); - /** * RTCP sender report. */ @@ -97,8 +86,6 @@ int rtcp_avpf2avp(str *); int rtcp_avp2savp(str *, struct crypto_context *); int rtcp_savp2avp(str *, struct crypto_context *); -int rtcp_demux_is_rtcp(const str *); - void parse_and_log_rtcp_report(struct stream_fd *sfd, const str *, const endpoint_t *, const struct timeval *); #endif diff --git a/lib/rtcplib.h b/lib/rtcplib.h new file mode 100644 index 000000000..02d36027e --- /dev/null +++ b/lib/rtcplib.h @@ -0,0 +1,38 @@ +#ifndef _RTCPLIB_H_ +#define _RTCPLIB_H_ + +#include "str.h" +#include "compat.h" + + +struct rtcp_header { + unsigned char v_p_x; + unsigned char pt; + u_int16_t length; +} __attribute__ ((packed)); + +struct rtcp_packet { + struct rtcp_header header; + u_int32_t ssrc; +} __attribute__ ((packed)); + + +/* RFC 5761 section 4 */ +INLINE int rtcp_demux_is_rtcp(const str *s) { + struct rtcp_packet *rtcp; + + if (s->len < sizeof(*rtcp)) + return 0; + + rtcp = (void *) s->s; + + if (rtcp->header.pt < 194) + return 0; + if (rtcp->header.pt > 223) + return 0; + return 1; +} + + + +#endif diff --git a/recording-daemon/packet.c b/recording-daemon/packet.c index 655031101..7ef8e4560 100644 --- a/recording-daemon/packet.c +++ b/recording-daemon/packet.c @@ -9,6 +9,7 @@ #include "rtplib.h" #include "str.h" #include "decoder.h" +#include "rtcplib.h" static int ptr_cmp(const void *a, const void *b, void *dummy) { @@ -178,6 +179,9 @@ void packet_process(stream_t *stream, unsigned char *buf, unsigned len) { packet->udp = (void *) bufstr.s; str_shift(&bufstr, sizeof(*packet->udp)); + if (rtcp_demux_is_rtcp(&bufstr)) + goto ignore; // for now + if (rtp_payload(&packet->rtp, &packet->payload, &bufstr)) goto err; if (rtp_padding(packet->rtp, &packet->payload)) @@ -218,5 +222,6 @@ dupe: err: ilog(LOG_WARN, "Failed to parse packet headers"); +ignore: packet_free(packet); }