]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
res_pjsip_session: Deferred re-INVITE without SDP send a=sendrecv instead of a=sendonly
authorPatrick Verzele <patrick@verzele.be>
Tue, 1 Sep 2020 13:43:46 +0000 (14:43 +0100)
committerJoshua Colp <jcolp@sangoma.com>
Thu, 3 Sep 2020 13:14:37 +0000 (08:14 -0500)
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

index b16be82997f91024c61d3f1e6341390c59f7967e..f4c805d3c04ace1283d1009b266636c5426433e8 100644 (file)
@@ -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);