]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
res_pjsip_sdp_rtp: wrong bridge chosen when the DTMF mode is not compatible
authorKevin Harwell <kharwell@digium.com>
Thu, 18 Dec 2014 15:55:03 +0000 (15:55 +0000)
committerKevin Harwell <kharwell@digium.com>
Thu, 18 Dec 2014 15:55:03 +0000 (15:55 +0000)
A native rtp bridge was being chosen (it shouldn't have been) when using two
pjsip channels with incompatible DTMF modes.  This patch sets the rtp instance
property, AST_RTP_PROPERTY_DTMF, for the appropriate DTMF mode(s) for pjsip.
It was not being set before, meaning all DTMF modes for pjsip were being treated
as compatible, thus native bridging would be chosen as the bridge type when it
shouldn't have been.

ASTERISK-24459 #close
Reported by: Yaniv Simhi
Review: https://reviewboard.asterisk.org/r/4265/
........

Merged revisions 429763 from http://svn.asterisk.org/svn/asterisk/branches/13

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429764 65c4cc65-6c06-0410-ace0-fbb531ad65f3

res/res_pjsip_sdp_rtp.c

index ec1141a9486dba18330880b2c68063cf0aeb1a80..4077caad36bc340cc6e2254f5d9db300e48b9535 100644 (file)
@@ -119,16 +119,13 @@ static int create_rtp(struct ast_sip_session *session, struct ast_sip_session_me
        ast_rtp_instance_set_prop(session_media->rtp, AST_RTP_PROPERTY_RTCP, 1);
        ast_rtp_instance_set_prop(session_media->rtp, AST_RTP_PROPERTY_NAT, session->endpoint->media.rtp.symmetric);
 
-       if (session->endpoint->dtmf == AST_SIP_DTMF_INBAND) {
-               ast_rtp_instance_dtmf_mode_set(session_media->rtp, AST_RTP_DTMF_MODE_INBAND);
-       }
-
        if (!session->endpoint->media.rtp.ice_support && (ice = ast_rtp_instance_get_ice(session_media->rtp))) {
                ice->stop(session_media->rtp);
        }
 
        if (session->endpoint->dtmf == AST_SIP_DTMF_RFC_4733) {
                ast_rtp_instance_dtmf_mode_set(session_media->rtp, AST_RTP_DTMF_MODE_RFC2833);
+               ast_rtp_instance_set_prop(session_media->rtp, AST_RTP_PROPERTY_DTMF, 1);
        } else if (session->endpoint->dtmf == AST_SIP_DTMF_INBAND) {
                ast_rtp_instance_dtmf_mode_set(session_media->rtp, AST_RTP_DTMF_MODE_INBAND);
        }