]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
chan_sip: Remember SDP negotiation on SIP_CODEC_INBOUND. 95/4695/1
authorAlexander Traud <pabstraud@compuserve.com>
Wed, 4 Jan 2017 11:50:11 +0000 (12:50 +0100)
committerAlexander Traud <pabstraud@compuserve.com>
Wed, 4 Jan 2017 12:02:27 +0000 (06:02 -0600)
After a SIP_CODEC_INBOUND in the dialplan, do not continue with cached formats
but remember the joint format. Cached formats contain default parameters,
often create an empty fmtp line. However, a joint format might have passed
format_get_joint(.) in a res_format_attr_* module (like Opus Codec) and
contain the resulting format parameters from a SDP negotiation.

ASTERISK-26691 #close

Change-Id: I35712d98a793d4c3efdd156cec57deab9014b1dc

channels/chan_sip.c

index d62a811a1116ddb7a1711d78072390190361f4d8..51c17c53830cde821e53f69fc1fb32c9eedeac81 100644 (file)
@@ -7371,6 +7371,12 @@ static void try_suggested_sip_codec(struct sip_pvt *p)
 
                ao2_ref(fmt, -1);
        }
+
+       /* The original joint formats may have contained negotiated parameters (fmtp)
+        * like the Opus Codec or iLBC 20. The cached formats contain the default
+        * parameters, which could be different than the negotiated (joint) result. */
+       ast_format_cap_replace_from_cap(p->jointcaps, original_jointcaps, AST_MEDIA_TYPE_UNKNOWN);
+
        ao2_ref(original_jointcaps, -1);
        return;
  }