From f8fe20eb9f8708479da96862d141826bb651833d Mon Sep 17 00:00:00 2001
From: Patrick Verzele <patrick@verzele.be>
Date: Tue, 1 Sep 2020 14:43:46 +0100
Subject: [PATCH] res_pjsip_session: Deferred re-INVITE without SDP send
 a=sendrecv instead of a=sendonly

Building on ASTERISK-25854. When the device requests hold by sending SDP with attribute recvonly, asterisk places the session in sendonly mode. When the device later requests to resume the call by using a re-INVITE excluding SDP, asterisk needs to change the sendonly mode to sendrecv again.

Change-Id: I60341ce3d87f95869f3bc6dc358bd3e8286477a6
---
 res/res_pjsip_session.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/res/res_pjsip_session.c b/res/res_pjsip_session.c
index 147ebadd63..f07ee38adb 100644
--- a/res/res_pjsip_session.c
+++ b/res/res_pjsip_session.c
@@ -2194,11 +2194,13 @@ static pj_bool_t session_reinvite_on_rx_request(pjsip_rx_data *rdata)
 			pjmedia_sdp_media *m = local->media[i];
 			pjmedia_sdp_attr *recvonly;
 			pjmedia_sdp_attr *inactive;
+			pjmedia_sdp_attr *sendonly;
 
 			recvonly = pjmedia_sdp_attr_find2(m->attr_count, m->attr, "recvonly", NULL);
 			inactive = pjmedia_sdp_attr_find2(m->attr_count, m->attr, "inactive", NULL);
-			if (recvonly || inactive) {
-				pjmedia_sdp_attr *to_remove = recvonly ?: inactive;
+			sendonly = pjmedia_sdp_attr_find2(m->attr_count, m->attr, "sendonly", NULL);
+			if (recvonly || inactive || sendonly) {
+				pjmedia_sdp_attr *to_remove = recvonly ?: inactive ?: sendonly;
 				pjmedia_sdp_attr *sendrecv;
 
 				pjmedia_sdp_attr_remove(&m->attr_count, m->attr, to_remove);
-- 
GitLab