diff --git a/configs/rtp.conf.sample b/configs/rtp.conf.sample index a9a455c9226d115f901ed06355bc37058c4eb81d..fa16f0d93ffab45d4931f3c541f5901a1d51746f 100755 --- a/configs/rtp.conf.sample +++ b/configs/rtp.conf.sample @@ -13,3 +13,8 @@ rtpend=20000 ; Whether to enable or disable UDP checksums on RTP traffic ; ;rtpchecksums=no +; +; The amount of time a DTMF digit with no 'end' marker should be +; allowed to continue (in 'samples', 1/8000 of a second) +; +;dtmftimeout=3000 diff --git a/rtp.c b/rtp.c index 39b3745a37acffaee9b1f840a010b12e6e91cafb..2893ceff3d219f6a5171c20e44667989143eebf9 100755 --- a/rtp.c +++ b/rtp.c @@ -58,7 +58,9 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #define RTP_MTU 1200 -static int dtmftimeout = 3000; /* 3000 samples */ +#define DEFAULT_DTMF_TIMEOUT 3000 /* samples */ + +static int dtmftimeout = DEFAULT_DTMF_TIMEOUT; static int rtpstart = 0; static int rtpend = 0; @@ -1813,6 +1815,7 @@ void ast_rtp_reload(void) rtpstart = 5000; rtpend = 31000; + dtmftimeout = DEFAULT_DTMF_TIMEOUT; cfg = ast_config_load("rtp.conf"); if (cfg) { if ((s = ast_variable_retrieve(cfg, "general", "rtpstart"))) { @@ -1840,6 +1843,14 @@ void ast_rtp_reload(void) ast_log(LOG_WARNING, "Disabling RTP checksums is not supported on this operating system!\n"); #endif } + if ((s = ast_variable_retrieve(cfg, "general", "dtmftimeout"))) { + dtmftimeout = atoi(s); + if ((dtmftimeout < 0) || (dtmftimeout > 20000)) { + ast_log(LOG_WARNING, "DTMF timeout of '%d' outside range, using default of '%d' instead\n", + dtmftimeout, DEFAULT_DTMF_TIMEOUT); + dtmftimeout = DEFAULT_DTMF_TIMEOUT; + }; + } ast_config_destroy(cfg); } if (rtpstart >= rtpend) {