From 98c23ee3cf0a1f80db4297791552ab8fad98251c Mon Sep 17 00:00:00 2001 From: Jeff Peeler Date: Fri, 1 May 2009 17:40:46 +0000 Subject: [PATCH] Fix DTMF not being sent to other side after a partial feature match This fixes a regression from commit 176701. The issue was that ast_generic_bridge never exited after the feature digit timeout had elapsed, which prevented the queued DTMF from being sent to the other side. This issue was reported to me directly. git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@191488 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- main/channel.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/main/channel.c b/main/channel.c index a10412fc70..6a2f7f77c2 100644 --- a/main/channel.c +++ b/main/channel.c @@ -3950,6 +3950,13 @@ static enum ast_bridge_result ast_generic_bridge(struct ast_channel *c0, struct if (jb_in_use) ast_jb_empty_and_reset(c0, c1); + if (config->feature_timer > 0 && ast_tvzero(config->nexteventts)) { + /* nexteventts is not set when the bridge is not scheduled to + * break, so calculate when the bridge should possibly break + * if a partial feature match timed out */ + config->nexteventts = ast_tvadd(ast_tvnow(), ast_samp2tv(config->feature_timer, 1000)); + } + for (;;) { struct ast_channel *who, *other; @@ -3972,8 +3979,20 @@ static enum ast_bridge_result ast_generic_bridge(struct ast_channel *c0, struct } break; } - } else + } else { + /* If a feature has been started and the bridge is configured to + * to not break, leave the channel bridge when the feature timer + * time has elapsed so the DTMF will be sent to the other side. + */ + if (!ast_tvzero(config->nexteventts)) { + int diff = ast_tvdiff_ms(config->nexteventts, ast_tvnow()); + if (diff <= 0) { + res = AST_BRIDGE_RETRY; + break; + } + } to = -1; + } /* Calculate the appropriate max sleep interval - in general, this is the time, left to the closest jb delivery moment */ if (jb_in_use) -- 2.47.2