From cb28ef70bc86bf9172e2f0136c25696c35926158 Mon Sep 17 00:00:00 2001
From: "Kevin P. Fleming" <kpfleming@digium.com>
Date: Tue, 1 Nov 2005 00:06:43 +0000
Subject: [PATCH] allow DTMF timeout to be configurable (issue #5160)

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@6918 65c4cc65-6c06-0410-ace0-fbb531ad65f3
---
 configs/rtp.conf.sample |  5 +++++
 rtp.c                   | 13 ++++++++++++-
 2 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/configs/rtp.conf.sample b/configs/rtp.conf.sample
index a9a455c922..fa16f0d93f 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 39b3745a37..2893ceff3d 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) {
-- 
GitLab