<h1>Project "FreeSWITCH Source" received a push.</h1>

<h2>branch: master updated</h2>
<pre>
       via: 097caed43fa232916146a5bd6b5b7fa264d11841 (commit)
      from: 3d3e634f4bb1d71b1089ce792a8c48a1290527e3 (commit)


</pre>= COMMIT LOG ===========================================================
<div class="highlight"><pre>committer: Anthony Minessale
comments: 
tolerate dtmf where there is no start packet and only end packets

<span style="color: #000080; font-weight: bold">diff --git a/src/switch_rtp.c b/src/switch_rtp.c</span>
<span style="color: #000080; font-weight: bold">index ffc41a7..3432422 100644</span>
<span style="color: #A00000">--- a/src/switch_rtp.c</span>
<span style="color: #00A000">+++ b/src/switch_rtp.c</span>
<span style="color: #800080; font-weight: bold">@@ -126,6 +126,7 @@ struct switch_rtp_rfc2833_data {</span>
         unsigned int out_digit_dur;
         uint16_t in_digit_seq;
         uint32_t in_digit_ts;
<span style="color: #00A000">+        uint32_t last_in_digit_ts;</span>
         uint32_t in_digit_sanity;
         uint32_t in_interleaved;
         uint32_t timestamp_dtmf;
<span style="color: #800080; font-weight: bold">@@ -306,6 +307,7 @@ static handle_rfc2833_result_t handle_rfc2833(switch_rtp_t *rtp_session, switch_</span>
                         switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, &quot;Failed DTMF payload check.\n&quot;);
                         rtp_session-&gt;dtmf_data.last_digit = 0;
                         rtp_session-&gt;dtmf_data.in_digit_ts = 0;
<span style="color: #00A000">+                        rtp_session-&gt;dtmf_data.in_digit_sanity = 0;</span>
                 }
 
                 end = packet[1] &amp; 0x80 ? 1 : 0;
<span style="color: #800080; font-weight: bold">@@ -355,6 +357,15 @@ static handle_rfc2833_result_t handle_rfc2833(switch_rtp_t *rtp_session, switch_</span>
                         }
 
                         if (end) {
<span style="color: #00A000">+                                if (!rtp_session-&gt;dtmf_data.in_digit_ts &amp;&amp; rtp_session-&gt;dtmf_data.last_in_digit_ts != ts) {</span>
<span style="color: #00A000">+#ifdef DEBUG_2833</span>
<span style="color: #00A000">+                                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, &quot;start with end packet %d\n&quot;, ts);</span>
<span style="color: #00A000">+#endif</span>
<span style="color: #00A000">+                                        rtp_session-&gt;dtmf_data.last_in_digit_ts = ts;</span>
<span style="color: #00A000">+                                        rtp_session-&gt;dtmf_data.in_digit_ts = ts;</span>
<span style="color: #00A000">+                                        rtp_session-&gt;dtmf_data.first_digit = key;</span>
<span style="color: #00A000">+                                        rtp_session-&gt;dtmf_data.in_digit_sanity = 2000;</span>
<span style="color: #00A000">+                                }</span>
                                 if (rtp_session-&gt;dtmf_data.in_digit_ts) {
                                         switch_dtmf_t dtmf = { key, duration };
 
<span style="color: #800080; font-weight: bold">@@ -395,7 +406,11 @@ static handle_rfc2833_result_t handle_rfc2833(switch_rtp_t *rtp_session, switch_</span>
                                 }
 
                         } else if (!rtp_session-&gt;dtmf_data.in_digit_ts) {
<span style="color: #00A000">+#ifdef DEBUG_2833</span>
<span style="color: #00A000">+                                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, &quot;start %d\n&quot;, ts);</span>
<span style="color: #00A000">+#endif</span>
                                 rtp_session-&gt;dtmf_data.in_digit_ts = ts;
<span style="color: #00A000">+                                rtp_session-&gt;dtmf_data.last_in_digit_ts = ts;</span>
                                 rtp_session-&gt;dtmf_data.first_digit = key;
                                 rtp_session-&gt;dtmf_data.in_digit_sanity = 2000;
                         }
<span style="color: #800080; font-weight: bold">@@ -2351,7 +2366,7 @@ static void do_flush(switch_rtp_t *rtp_session)</span>
                                         if (bytes &gt; rtp_header_len &amp;&amp; rtp_session-&gt;recv_te &amp;&amp; rtp_session-&gt;recv_msg.header.pt == rtp_session-&gt;recv_te) {
                                                 handle_rfc2833(rtp_session, bytes, &amp;do_cng);
 #ifdef DEBUG_2833
<span style="color: #A00000">-                                                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, &quot;*** RTP packet handled in flush loop ***\n&quot;);</span>
<span style="color: #00A000">+                                                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, &quot;*** RTP packet handled in flush loop %d ***\n&quot;, do_cng);</span>
 #endif
                                         }
 
<span style="color: #800080; font-weight: bold">@@ -2691,7 +2706,7 @@ static int rtp_common_read(switch_rtp_t *rtp_session, switch_payload_t *payload_</span>
                 if (!rtp_session-&gt;timer.interval &amp;&amp; rtp_session-&gt;read_pollfd) {
                         int pt = poll_sec * 1000000;
 
<span style="color: #A00000">-                        if (rtp_session-&gt;dtmf_data.out_digit_dur &gt; 0) {</span>
<span style="color: #00A000">+                        if (rtp_session-&gt;dtmf_data.out_digit_dur &gt; 0 || rtp_session-&gt;dtmf_data.in_digit_sanity) {</span>
                                 pt = 20000;
                         }
                         
<span style="color: #800080; font-weight: bold">@@ -2700,8 +2715,10 @@ static int rtp_common_read(switch_rtp_t *rtp_session, switch_payload_t *payload_</span>
                         }
 
                         poll_status = switch_poll(rtp_session-&gt;read_pollfd, 1, &amp;fdr, pt);
<span style="color: #00A000">+                        do_2833(rtp_session, session);</span>
<span style="color: #00A000">+</span>
                         if (rtp_session-&gt;dtmf_data.out_digit_dur &gt; 0) {
<span style="color: #A00000">-                                do_2833(rtp_session, session);</span>
<span style="color: #00A000">+                                return_cng_frame();</span>
                         }
                 }
 
</pre></div>
========================================================================<pre>

Summary of changes:
 src/switch_rtp.c |   23 ++++++++++++++++++++---
 1 files changed, 20 insertions(+), 3 deletions(-)
</pre>
<p>this email was generated because of /git/your-repo.git/hooks/post-receive by the file /git-core/contrib/hooks/post-receive-email<br />
For more info, see <a href="http://blog.chomperstomp.com/?p=630">http://blog.chomperstomp.com/?p=630</a>
-- <br />
FreeSWITCH Source</p>