<p>Friendly Automation <strong>submitted</strong> this change.</p><p><a href="https://gerrit.asterisk.org/c/asterisk/+/14143">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Joshua Colp: Looks good to me, but someone else must approve
  Benjamin Keith Ford: Looks good to me, but someone else must approve
  George Joseph: Looks good to me, approved
  Friendly Automation: Approved for Submit

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">chan_pjsip: digit_begin - constant DTMF tone if RTP is not setup yet<br><br>If chan_pjsip is configured for DTMF_RFC_4733, and the core triggers a<br>digit begin before media, or rtp has been setup then it's possible the<br>outgoing channel will hear a constant DTMF tone upon answering.<br><br>This happens because when there is no media, or rtp chan_pjsip notifies<br>the core to initiate inband DTMF. However, upon digit end if media, and<br>rtp become available then chan_pjsip does not notify the core to stop<br>inband DTMF. Thus the tone continues playing.<br><br>This patch makes it so chan_pjsip only notifies the core to start<br>inband DTMF in only the required cases. Now if there is no media, or<br>rtp availabe upon digit begin chan_pjsip does nothing, but tells the<br>core it handled it.<br><br>ASTERISK-28817 #close<br><br>Change-Id: I0dbea9fff444a2595fb18c64b89653e90d2f6eb5<br>---<br>M channels/chan_pjsip.c<br>1 file changed, 18 insertions(+), 15 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/channels/chan_pjsip.c b/channels/chan_pjsip.c</span><br><span>index 15d61c0..04dd200 100644</span><br><span>--- a/channels/chan_pjsip.c</span><br><span>+++ b/channels/chan_pjsip.c</span><br><span>@@ -2169,20 +2169,23 @@</span><br><span> {</span><br><span>       struct ast_sip_channel_pvt *channel = ast_channel_tech_pvt(chan);</span><br><span>    struct ast_sip_session_media *media;</span><br><span style="color: hsl(0, 100%, 40%);">-    int res = 0;</span><br><span> </span><br><span>     media = channel->session->active_media_state->default_session[AST_MEDIA_TYPE_AUDIO];</span><br><span> </span><br><span>    switch (channel->session->dtmf) {</span><br><span>      case AST_SIP_DTMF_RFC_4733:</span><br><span>          if (!media || !media->rtp) {</span><br><span style="color: hsl(0, 100%, 40%);">-                 return -1;</span><br><span style="color: hsl(120, 100%, 40%);">+                    return 0;</span><br><span>            }</span><br><span> </span><br><span>                ast_rtp_instance_dtmf_begin(media->rtp, digit);</span><br><span>           break;</span><br><span>       case AST_SIP_DTMF_AUTO:</span><br><span style="color: hsl(0, 100%, 40%);">-         if (!media || !media->rtp || (ast_rtp_instance_dtmf_mode_get(media->rtp) == AST_RTP_DTMF_MODE_INBAND)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                if (!media || !media->rtp) {</span><br><span style="color: hsl(120, 100%, 40%);">+                       return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+           if (ast_rtp_instance_dtmf_mode_get(media->rtp) == AST_RTP_DTMF_MODE_INBAND) {</span><br><span>                     return -1;</span><br><span>           }</span><br><span> </span><br><span>@@ -2197,13 +2200,12 @@</span><br><span>      case AST_SIP_DTMF_NONE:</span><br><span>              break;</span><br><span>       case AST_SIP_DTMF_INBAND:</span><br><span style="color: hsl(0, 100%, 40%);">-               res = -1;</span><br><span style="color: hsl(0, 100%, 40%);">-               break;</span><br><span style="color: hsl(120, 100%, 40%);">+                return -1;</span><br><span>   default:</span><br><span>             break;</span><br><span>       }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   return res;</span><br><span style="color: hsl(120, 100%, 40%);">+   return 0;</span><br><span> }</span><br><span> </span><br><span> struct info_dtmf_data {</span><br><span>@@ -2290,7 +2292,6 @@</span><br><span> {</span><br><span>   struct ast_sip_channel_pvt *channel = ast_channel_tech_pvt(ast);</span><br><span>     struct ast_sip_session_media *media;</span><br><span style="color: hsl(0, 100%, 40%);">-    int res = 0;</span><br><span> </span><br><span>     if (!channel || !channel->session) {</span><br><span>              /* This happens when the channel is hungup while a DTMF digit is playing. See ASTERISK-28086 */</span><br><span>@@ -2304,8 +2305,9 @@</span><br><span>      case AST_SIP_DTMF_AUTO_INFO:</span><br><span>         {</span><br><span>            if (!media || !media->rtp) {</span><br><span style="color: hsl(0, 100%, 40%);">-                 return -1;</span><br><span style="color: hsl(120, 100%, 40%);">+                    return 0;</span><br><span>            }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>          if (ast_rtp_instance_dtmf_mode_get(media->rtp) != AST_RTP_DTMF_MODE_NONE) {</span><br><span>                       ast_debug(3, "Told to send end of digit on Auto-Info channel %s RFC4733 negotiated so using it.\n", ast_channel_name(ast));</span><br><span>                        ast_rtp_instance_dtmf_end_with_duration(media->rtp, digit, duration);</span><br><span>@@ -2343,28 +2345,29 @@</span><br><span>   }</span><br><span>    case AST_SIP_DTMF_RFC_4733:</span><br><span>          if (!media || !media->rtp) {</span><br><span style="color: hsl(0, 100%, 40%);">-                 return -1;</span><br><span style="color: hsl(120, 100%, 40%);">+                    return 0;</span><br><span>            }</span><br><span> </span><br><span>                ast_rtp_instance_dtmf_end_with_duration(media->rtp, digit, duration);</span><br><span>             break;</span><br><span>       case AST_SIP_DTMF_AUTO:</span><br><span style="color: hsl(0, 100%, 40%);">-         if (!media || !media->rtp || (ast_rtp_instance_dtmf_mode_get(media->rtp) == AST_RTP_DTMF_MODE_INBAND)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                if (!media || !media->rtp) {</span><br><span style="color: hsl(120, 100%, 40%);">+                       return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+           if (ast_rtp_instance_dtmf_mode_get(media->rtp) == AST_RTP_DTMF_MODE_INBAND) {</span><br><span>                      return -1;</span><br><span>          }</span><br><span> </span><br><span>                ast_rtp_instance_dtmf_end_with_duration(media->rtp, digit, duration);</span><br><span>             break;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>       case AST_SIP_DTMF_NONE:</span><br><span>              break;</span><br><span>       case AST_SIP_DTMF_INBAND:</span><br><span style="color: hsl(0, 100%, 40%);">-               res = -1;</span><br><span style="color: hsl(0, 100%, 40%);">-               break;</span><br><span style="color: hsl(120, 100%, 40%);">+                return -1;</span><br><span>   }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   return res;</span><br><span style="color: hsl(120, 100%, 40%);">+   return 0;</span><br><span> }</span><br><span> </span><br><span> static void update_initial_connected_line(struct ast_sip_session *session)</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.asterisk.org/c/asterisk/+/14143">change 14143</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.asterisk.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.asterisk.org/c/asterisk/+/14143"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: asterisk </div>
<div style="display:none"> Gerrit-Branch: 16 </div>
<div style="display:none"> Gerrit-Change-Id: I0dbea9fff444a2595fb18c64b89653e90d2f6eb5 </div>
<div style="display:none"> Gerrit-Change-Number: 14143 </div>
<div style="display:none"> Gerrit-PatchSet: 2 </div>
<div style="display:none"> Gerrit-Owner: Kevin Harwell <kharwell@digium.com> </div>
<div style="display:none"> Gerrit-Reviewer: Benjamin Keith Ford <bford@digium.com> </div>
<div style="display:none"> Gerrit-Reviewer: Friendly Automation </div>
<div style="display:none"> Gerrit-Reviewer: George Joseph <gjoseph@digium.com> </div>
<div style="display:none"> Gerrit-Reviewer: Joshua Colp <jcolp@sangoma.com> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>