aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjpeeler <jpeeler@f38db490-d61c-443f-a65b-d21fe96a405b>2009-05-01 18:20:40 +0000
committerjpeeler <jpeeler@f38db490-d61c-443f-a65b-d21fe96a405b>2009-05-01 18:20:40 +0000
commit5b364bc7cd06187cf994eff051d7b39c11a5fd47 (patch)
tree0a97fdea5d4a00dd3d47e917c149b8b43c3b92d1
parentb0a1c1585b86f169be28a1e25f78d800df202cd2 (diff)
Merged revisions 191489 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk ................ r191489 | jpeeler | 2009-05-01 13:09:23 -0500 (Fri, 01 May 2009) | 15 lines Merged revisions 191488 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r191488 | jpeeler | 2009-05-01 12:40:46 -0500 (Fri, 01 May 2009) | 9 lines 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: http://svn.digium.com/svn/asterisk/branches/1.6.2@191508 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r--main/channel.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/main/channel.c b/main/channel.c
index 8fa01ffb5..bc54eabad 100644
--- a/main/channel.c
+++ b/main/channel.c
@@ -4474,6 +4474,13 @@ static enum ast_bridge_result ast_generic_bridge(struct ast_channel *c0, struct
ast_poll_channel_add(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;
@@ -4496,8 +4503,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)