From 34750d2068c6b3c230d6fa0762e553ee1d7b28ed Mon Sep 17 00:00:00 2001
From: "Joshua C. Colp" <jcolp@sangoma.com>
Date: Thu, 19 Mar 2020 15:34:02 -0300
Subject: [PATCH] res_pjsip_sdp_rtp: Only do hold/unhold on default audio
 stream.

When examining a stream to determine hold/unhold information we
only care about the default audio stream. Other streams aren't
used for hold/unhold.

ASTERISK-28784

Change-Id: I7a1f10f07822c4aee1f98a38b9628849b578afe4
---
 res/res_pjsip_sdp_rtp.c | 22 ++++++++++++----------
 1 file changed, 12 insertions(+), 10 deletions(-)

diff --git a/res/res_pjsip_sdp_rtp.c b/res/res_pjsip_sdp_rtp.c
index 7514bff0c2..bc60d4171d 100644
--- a/res/res_pjsip_sdp_rtp.c
+++ b/res/res_pjsip_sdp_rtp.c
@@ -1488,18 +1488,20 @@ static int negotiate_incoming_sdp_stream(struct ast_sip_session *session,
 	/* If ICE support is enabled find all the needed attributes */
 	check_ice_support(session, session_media, stream);
 
-	/* Check if incomming SDP is changing the remotely held state */
-	if (ast_sockaddr_isnull(addrs) ||
-		ast_sockaddr_is_any(addrs) ||
-		pjmedia_sdp_media_find_attr2(stream, "sendonly", NULL) ||
-		pjmedia_sdp_media_find_attr2(stream, "inactive", NULL)) {
-		if (!session_media->remotely_held) {
-			session_media->remotely_held = 1;
+	if (ast_sip_session_is_pending_stream_default(session, asterisk_stream) && media_type == AST_MEDIA_TYPE_AUDIO) {
+		/* Check if incomming SDP is changing the remotely held state */
+		if (ast_sockaddr_isnull(addrs) ||
+			ast_sockaddr_is_any(addrs) ||
+			pjmedia_sdp_media_find_attr2(stream, "sendonly", NULL) ||
+			pjmedia_sdp_media_find_attr2(stream, "inactive", NULL)) {
+			if (!session_media->remotely_held) {
+				session_media->remotely_held = 1;
+				session_media->remotely_held_changed = 1;
+			}
+		} else if (session_media->remotely_held) {
+			session_media->remotely_held = 0;
 			session_media->remotely_held_changed = 1;
 		}
-	} else if (session_media->remotely_held) {
-		session_media->remotely_held = 0;
-		session_media->remotely_held_changed = 1;
 	}
 
 	if (apply_cap_to_bundled(session_media, session_media_transport, asterisk_stream,
-- 
GitLab