]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
AST-2021-007 - res_pjsip_session: Don't offer if no channel exists.
authorJoshua C. Colp <jcolp@sangoma.com>
Wed, 28 Apr 2021 12:36:35 +0000 (09:36 -0300)
committerGeorge Joseph <gjoseph@digium.com>
Thu, 22 Jul 2021 18:39:42 +0000 (13:39 -0500)
If a re-INVITE is received after we have sent a BYE request then it
is possible for no channel to be present on the session. If this
occurs we allow PJSIP to produce the offer instead. Since the call
is being hung up if it produces an incorrect offer it doesn't
actually matter. This also ensures that code which produces SDP
does not need to handle if a channel is not present.

ASTERISK-29381

Change-Id: I673cb88c432f38f69b2e0851d55cc57a62236042

res/res_pjsip_session.c

index 3f61b63dcbf2c81f4ab2ad9d46e12a39531e8fcf..b1288b59362c16155baffa8cef48e43e66580f5b 100644 (file)
@@ -5263,6 +5263,16 @@ static void session_inv_on_create_offer(pjsip_inv_session *inv, pjmedia_sdp_sess
        pjmedia_sdp_session *offer;
        int i;
 
+       /* We allow PJSIP to produce an SDP if no channel is present. This may result
+        * in an incorrect SDP occurring, but if no channel is present then we are in
+        * the midst of a BYE and are hanging up. This ensures that all the code to
+        * produce an SDP doesn't need to worry about a channel being present or not,
+        * just in case.
+        */
+       if (!session->channel) {
+               return;
+       }
+
        if (inv->neg) {
                if (pjmedia_sdp_neg_was_answer_remote(inv->neg)) {
                        pjmedia_sdp_neg_get_active_remote(inv->neg, &previous_sdp);