From: Patrick Verzele Date: Tue, 1 Sep 2020 13:43:46 +0000 (+0100) Subject: res_pjsip_session: Deferred re-INVITE without SDP send a=sendrecv instead of a=sendonly X-Git-Tag: 16.14.0-rc1~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ab34417f7ea9cd818a7b801b41da0c534b71c988;p=thirdparty%2Fasterisk.git 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 --- diff --git a/res/res_pjsip_session.c b/res/res_pjsip_session.c index 0f47c925a1..e23559efb1 100644 --- a/res/res_pjsip_session.c +++ b/res/res_pjsip_session.c @@ -2170,11 +2170,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);