From d3ef4edfcf87c7b9ecb2c8762c918581682cd3bd Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Mon, 2 Feb 2026 08:09:35 -0400 Subject: [PATCH] MT#55283 allow RTCP APP for peer verification Closes #2057 Change-Id: I069d12d8c7fd7ec36b77f1394fd9e8b928cdfd46 --- daemon/media_socket.c | 2 +- daemon/rtcp.c | 9 --------- lib/rtcplib.h | 15 ++++++++++++++- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/daemon/media_socket.c b/daemon/media_socket.c index 9a87557cb..c8c940c80 100644 --- a/daemon/media_socket.c +++ b/daemon/media_socket.c @@ -3128,7 +3128,7 @@ static bool media_packet_address_check(struct packet_handler_ctx *phc) // confirmation purposes when needed. This is regardless of whether rtcp-mux // is enabled or not. if (!phc->mp.sfd->confirmed && PS_ISSET(phc->mp.stream, RTP)) { - if (rtcp_demux_is_rtcp(&phc->s)) { + if (rtcp_demux_is_rtcp(&phc->s) && rtcp_pt(&phc->s) != RTCP_PT_APP) { ilog(LOG_DEBUG | LOG_FLAG_LIMIT, "Ignoring stray RTCP packet from %s%s%s for " "peer address confirmation purposes", FMT_M(endpoint_print_buf(&phc->mp.fsin))); diff --git a/daemon/rtcp.c b/daemon/rtcp.c index 8afdcb230..11c97302d 100644 --- a/daemon/rtcp.c +++ b/daemon/rtcp.c @@ -36,15 +36,6 @@ #define SRTCP_R_LENGTH 6 #endif -#define RTCP_PT_SR 200 /* sender report */ -#define RTCP_PT_RR 201 /* receiver report */ -#define RTCP_PT_SDES 202 /* source description */ -#define RTCP_PT_BYE 203 /* bye */ -#define RTCP_PT_APP 204 /* application specific */ -#define RTCP_PT_RTPFB 205 /* transport layer feedback message (RTP/AVPF) */ -#define RTCP_PT_PSFB 206 /* payload-specific feedback message (RTP/AVPF) */ -#define RTCP_PT_XR 207 - #define SDES_TYPE_END 0 #define SDES_TYPE_CNAME 1 #define SDES_TYPE_NAME 2 diff --git a/lib/rtcplib.h b/lib/rtcplib.h index b68416d5f..1fe80f94f 100644 --- a/lib/rtcplib.h +++ b/lib/rtcplib.h @@ -6,6 +6,16 @@ #include "compat.h" +#define RTCP_PT_SR 200 /* sender report */ +#define RTCP_PT_RR 201 /* receiver report */ +#define RTCP_PT_SDES 202 /* source description */ +#define RTCP_PT_BYE 203 /* bye */ +#define RTCP_PT_APP 204 /* application specific */ +#define RTCP_PT_RTPFB 205 /* transport layer feedback message (RTP/AVPF) */ +#define RTCP_PT_PSFB 206 /* payload-specific feedback message (RTP/AVPF) */ +#define RTCP_PT_XR 207 + + struct rtcp_header { #if G_BYTE_ORDER == G_BIG_ENDIAN unsigned version:2; /**< packet type */ @@ -44,6 +54,9 @@ INLINE bool rtcp_demux_is_rtcp(const str *s) { return true; } - +INLINE unsigned char rtcp_pt(const str *s) { + struct rtcp_packet *rtcp = (void *) s->s; + return rtcp->header.pt; +} #endif