summaryrefslogtreecommitdiff
path: root/main/features.c
diff options
context:
space:
mode:
authorJeff Peeler <jpeeler@digium.com>2009-02-17 22:08:00 +0000
committerJeff Peeler <jpeeler@digium.com>2009-02-17 22:08:00 +0000
commitf40edf2793940a31716d21252f43441488044e6e (patch)
treeb6beef88b4ed48c9a0a3b48892e0333c6bd04d59 /main/features.c
parent5d2a7dea853c48ec3cb7fc557be28d0380876391 (diff)
Merged revisions 176701 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r176701 | jpeeler | 2009-02-17 15:54:34 -0600 (Tue, 17 Feb 2009) | 17 lines Modify bridging to properly evaluate DTMF after first warning is played The main problem is currently if the Dial flag L is used with a warning sound, DTMF is not evaluated after the first warning sound. To fix this, a flag has been added in ast_generic_bridge for playing the warning which ensures that if a scheduled warning is missed, multiple warrnings are not played back (due to a feature evaluation or waiting for digits). ast_channel_bridge was modified to store the nexteventts in the ast_bridge_config structure as that information was lost every time ast_channel_bridge was reentered, causing a hangup due to incorrect time calculations. (closes issue #14315) Reported by: tim_ringenbach Reviewed on reviewboard: http://reviewboard.digium.com/r/163/ ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@176708 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'main/features.c')
-rw-r--r--main/features.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/main/features.c b/main/features.c
index 40efac0c4..8f1652692 100644
--- a/main/features.c
+++ b/main/features.c
@@ -2533,6 +2533,15 @@ int ast_bridge_call(struct ast_channel *chan,struct ast_channel *peer,struct ast
if (config->feature_timer) {
/* Update time limit for next pass */
diff = ast_tvdiff_ms(ast_tvnow(), config->start_time);
+ if (res == AST_BRIDGE_RETRY) {
+ /* The feature fully timed out but has not been updated. Skip
+ * the potential round error from the diff calculation and
+ * explicitly set to expired. */
+ config->feature_timer = -1;
+ } else {
+ config->feature_timer -= diff;
+ }
+
config->feature_timer -= diff;
if (hasfeatures) {
/* Running on backup config, meaning a feature might be being