<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[Freeswitch-trunk][14893] </title>
</head>
<body>
<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<div id="header">FreeSWITCH Subversion</div>
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://fisheye.freeswitch.org/changelog/FreeSWITCH?cs=14893">14893</a></dd>
<dt>Author</dt> <dd>brian</dd>
<dt>Date</dt> <dd>2009-09-16 16:24:22 -0500 (Wed, 16 Sep 2009)</dd>
</dl>
<h3>Log Message</h3>
<pre> <a href="http://jira.freeswitch.org/browse/FSCORE-442">FSCORE-442</a> </pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#freeswitchtrunkconfautoload_configsswitchconfxml">freeswitch/trunk/conf/autoload_configs/switch.conf.xml</a></li>
<li><a href="#freeswitchtrunksrcincludeprivateswitch_core_pvth">freeswitch/trunk/src/include/private/switch_core_pvt.h</a></li>
<li><a href="#freeswitchtrunksrcincludeswitch_coreh">freeswitch/trunk/src/include/switch_core.h</a></li>
<li><a href="#freeswitchtrunksrcincludeswitch_typesh">freeswitch/trunk/src/include/switch_types.h</a></li>
<li><a href="#freeswitchtrunksrcmodapplicationsmod_commandsmod_commandsc">freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c</a></li>
<li><a href="#freeswitchtrunksrcmodendpointsmod_sofiasofiac">freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c</a></li>
<li><a href="#freeswitchtrunksrcmodlanguagesmod_managedfreeswitch_wrapcxx">freeswitch/trunk/src/mod/languages/mod_managed/freeswitch_wrap.cxx</a></li>
<li><a href="#freeswitchtrunksrcmodlanguagesmod_managedmanagedswigcs">freeswitch/trunk/src/mod/languages/mod_managed/managed/swig.cs</a></li>
<li><a href="#freeswitchtrunksrcmodlanguagesmod_perlmod_perl_wrapcpp">freeswitch/trunk/src/mod/languages/mod_perl/mod_perl_wrap.cpp</a></li>
<li><a href="#freeswitchtrunksrcswitch_channelc">freeswitch/trunk/src/switch_channel.c</a></li>
<li><a href="#freeswitchtrunksrcswitch_corec">freeswitch/trunk/src/switch_core.c</a></li>
<li><a href="#freeswitchtrunksrcswitch_core_ioc">freeswitch/trunk/src/switch_core_io.c</a></li>
<li><a href="#freeswitchtrunksrcswitch_rtpc">freeswitch/trunk/src/switch_rtp.c</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="freeswitchtrunkconfautoload_configsswitchconfxml"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/conf/autoload_configs/switch.conf.xml (14892 => 14893)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/conf/autoload_configs/switch.conf.xml        2009-09-16 21:23:00 UTC (rev 14892)
+++ freeswitch/trunk/conf/autoload_configs/switch.conf.xml        2009-09-16 21:24:22 UTC (rev 14893)
</span><span class="lines">@@ -26,8 +26,25 @@
</span><span class="cx"> <param name="loglevel" value="debug"/>
</span><span class="cx"> <!--Try to catch any crashes that can be recoverable (in the context of a call)-->
</span><span class="cx"> <param name="crash-protection" value="false"/>
</span><ins>+        <!-- The min_dtmf_duration specifies the minimum DTMF duration to use on
+         outgoing events. Events shorter than this will be increased in duration
+                 to match min_dtmf_duration. You cannot configure a dtmf duration on a
+                 profile that is less than this setting. You may increase this value,
+                 but cannot set it lower than 400. This value cannot exceed
+                 max_dtmf_duration. -->
+ <!--<param name="min_dtmf_duration" value="400"/>-->
+        <!-- The max_dtmf_duration caps the playout of a DTMF event at the specified
+         duration. Events exceeding this duration will be truncated to this
+                 duration. You cannot configure a duration on a profile that exceeds
+                 this setting. This setting can be lowered, but cannot exceed 192000.
+                 This setting cannot be set lower than min_dtmf_duration. -->
</ins><span class="cx"> <!--<param name="max_dtmf_duration" value="192000"/>-->
</span><del>- <!--<param name="default_dtmf_duration" value="8000"/>-->
</del><ins>+        <!-- The default_dtmf_duration specifies the DTMF duration to use on
+         originated DTMF events or on events that are received without a
+                 duration specified. This value can be increased or lowered. This
+                 value is lower-bounded by min_dtmf_duration and upper-bounded by
+                 max_dtmf_duration. -->
+ <!--<param name="default_dtmf_duration" value="2000"/>-->
</ins><span class="cx"> <!--
</span><span class="cx"> If you want to send out voicemail notifications via Windows you'll need to change the mailer-app
</span><span class="cx"> variable to the setting below:
</span></span></pre></div>
<a id="freeswitchtrunksrcincludeprivateswitch_core_pvth"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/src/include/private/switch_core_pvt.h (14892 => 14893)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/src/include/private/switch_core_pvt.h        2009-09-16 21:23:00 UTC (rev 14892)
+++ freeswitch/trunk/src/include/private/switch_core_pvt.h        2009-09-16 21:24:22 UTC (rev 14893)
</span><span class="lines">@@ -202,6 +202,7 @@
</span><span class="cx">         char *mailer_app;
</span><span class="cx">         char *mailer_app_args;
</span><span class="cx">         uint32_t max_dtmf_duration;
</span><ins>+        uint32_t min_dtmf_duration;
</ins><span class="cx">         uint32_t default_dtmf_duration;
</span><span class="cx">         switch_frame_t dummy_cng_frame;
</span><span class="cx">         char dummy_data[5];
</span></span></pre></div>
<a id="freeswitchtrunksrcincludeswitch_coreh"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/src/include/switch_core.h (14892 => 14893)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/src/include/switch_core.h        2009-09-16 21:23:00 UTC (rev 14892)
+++ freeswitch/trunk/src/include/switch_core.h        2009-09-16 21:24:22 UTC (rev 14893)
</span><span class="lines">@@ -1890,6 +1890,7 @@
</span><span class="cx"> SWITCH_DECLARE(switch_bool_t) switch_check_network_list_ip_token(const char *ip_str, const char *list_name, const char **token);
</span><span class="cx"> #define switch_check_network_list_ip(_ip_str, _list_name) switch_check_network_list_ip_token(_ip_str, _list_name, NULL)
</span><span class="cx"> SWITCH_DECLARE(void) switch_time_set_monotonic(switch_bool_t enable);
</span><ins>+SWITCH_DECLARE(uint32_t) switch_core_min_dtmf_duration(uint32_t duration);
</ins><span class="cx"> SWITCH_DECLARE(uint32_t) switch_core_max_dtmf_duration(uint32_t duration);
</span><span class="cx"> SWITCH_DECLARE(uint32_t) switch_core_default_dtmf_duration(uint32_t duration);
</span><span class="cx"> SWITCH_DECLARE(switch_status_t) switch_console_set_complete(const char *string);
</span></span></pre></div>
<a id="freeswitchtrunksrcincludeswitch_typesh"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/src/include/switch_types.h (14892 => 14893)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/src/include/switch_types.h        2009-09-16 21:23:00 UTC (rev 14892)
+++ freeswitch/trunk/src/include/switch_types.h        2009-09-16 21:24:22 UTC (rev 14893)
</span><span class="lines">@@ -102,6 +102,7 @@
</span><span class="cx"> #define SWITCH_SEQ_CLEARSCR SWITCH_SEQ_ESC SWITCH_SEQ_CLEARSCR_CHAR SWITCH_SEQ_HOME
</span><span class="cx"> #endif
</span><span class="cx"> #define SWITCH_DEFAULT_DTMF_DURATION 2000
</span><ins>+#define SWITCH_MIN_DTMF_DURATION 400
</ins><span class="cx"> #define SWITCH_MAX_DTMF_DURATION 192000
</span><span class="cx"> #define SWITCH_DEFAULT_DIR_PERMS SWITCH_FPROT_UREAD | SWITCH_FPROT_UWRITE | SWITCH_FPROT_UEXECUTE | SWITCH_FPROT_GREAD | SWITCH_FPROT_GEXECUTE
</span><span class="cx"> #ifdef WIN32
</span><span class="lines">@@ -1371,6 +1372,7 @@
</span><span class="cx">         SCSC_MAX_SESSIONS,
</span><span class="cx">         SCSC_SYNC_CLOCK,
</span><span class="cx">         SCSC_MAX_DTMF_DURATION,
</span><ins>+        SCSC_MIN_DTMF_DURATION,
</ins><span class="cx">         SCSC_DEFAULT_DTMF_DURATION,
</span><span class="cx">         SCSC_SHUTDOWN_ELEGANT,
</span><span class="cx">         SCSC_SHUTDOWN_ASAP,
</span></span></pre></div>
<a id="freeswitchtrunksrcmodapplicationsmod_commandsmod_commandsc"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c (14892 => 14893)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c        2009-09-16 21:23:00 UTC (rev 14892)
+++ freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c        2009-09-16 21:24:22 UTC (rev 14893)
</span><span class="lines">@@ -1242,7 +1242,7 @@
</span><span class="cx">         return SWITCH_STATUS_SUCCESS;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-#define CTL_SYNTAX "[send_sighup|hupall|pause|resume|shutdown [cancel|elegant|asap|restart]|sps|sync_clock|reclaim_mem|max_sessions|max_dtmf_duration [num]|loglevel [level]]"
</del><ins>+#define CTL_SYNTAX "[send_sighup|hupall|pause|resume|shutdown [cancel|elegant|asap|restart]|sps|sync_clock|reclaim_mem|max_sessions|min_dtmf_duration [num]|max_dtmf_duration [num]|default_dtmf_duration [num]|loglevel [level]]"
</ins><span class="cx"> SWITCH_STANDARD_API(ctl_function)
</span><span class="cx"> {
</span><span class="cx">         int argc;
</span><span class="lines">@@ -1311,6 +1311,12 @@
</span><span class="cx">                         }
</span><span class="cx">                         switch_core_session_ctl(SCSC_MAX_DTMF_DURATION, &arg);
</span><span class="cx">                         stream->write_function(stream, "+OK max dtmf duration: %d\n", arg);
</span><ins>+                } else if (!strcasecmp(argv[0], "min_dtmf_duration")) {
+                        if (argc > 1) {
+                                arg = atoi(argv[1]);
+                        }
+                        switch_core_session_ctl(SCSC_MIN_DTMF_DURATION, &arg);
+                        stream->write_function(stream, "+OK min dtmf duration: %d\n", arg);
</ins><span class="cx">                 } else if (!strcasecmp(argv[0], "default_dtmf_duration")) {
</span><span class="cx">                         if (argc > 1) {
</span><span class="cx">                                 arg = atoi(argv[1]);
</span><span class="lines">@@ -3636,6 +3642,8 @@
</span><span class="cx">         switch_console_set_complete("add fsctl reclaim_mem");
</span><span class="cx">         switch_console_set_complete("add fsctl max_sessions");
</span><span class="cx">         switch_console_set_complete("add fsctl max_dtmf_duration");
</span><ins>+        switch_console_set_complete("add fsctl min_dtmf_duration");
+        switch_console_set_complete("add fsctl default_dtmf_duration");
</ins><span class="cx">         SWITCH_ADD_API(commands_api_interface, "help", "Show help for all the api commands", help_function, "");
</span><span class="cx">         SWITCH_ADD_API(commands_api_interface, "version", "Show version of the switch", version_function, "");
</span><span class="cx">         SWITCH_ADD_API(commands_api_interface, "sched_hangup", "Schedule a running call to hangup", sched_hangup_function, SCHED_HANGUP_SYNTAX);
</span></span></pre></div>
<a id="freeswitchtrunksrcmodendpointsmod_sofiasofiac"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c (14892 => 14893)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c        2009-09-16 21:23:00 UTC (rev 14892)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c        2009-09-16 21:24:22 UTC (rev 14893)
</span><span class="lines">@@ -1926,7 +1926,7 @@
</span><span class="cx">                                                 profile->challenge_realm = switch_core_strdup(profile->pool, val);
</span><span class="cx">                                         } else if (!strcasecmp(var, "dtmf-duration")) {
</span><span class="cx">                                                 int dur = atoi(val);
</span><del>-                                                if (dur > 10 && dur < 8000) {
</del><ins>+                                                if (dur > switch_core_min_dtmf_duration(0) && dur < switch_core_max_dtmf_duration(0)) {
</ins><span class="cx">                                                         profile->dtmf_duration = dur;
</span><span class="cx">                                                 } else {
</span><span class="cx">                                                         profile->dtmf_duration = SWITCH_DEFAULT_DTMF_DURATION;
</span><span class="lines">@@ -2598,7 +2598,7 @@
</span><span class="cx">                                                 profile->challenge_realm = switch_core_strdup(profile->pool, val);
</span><span class="cx">                                         } else if (!strcasecmp(var, "dtmf-duration")) {
</span><span class="cx">                                                 int dur = atoi(val);
</span><del>-                                                if (dur > 10 && dur < 8000) {
</del><ins>+                                                if (dur > switch_core_min_dtmf_duration(0) && dur < switch_core_max_dtmf_duration(0)) {
</ins><span class="cx">                                                         profile->dtmf_duration = dur;
</span><span class="cx">                                                 } else {
</span><span class="cx">                                                         profile->dtmf_duration = SWITCH_DEFAULT_DTMF_DURATION;
</span></span></pre></div>
<a id="freeswitchtrunksrcmodlanguagesmod_managedfreeswitch_wrapcxx"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/src/mod/languages/mod_managed/freeswitch_wrap.cxx (14892 => 14893)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/src/mod/languages/mod_managed/freeswitch_wrap.cxx        2009-09-16 21:23:00 UTC (rev 14892)
+++ freeswitch/trunk/src/mod/languages/mod_managed/freeswitch_wrap.cxx        2009-09-16 21:24:22 UTC (rev 14893)
</span><span class="lines">@@ -894,6 +894,17 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx">
</span><ins>+SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_MIN_DTMF_DURATION_get() {
+ int jresult ;
+ int result;
+
+ result = (int) 400;
+
+ jresult = result;
+ return jresult;
+}
+
+
</ins><span class="cx"> SWIGEXPORT int SWIGSTDCALL CSharp_SWITCH_MAX_DTMF_DURATION_get() {
</span><span class="cx"> int jresult ;
</span><span class="cx"> int result;
</span><span class="lines">@@ -6732,6 +6743,62 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx">
</span><ins>+SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_set_read_impl(void * jarg1, void * jarg2) {
+ int jresult ;
+ switch_core_session_t *arg1 = (switch_core_session_t *) 0 ;
+ switch_codec_implementation_t *arg2 = (switch_codec_implementation_t *) 0 ;
+ switch_status_t result;
+
+ arg1 = (switch_core_session_t *)jarg1;
+ arg2 = (switch_codec_implementation_t *)jarg2;
+ result = (switch_status_t)switch_core_session_set_read_impl(arg1,(switch_codec_implementation const *)arg2);
+ jresult = result;
+ return jresult;
+}
+
+
+SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_set_write_impl(void * jarg1, void * jarg2) {
+ int jresult ;
+ switch_core_session_t *arg1 = (switch_core_session_t *) 0 ;
+ switch_codec_implementation_t *arg2 = (switch_codec_implementation_t *) 0 ;
+ switch_status_t result;
+
+ arg1 = (switch_core_session_t *)jarg1;
+ arg2 = (switch_codec_implementation_t *)jarg2;
+ result = (switch_status_t)switch_core_session_set_write_impl(arg1,(switch_codec_implementation const *)arg2);
+ jresult = result;
+ return jresult;
+}
+
+
+SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_set_video_read_impl(void * jarg1, void * jarg2) {
+ int jresult ;
+ switch_core_session_t *arg1 = (switch_core_session_t *) 0 ;
+ switch_codec_implementation_t *arg2 = (switch_codec_implementation_t *) 0 ;
+ switch_status_t result;
+
+ arg1 = (switch_core_session_t *)jarg1;
+ arg2 = (switch_codec_implementation_t *)jarg2;
+ result = (switch_status_t)switch_core_session_set_video_read_impl(arg1,(switch_codec_implementation const *)arg2);
+ jresult = result;
+ return jresult;
+}
+
+
+SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_set_video_write_impl(void * jarg1, void * jarg2) {
+ int jresult ;
+ switch_core_session_t *arg1 = (switch_core_session_t *) 0 ;
+ switch_codec_implementation_t *arg2 = (switch_codec_implementation_t *) 0 ;
+ switch_status_t result;
+
+ arg1 = (switch_core_session_t *)jarg1;
+ arg2 = (switch_codec_implementation_t *)jarg2;
+ result = (switch_status_t)switch_core_session_set_video_write_impl(arg1,(switch_codec_implementation const *)arg2);
+ jresult = result;
+ return jresult;
+}
+
+
</ins><span class="cx"> SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_reset(void * jarg1, int jarg2, int jarg3) {
</span><span class="cx"> switch_core_session_t *arg1 = (switch_core_session_t *) 0 ;
</span><span class="cx"> switch_bool_t arg2 ;
</span><span class="lines">@@ -8348,6 +8415,18 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx">
</span><ins>+SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_core_min_dtmf_duration(unsigned long jarg1) {
+ unsigned long jresult ;
+ uint32_t arg1 ;
+ uint32_t result;
+
+ arg1 = (uint32_t)jarg1;
+ result = (uint32_t)switch_core_min_dtmf_duration(arg1);
+ jresult = (unsigned long)result;
+ return jresult;
+}
+
+
</ins><span class="cx"> SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_core_max_dtmf_duration(unsigned long jarg1) {
</span><span class="cx"> unsigned long jresult ;
</span><span class="cx"> uint32_t arg1 ;
</span></span></pre></div>
<a id="freeswitchtrunksrcmodlanguagesmod_managedmanagedswigcs"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/src/mod/languages/mod_managed/managed/swig.cs (14892 => 14893)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/src/mod/languages/mod_managed/managed/swig.cs        2009-09-16 21:23:00 UTC (rev 14892)
+++ freeswitch/trunk/src/mod/languages/mod_managed/managed/swig.cs        2009-09-16 21:24:22 UTC (rev 14893)
</span><span class="lines">@@ -1399,6 +1399,26 @@
</span><span class="cx"> return ret;
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+ public static switch_status_t switch_core_session_set_read_impl(SWIGTYPE_p_switch_core_session session, switch_codec_implementation impp) {
+ switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_set_read_impl(SWIGTYPE_p_switch_core_session.getCPtr(session), switch_codec_implementation.getCPtr(impp));
+ return ret;
+ }
+
+ public static switch_status_t switch_core_session_set_write_impl(SWIGTYPE_p_switch_core_session session, switch_codec_implementation impp) {
+ switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_set_write_impl(SWIGTYPE_p_switch_core_session.getCPtr(session), switch_codec_implementation.getCPtr(impp));
+ return ret;
+ }
+
+ public static switch_status_t switch_core_session_set_video_read_impl(SWIGTYPE_p_switch_core_session session, switch_codec_implementation impp) {
+ switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_set_video_read_impl(SWIGTYPE_p_switch_core_session.getCPtr(session), switch_codec_implementation.getCPtr(impp));
+ return ret;
+ }
+
+ public static switch_status_t switch_core_session_set_video_write_impl(SWIGTYPE_p_switch_core_session session, switch_codec_implementation impp) {
+ switch_status_t ret = (switch_status_t)freeswitchPINVOKE.switch_core_session_set_video_write_impl(SWIGTYPE_p_switch_core_session.getCPtr(session), switch_codec_implementation.getCPtr(impp));
+ return ret;
+ }
+
</ins><span class="cx"> public static void switch_core_session_reset(SWIGTYPE_p_switch_core_session session, switch_bool_t flush_dtmf, switch_bool_t reset_read_codec) {
</span><span class="cx"> freeswitchPINVOKE.switch_core_session_reset(SWIGTYPE_p_switch_core_session.getCPtr(session), (int)flush_dtmf, (int)reset_read_codec);
</span><span class="cx"> }
</span><span class="lines">@@ -1977,6 +1997,11 @@
</span><span class="cx"> freeswitchPINVOKE.switch_time_set_monotonic((int)enable);
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+ public static uint switch_core_min_dtmf_duration(uint duration) {
+ uint ret = freeswitchPINVOKE.switch_core_min_dtmf_duration(duration);
+ return ret;
+ }
+
</ins><span class="cx"> public static uint switch_core_max_dtmf_duration(uint duration) {
</span><span class="cx"> uint ret = freeswitchPINVOKE.switch_core_max_dtmf_duration(duration);
</span><span class="cx"> return ret;
</span><span class="lines">@@ -4280,6 +4305,7 @@
</span><span class="cx"> public static readonly string SWITCH_SEQ_CLEARLINEEND = freeswitchPINVOKE.SWITCH_SEQ_CLEARLINEEND_get();
</span><span class="cx"> public static readonly string SWITCH_SEQ_CLEARSCR = freeswitchPINVOKE.SWITCH_SEQ_CLEARSCR_get();
</span><span class="cx"> public static readonly int SWITCH_DEFAULT_DTMF_DURATION = freeswitchPINVOKE.SWITCH_DEFAULT_DTMF_DURATION_get();
</span><ins>+ public static readonly int SWITCH_MIN_DTMF_DURATION = freeswitchPINVOKE.SWITCH_MIN_DTMF_DURATION_get();
</ins><span class="cx"> public static readonly int SWITCH_MAX_DTMF_DURATION = freeswitchPINVOKE.SWITCH_MAX_DTMF_DURATION_get();
</span><span class="cx"> public static readonly string SWITCH_PATH_SEPARATOR = freeswitchPINVOKE.SWITCH_PATH_SEPARATOR_get();
</span><span class="cx"> public static readonly string SWITCH_URL_SEPARATOR = freeswitchPINVOKE.SWITCH_URL_SEPARATOR_get();
</span><span class="lines">@@ -4753,6 +4779,9 @@
</span><span class="cx"> [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_DEFAULT_DTMF_DURATION_get")]
</span><span class="cx"> public static extern int SWITCH_DEFAULT_DTMF_DURATION_get();
</span><span class="cx">
</span><ins>+ [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_MIN_DTMF_DURATION_get")]
+ public static extern int SWITCH_MIN_DTMF_DURATION_get();
+
</ins><span class="cx"> [DllImport("mod_managed", EntryPoint="CSharp_SWITCH_MAX_DTMF_DURATION_get")]
</span><span class="cx"> public static extern int SWITCH_MAX_DTMF_DURATION_get();
</span><span class="cx">
</span><span class="lines">@@ -6169,6 +6198,18 @@
</span><span class="cx"> [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_write_video_frame")]
</span><span class="cx"> public static extern int switch_core_session_write_video_frame(HandleRef jarg1, HandleRef jarg2, uint jarg3, int jarg4);
</span><span class="cx">
</span><ins>+ [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_set_read_impl")]
+ public static extern int switch_core_session_set_read_impl(HandleRef jarg1, HandleRef jarg2);
+
+ [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_set_write_impl")]
+ public static extern int switch_core_session_set_write_impl(HandleRef jarg1, HandleRef jarg2);
+
+ [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_set_video_read_impl")]
+ public static extern int switch_core_session_set_video_read_impl(HandleRef jarg1, HandleRef jarg2);
+
+ [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_set_video_write_impl")]
+ public static extern int switch_core_session_set_video_write_impl(HandleRef jarg1, HandleRef jarg2);
+
</ins><span class="cx"> [DllImport("mod_managed", EntryPoint="CSharp_switch_core_session_reset")]
</span><span class="cx"> public static extern void switch_core_session_reset(HandleRef jarg1, int jarg2, int jarg3);
</span><span class="cx">
</span><span class="lines">@@ -6523,6 +6564,9 @@
</span><span class="cx"> [DllImport("mod_managed", EntryPoint="CSharp_switch_time_set_monotonic")]
</span><span class="cx"> public static extern void switch_time_set_monotonic(int jarg1);
</span><span class="cx">
</span><ins>+ [DllImport("mod_managed", EntryPoint="CSharp_switch_core_min_dtmf_duration")]
+ public static extern uint switch_core_min_dtmf_duration(uint jarg1);
+
</ins><span class="cx"> [DllImport("mod_managed", EntryPoint="CSharp_switch_core_max_dtmf_duration")]
</span><span class="cx"> public static extern uint switch_core_max_dtmf_duration(uint jarg1);
</span><span class="cx">
</span><span class="lines">@@ -24486,6 +24530,7 @@
</span><span class="cx"> SCSC_MAX_SESSIONS,
</span><span class="cx"> SCSC_SYNC_CLOCK,
</span><span class="cx"> SCSC_MAX_DTMF_DURATION,
</span><ins>+ SCSC_MIN_DTMF_DURATION,
</ins><span class="cx"> SCSC_DEFAULT_DTMF_DURATION,
</span><span class="cx"> SCSC_SHUTDOWN_ELEGANT,
</span><span class="cx"> SCSC_SHUTDOWN_ASAP,
</span></span></pre></div>
<a id="freeswitchtrunksrcmodlanguagesmod_perlmod_perl_wrapcpp"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/src/mod/languages/mod_perl/mod_perl_wrap.cpp (14892 => 14893)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/src/mod/languages/mod_perl/mod_perl_wrap.cpp        2009-09-16 21:23:00 UTC (rev 14892)
+++ freeswitch/trunk/src/mod/languages/mod_perl/mod_perl_wrap.cpp        2009-09-16 21:24:22 UTC (rev 14893)
</span><span class="lines">@@ -11820,17 +11820,17 @@
</span><span class="cx"> SWIG_TypeClientData(SWIGTYPE_p_IVRMenu, (void*) "freeswitch::IVRMenu");
</span><span class="cx"> SWIG_TypeClientData(SWIGTYPE_p_API, (void*) "freeswitch::API");
</span><span class="cx"> SWIG_TypeClientData(SWIGTYPE_p_input_callback_state, (void*) "freeswitch::input_callback_state_t");
</span><del>- /*@SWIG:/usr/local/share/swig/1.3.35/perl5/perltypemaps.swg,64,%set_constant@*/ do {
</del><ins>+ /*@SWIG:/usr/share/swig/1.3.35/perl5/perltypemaps.swg,64,%set_constant@*/ do {
</ins><span class="cx"> SV *sv = get_sv((char*) SWIG_prefix "S_HUP", TRUE | 0x2 | GV_ADDMULTI);
</span><span class="cx"> sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(S_HUP)));
</span><span class="cx"> SvREADONLY_on(sv);
</span><span class="cx"> } while(0) /*@SWIG@*/;
</span><del>- /*@SWIG:/usr/local/share/swig/1.3.35/perl5/perltypemaps.swg,64,%set_constant@*/ do {
</del><ins>+ /*@SWIG:/usr/share/swig/1.3.35/perl5/perltypemaps.swg,64,%set_constant@*/ do {
</ins><span class="cx"> SV *sv = get_sv((char*) SWIG_prefix "S_FREE", TRUE | 0x2 | GV_ADDMULTI);
</span><span class="cx"> sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(S_FREE)));
</span><span class="cx"> SvREADONLY_on(sv);
</span><span class="cx"> } while(0) /*@SWIG@*/;
</span><del>- /*@SWIG:/usr/local/share/swig/1.3.35/perl5/perltypemaps.swg,64,%set_constant@*/ do {
</del><ins>+ /*@SWIG:/usr/share/swig/1.3.35/perl5/perltypemaps.swg,64,%set_constant@*/ do {
</ins><span class="cx"> SV *sv = get_sv((char*) SWIG_prefix "S_RDLOCK", TRUE | 0x2 | GV_ADDMULTI);
</span><span class="cx"> sv_setsv(sv, SWIG_From_int SWIG_PERL_CALL_ARGS_1(static_cast< int >(S_RDLOCK)));
</span><span class="cx"> SvREADONLY_on(sv);
</span></span></pre></div>
<a id="freeswitchtrunksrcswitch_channelc"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/src/switch_channel.c (14892 => 14893)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/src/switch_channel.c        2009-09-16 21:23:00 UTC (rev 14892)
+++ freeswitch/trunk/src/switch_channel.c        2009-09-16 21:24:22 UTC (rev 14893)
</span><span class="lines">@@ -276,6 +276,10 @@
</span><span class="cx">                         switch_log_printf(SWITCH_CHANNEL_CHANNEL_LOG(channel), SWITCH_LOG_WARNING, "%s EXCESSIVE DTMF DIGIT [%c] LEN [%d]\n",
</span><span class="cx">                                                          switch_channel_get_name(channel), new_dtmf.digit, new_dtmf.duration);
</span><span class="cx">                         new_dtmf.duration = switch_core_max_dtmf_duration(0);
</span><ins>+                } else if (new_dtmf.duration < switch_core_min_dtmf_duration(0)) {
+                        switch_log_printf(SWITCH_CHANNEL_CHANNEL_LOG(channel), SWITCH_LOG_WARNING, "%s SHORT DTMF DIGIT [%c] LEN [%d]\n",
+                                                         switch_channel_get_name(channel), new_dtmf.digit, new_dtmf.duration);
+                        new_dtmf.duration = switch_core_min_dtmf_duration(0);
</ins><span class="cx">                 } else if (!new_dtmf.duration) {
</span><span class="cx">                         new_dtmf.duration = switch_core_default_dtmf_duration(0);
</span><span class="cx">                 }
</span><span class="lines">@@ -333,6 +337,9 @@
</span><span class="cx">                 if (dtmf.duration > switch_core_max_dtmf_duration(0)) {
</span><span class="cx">                         switch_log_printf(SWITCH_CHANNEL_CHANNEL_LOG(channel), SWITCH_LOG_WARNING, "EXCESSIVE DTMF DIGIT LEN %c %d\n", dtmf.digit, dtmf.duration);
</span><span class="cx">                         dtmf.duration = switch_core_max_dtmf_duration(0);
</span><ins>+                } else if (dtmf.duration < switch_core_min_dtmf_duration(0)) {
+                        switch_log_printf(SWITCH_CHANNEL_CHANNEL_LOG(channel), SWITCH_LOG_WARNING, "SHORT DTMF DIGIT LEN %c %d\n", dtmf.digit, dtmf.duration);
+                        dtmf.duration = switch_core_min_dtmf_duration(0);
</ins><span class="cx">                 } else if (!dtmf.duration) {
</span><span class="cx">                         dtmf.duration = switch_core_default_dtmf_duration(0);
</span><span class="cx">                 }
</span><span class="lines">@@ -377,6 +384,10 @@
</span><span class="cx">                         switch_log_printf(SWITCH_CHANNEL_CHANNEL_LOG(channel), SWITCH_LOG_WARNING, "%s EXCESSIVE DTMF DIGIT [%c] LEN [%d]\n",
</span><span class="cx">                                                          switch_channel_get_name(channel), dtmf->digit, dtmf->duration);
</span><span class="cx">                         dtmf->duration = switch_core_max_dtmf_duration(0);
</span><ins>+                } else if (dtmf->duration < switch_core_min_dtmf_duration(0)) {
+                        switch_log_printf(SWITCH_CHANNEL_CHANNEL_LOG(channel), SWITCH_LOG_WARNING, "%s SHORT DTMF DIGIT [%c] LEN [%d]\n",
+                                                         switch_channel_get_name(channel), dtmf->digit, dtmf->duration);
+                        dtmf->duration = switch_core_min_dtmf_duration(0);
</ins><span class="cx">                 } else if (!dtmf->duration) {
</span><span class="cx">                         dtmf->duration = switch_core_default_dtmf_duration(0);
</span><span class="cx">                 }
</span></span></pre></div>
<a id="freeswitchtrunksrcswitch_corec"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/src/switch_core.c (14892 => 14893)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/src/switch_core.c        2009-09-16 21:23:00 UTC (rev 14892)
+++ freeswitch/trunk/src/switch_core.c        2009-09-16 21:24:22 UTC (rev 14893)
</span><span class="lines">@@ -1104,6 +1104,9 @@
</span><span class="cx">                 if (duration > SWITCH_MAX_DTMF_DURATION) {
</span><span class="cx">                         duration = SWITCH_MAX_DTMF_DURATION;
</span><span class="cx">                 }
</span><ins>+                if (duration < SWITCH_MIN_DTMF_DURATION) {
+                        duration = SWITCH_MIN_DTMF_DURATION;
+                }
</ins><span class="cx">                 runtime.max_dtmf_duration = duration;
</span><span class="cx">         }
</span><span class="cx">         return runtime.max_dtmf_duration;
</span><span class="lines">@@ -1112,14 +1115,30 @@
</span><span class="cx"> SWITCH_DECLARE(uint32_t) switch_core_default_dtmf_duration(uint32_t duration)
</span><span class="cx"> {
</span><span class="cx">         if (duration) {
</span><del>-                if (duration < SWITCH_DEFAULT_DTMF_DURATION) {
-                        duration = SWITCH_DEFAULT_DTMF_DURATION;
</del><ins>+                if (duration < SWITCH_MIN_DTMF_DURATION) {
+                        duration = SWITCH_MIN_DTMF_DURATION;
</ins><span class="cx">                 }
</span><ins>+                if (duration > SWITCH_MAX_DTMF_DURATION) {
+                        duration = SWITCH_MAX_DTMF_DURATION;
+                }
</ins><span class="cx">                 runtime.default_dtmf_duration = duration;
</span><span class="cx">         }
</span><span class="cx">         return runtime.default_dtmf_duration;
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+SWITCH_DECLARE(uint32_t) switch_core_min_dtmf_duration(uint32_t duration)
+{
+        if (duration) {
+                if (duration < SWITCH_MIN_DTMF_DURATION) {
+                        duration = SWITCH_MIN_DTMF_DURATION;
+                }
+                if (duration > SWITCH_MAX_DTMF_DURATION) {
+                        duration = SWITCH_MAX_DTMF_DURATION;
+                }
+        }
+        return runtime.min_dtmf_duration;
+}
+
</ins><span class="cx"> static void switch_core_set_serial(void)
</span><span class="cx"> {
</span><span class="cx">         char buf[13] = "";
</span><span class="lines">@@ -1184,6 +1203,7 @@
</span><span class="cx">         runtime.mailer_app_args = "-t";
</span><span class="cx">         runtime.max_dtmf_duration = SWITCH_MAX_DTMF_DURATION;
</span><span class="cx">         runtime.default_dtmf_duration = SWITCH_DEFAULT_DTMF_DURATION;
</span><ins>+        runtime.min_dtmf_duration = SWITCH_MIN_DTMF_DURATION;
</ins><span class="cx">
</span><span class="cx">         /* INIT APR and Create the pool context */
</span><span class="cx">         if (apr_initialize() != SWITCH_STATUS_SUCCESS) {
</span><span class="lines">@@ -1395,6 +1415,11 @@
</span><span class="cx">                                         if (tmp > 0) {
</span><span class="cx">                                                 switch_core_max_dtmf_duration((uint32_t) tmp);
</span><span class="cx">                                         }
</span><ins>+                                } else if (!strcasecmp(var, "min_dtmf_duration") && !switch_strlen_zero(val)) {
+                                        int tmp = atoi(val);
+                                        if (tmp > 0) {
+                                                switch_core_min_dtmf_duration((uint32_t) tmp);
+                                        }
</ins><span class="cx">                                 } else if (!strcasecmp(var, "default_dtmf_duration") && !switch_strlen_zero(val)) {
</span><span class="cx">                                         int tmp = atoi(val);
</span><span class="cx">                                         if (tmp > 0) {
</span><span class="lines">@@ -1610,6 +1635,9 @@
</span><span class="cx">         case SCSC_MAX_DTMF_DURATION:
</span><span class="cx">                 *val = switch_core_max_dtmf_duration(*val);
</span><span class="cx">                 break;
</span><ins>+        case SCSC_MIN_DTMF_DURATION:
+                *val = switch_core_min_dtmf_duration(*val);
+                break;
</ins><span class="cx">         case SCSC_DEFAULT_DTMF_DURATION:
</span><span class="cx">                 *val = switch_core_default_dtmf_duration(*val);
</span><span class="cx">                 break;
</span></span></pre></div>
<a id="freeswitchtrunksrcswitch_core_ioc"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/src/switch_core_io.c (14892 => 14893)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/src/switch_core_io.c        2009-09-16 21:23:00 UTC (rev 14892)
+++ freeswitch/trunk/src/switch_core_io.c        2009-09-16 21:24:22 UTC (rev 14893)
</span><span class="lines">@@ -1102,6 +1102,10 @@
</span><span class="cx">                 switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, "%s EXCESSIVE DTMF DIGIT [%c] LEN [%d]\n",
</span><span class="cx">                                                  switch_channel_get_name(session->channel), new_dtmf.digit, new_dtmf.duration);
</span><span class="cx">                 new_dtmf.duration = switch_core_max_dtmf_duration(0);
</span><ins>+        } else if (new_dtmf.duration < switch_core_min_dtmf_duration(0)) {
+                switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, "%s SHORT DTMF DIGIT [%c] LEN [%d]\n",
+                                                 switch_channel_get_name(session->channel), new_dtmf.digit, new_dtmf.duration);
+                new_dtmf.duration = switch_core_min_dtmf_duration(0);
</ins><span class="cx">         } else if (!new_dtmf.duration) {
</span><span class="cx">                 new_dtmf.duration = switch_core_default_dtmf_duration(0);
</span><span class="cx">         }
</span><span class="lines">@@ -1132,6 +1136,10 @@
</span><span class="cx">                 switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, "%s EXCESSIVE DTMF DIGIT [%c] LEN [%d]\n",
</span><span class="cx">                                                  switch_channel_get_name(session->channel), new_dtmf.digit, new_dtmf.duration);
</span><span class="cx">                 new_dtmf.duration = switch_core_max_dtmf_duration(0);
</span><ins>+        } else if (new_dtmf.duration < switch_core_min_dtmf_duration(0)) {
+                switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, "%s SHORT DTMF DIGIT [%c] LEN [%d]\n",
+                                                 switch_channel_get_name(session->channel), new_dtmf.digit, new_dtmf.duration);
+                new_dtmf.duration = switch_core_min_dtmf_duration(0);
</ins><span class="cx">         } else if (!new_dtmf.duration) {
</span><span class="cx">                 new_dtmf.duration = switch_core_default_dtmf_duration(0);
</span><span class="cx">         }
</span><span class="lines">@@ -1203,6 +1211,10 @@
</span><span class="cx">                         switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, "%s EXCESSIVE DTMF DIGIT [%c] LEN [%d]\n",
</span><span class="cx">                                                          switch_channel_get_name(session->channel), dtmf.digit, dtmf.duration);
</span><span class="cx">                         dtmf.duration = switch_core_max_dtmf_duration(0);
</span><ins>+                } else if (dtmf.duration < switch_core_min_dtmf_duration(0)) {
+                        switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, "%s SHORT DTMF DIGIT [%c] LEN [%d]\n",
+                                                         switch_channel_get_name(session->channel), dtmf.digit, dtmf.duration);
+                        dtmf.duration = switch_core_min_dtmf_duration(0);
</ins><span class="cx">                 } else if (!dtmf.duration) {
</span><span class="cx">                         dtmf.duration = switch_core_default_dtmf_duration(0);
</span><span class="cx">                 }
</span></span></pre></div>
<a id="freeswitchtrunksrcswitch_rtpc"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/src/switch_rtp.c (14892 => 14893)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/src/switch_rtp.c        2009-09-16 21:23:00 UTC (rev 14892)
+++ freeswitch/trunk/src/switch_rtp.c        2009-09-16 21:24:22 UTC (rev 14893)
</span><span class="lines">@@ -2299,8 +2299,8 @@
</span><span class="cx">
</span><span class="cx">         if ((rdigit = malloc(sizeof(*rdigit))) != 0) {
</span><span class="cx">                 *rdigit = *dtmf;
</span><del>-                if (rdigit->duration < switch_core_default_dtmf_duration(0)) {
-                        rdigit->duration = switch_core_default_dtmf_duration(0);
</del><ins>+                if (rdigit->duration < switch_core_min_dtmf_duration(0)) {
+                        rdigit->duration = switch_core_min_dtmf_duration(0);
</ins><span class="cx">                 }
</span><span class="cx">
</span><span class="cx">                 if ((switch_queue_trypush(rtp_session->dtmf_data.dtmf_queue, rdigit)) != SWITCH_STATUS_SUCCESS) {
</span><span class="lines">@@ -2324,8 +2324,8 @@
</span><span class="cx">
</span><span class="cx">         if ((rdigit = malloc(sizeof(*rdigit))) != 0) {
</span><span class="cx">                 *rdigit = *dtmf;
</span><del>-                if (rdigit->duration < switch_core_default_dtmf_duration(0)) {
-                        rdigit->duration = switch_core_default_dtmf_duration(0);
</del><ins>+                if (rdigit->duration < switch_core_min_dtmf_duration(0)) {
+                        rdigit->duration = switch_core_min_dtmf_duration(0);
</ins><span class="cx">                 }
</span><span class="cx">
</span><span class="cx">                 if ((switch_queue_trypush(rtp_session->dtmf_data.dtmf_inqueue, rdigit)) != SWITCH_STATUS_SUCCESS) {
</span></span></pre>
</div>
</div>
<div id="footer">See you at ClueCon</div>
</body>
</html>