]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 191489 via svnmerge from
authorJeff Peeler <jpeeler@digium.com>
Fri, 1 May 2009 18:20:09 +0000 (18:20 +0000)
committerJeff Peeler <jpeeler@digium.com>
Fri, 1 May 2009 18:20:09 +0000 (18:20 +0000)
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: https://origsvn.digium.com/svn/asterisk/branches/1.6.1@191505 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/channel.c

index f572e25693240ca8ba4bb55e8af2594af4369347..bcbef915b6110bb70689cc677ee1b64d27887dcc 100644 (file)
@@ -4446,6 +4446,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;
 
@@ -4468,8 +4475,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)