[asterisk-commits] oej: branch oej/agave-dtmf-duration-asterisk-conf-trunk r363322 - in /team/oe...
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Tue Apr 24 04:24:58 CDT 2012
Author: oej
Date: Tue Apr 24 04:24:53 2012
New Revision: 363322
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=363322
Log:
Trunk port
Modified:
team/oej/agave-dtmf-duration-asterisk-conf-trunk/configs/asterisk.conf.sample
team/oej/agave-dtmf-duration-asterisk-conf-trunk/include/asterisk/options.h
team/oej/agave-dtmf-duration-asterisk-conf-trunk/main/asterisk.c
team/oej/agave-dtmf-duration-asterisk-conf-trunk/main/channel.c
Modified: team/oej/agave-dtmf-duration-asterisk-conf-trunk/configs/asterisk.conf.sample
URL: http://svnview.digium.com/svn/asterisk/team/oej/agave-dtmf-duration-asterisk-conf-trunk/configs/asterisk.conf.sample?view=diff&rev=363322&r1=363321&r2=363322
==============================================================================
--- team/oej/agave-dtmf-duration-asterisk-conf-trunk/configs/asterisk.conf.sample (original)
+++ team/oej/agave-dtmf-duration-asterisk-conf-trunk/configs/asterisk.conf.sample Tue Apr 24 04:24:53 2012
@@ -34,6 +34,7 @@
;autosystemname = yes ; Automatically set systemname to hostname,
; uses 'localhost' on failure, or systemname if
; set.
+;mindtmfduration = 80 ; Set minimum DTMF duration in ms (default 80 ms)
;maxcalls = 10 ; Maximum amount of calls allowed.
;maxload = 0.9 ; Asterisk stops accepting new calls if the
; load average exceed this limit.
Modified: team/oej/agave-dtmf-duration-asterisk-conf-trunk/include/asterisk/options.h
URL: http://svnview.digium.com/svn/asterisk/team/oej/agave-dtmf-duration-asterisk-conf-trunk/include/asterisk/options.h?view=diff&rev=363322&r1=363321&r2=363322
==============================================================================
--- team/oej/agave-dtmf-duration-asterisk-conf-trunk/include/asterisk/options.h (original)
+++ team/oej/agave-dtmf-duration-asterisk-conf-trunk/include/asterisk/options.h Tue Apr 24 04:24:53 2012
@@ -157,6 +157,7 @@
extern int option_maxfiles; /*!< Max number of open file handles (files, sockets) */
extern int option_debug; /*!< Debugging */
extern int option_maxcalls; /*!< Maximum number of simultaneous channels */
+extern int option_dtmfminduration; /*!< Minimum duration of DTMF (channel.c) in ms */
extern double option_maxload;
#if defined(HAVE_SYSINFO)
extern long option_minmemfree; /*!< Minimum amount of free system memory - stop accepting calls if free memory falls below this watermark */
Modified: team/oej/agave-dtmf-duration-asterisk-conf-trunk/main/asterisk.c
URL: http://svnview.digium.com/svn/asterisk/team/oej/agave-dtmf-duration-asterisk-conf-trunk/main/asterisk.c?view=diff&rev=363322&r1=363321&r2=363322
==============================================================================
--- team/oej/agave-dtmf-duration-asterisk-conf-trunk/main/asterisk.c (original)
+++ team/oej/agave-dtmf-duration-asterisk-conf-trunk/main/asterisk.c Tue Apr 24 04:24:53 2012
@@ -157,6 +157,10 @@
#define AST_MAX_CONNECTS 128
#define NUM_MSGS 64
+/*! Minimum allowed DTMF digit length - 80ms */
+#define AST_MIN_DTMF_DURATION 80
+
+
/*! \brief Welcome message when starting a CLI interface */
#define WELCOME_MESSAGE \
ast_verbose("Asterisk %s, Copyright (C) 1999 - 2012 Digium, Inc. and others.\n" \
@@ -182,6 +186,7 @@
double option_maxload; /*!< Max load avg on system */
int option_maxcalls; /*!< Max number of active calls */
int option_maxfiles; /*!< Max number of open file handles (files, sockets) */
+int option_dtmfminduration; /*!< Minimum duration of DTMF. */
#if defined(HAVE_SYSINFO)
long option_minmemfree; /*!< Minimum amount of free system memory - stop accepting calls if free memory falls below this watermark */
#endif
@@ -487,6 +492,7 @@
ast_cli(a->fd, " Internal timing: %s\n", ast_test_flag(&ast_options, AST_OPT_FLAG_INTERNAL_TIMING) ? "Enabled" : "Disabled");
ast_cli(a->fd, " Transmit silence during rec: %s\n", ast_test_flag(&ast_options, AST_OPT_FLAG_TRANSMIT_SILENCE) ? "Enabled" : "Disabled");
ast_cli(a->fd, " Generic PLC: %s\n", ast_test_flag(&ast_options, AST_OPT_FLAG_GENERIC_PLC) ? "Enabled" : "Disabled");
+ ast_cli(a->fd, " Min DTMF duration:: %d\n", option_dtmfminduration);
ast_cli(a->fd, "\n* Subsystems\n");
ast_cli(a->fd, " -------------\n");
@@ -3057,6 +3063,9 @@
unsigned int keydir:1;
} found = { 0, 0 };
+ /* Set default value */
+ option_dtmfminduration = AST_MIN_DTMF_DURATION;
+
if (ast_opt_override_config) {
cfg = ast_config_load2(ast_config_AST_CONFIG_FILE, "" /* core, can't reload */, config_flags);
if (cfg == CONFIG_STATUS_FILEMISSING || cfg == CONFIG_STATUS_FILEUNCHANGED || cfg == CONFIG_STATUS_FILEINVALID)
@@ -3193,6 +3202,10 @@
/* Enable internal timing */
} else if (!strcasecmp(v->name, "internal_timing")) {
ast_set2_flag(&ast_options, ast_true(v->value), AST_OPT_FLAG_INTERNAL_TIMING);
+ } else if (!strcasecmp(v->name, "mindtmfduration")) {
+ if ((sscanf(v->value, "%30d", &option_dtmfminduration) != 1) || (option_dtmfminduration < 0)) {
+ option_dtmfminduration = 80;
+ }
} else if (!strcasecmp(v->name, "maxcalls")) {
if ((sscanf(v->value, "%30d", &option_maxcalls) != 1) || (option_maxcalls < 0)) {
option_maxcalls = 0;
Modified: team/oej/agave-dtmf-duration-asterisk-conf-trunk/main/channel.c
URL: http://svnview.digium.com/svn/asterisk/team/oej/agave-dtmf-duration-asterisk-conf-trunk/main/channel.c?view=diff&rev=363322&r1=363321&r2=363322
==============================================================================
--- team/oej/agave-dtmf-duration-asterisk-conf-trunk/main/channel.c (original)
+++ team/oej/agave-dtmf-duration-asterisk-conf-trunk/main/channel.c Tue Apr 24 04:24:53 2012
@@ -103,9 +103,6 @@
/*! Default amount of time to use when emulating a digit as a begin and end
* 100ms */
#define AST_DEFAULT_EMULATE_DTMF_DURATION 100
-
-/*! Minimum allowed digit length - 80ms */
-#define AST_MIN_DTMF_DURATION 80
/*! Minimum amount of time between the end of the last digit and the beginning
* of a new one - 45ms */
@@ -3835,10 +3832,10 @@
ast_channel_dtmf_digit_to_emulate_set(chan, f->subclass.integer);
ast_channel_dtmf_tv_set(chan, &tv);
if (f->len) {
- if (f->len > AST_MIN_DTMF_DURATION)
+ if (f->len > option_dtmfminduration)
ast_channel_emulate_dtmf_duration_set(chan, f->len);
else
- ast_channel_emulate_dtmf_duration_set(chan, AST_MIN_DTMF_DURATION);
+ ast_channel_emulate_dtmf_duration_set(chan, option_dtmfminduration);
} else
ast_channel_emulate_dtmf_duration_set(chan, AST_DEFAULT_EMULATE_DTMF_DURATION);
ast_log(LOG_DTMF, "DTMF begin emulation of '%c' with duration %u queued on %s\n", f->subclass.integer, ast_channel_emulate_dtmf_duration(chan), ast_channel_name(chan));
@@ -3862,31 +3859,31 @@
/* detect tones that were received on
* the wire with durations shorter than
- * AST_MIN_DTMF_DURATION and set f->len
+ * option_dtmfminduration and set f->len
* to the actual duration of the DTMF
* frames on the wire. This will cause
* dtmf emulation to be triggered later
* on.
*/
- if (ast_tvdiff_ms(now, *ast_channel_dtmf_tv(chan)) < AST_MIN_DTMF_DURATION) {
+ if (ast_tvdiff_ms(now, *ast_channel_dtmf_tv(chan)) < option_dtmfminduration) {
f->len = ast_tvdiff_ms(now, *ast_channel_dtmf_tv(chan));
ast_log(LOG_DTMF, "DTMF end '%c' detected to have actual duration %ld on the wire, emulation will be triggered on %s\n", f->subclass.integer, f->len, ast_channel_name(chan));
}
} else if (!f->len) {
ast_log(LOG_DTMF, "DTMF end accepted without begin '%c' on %s\n", f->subclass.integer, ast_channel_name(chan));
- f->len = AST_MIN_DTMF_DURATION;
+ f->len = option_dtmfminduration;
}
- if (f->len < AST_MIN_DTMF_DURATION && !ast_test_flag(ast_channel_flags(chan), AST_FLAG_END_DTMF_ONLY)) {
- ast_log(LOG_DTMF, "DTMF end '%c' has duration %ld but want minimum %d, emulating on %s\n", f->subclass.integer, f->len, AST_MIN_DTMF_DURATION, ast_channel_name(chan));
+ if (f->len < option_dtmfminduration && !ast_test_flag(ast_channel_flags(chan), AST_FLAG_END_DTMF_ONLY)) {
+ ast_log(LOG_DTMF, "DTMF end '%c' has duration %ld but want minimum %d, emulating on %s\n", f->subclass.integer, f->len, option_dtmfminduration, ast_channel_name(chan));
ast_set_flag(ast_channel_flags(chan), AST_FLAG_EMULATE_DTMF);
ast_channel_dtmf_digit_to_emulate_set(chan, f->subclass.integer);
- ast_channel_emulate_dtmf_duration_set(chan, AST_MIN_DTMF_DURATION - f->len);
+ ast_channel_emulate_dtmf_duration_set(chan, option_dtmfminduration - f->len);
ast_frfree(f);
f = &ast_null_frame;
} else {
ast_log(LOG_DTMF, "DTMF end passthrough '%c' on %s\n", f->subclass.integer, ast_channel_name(chan));
- if (f->len < AST_MIN_DTMF_DURATION) {
- f->len = AST_MIN_DTMF_DURATION;
+ if (f->len < option_dtmfminduration) {
+ f->len = option_dtmfminduration;
}
ast_channel_dtmf_tv_set(chan, &now);
}
More information about the asterisk-commits
mailing list