[asterisk-commits] jpeeler: branch 1.4 r191488 - /branches/1.4/main/channel.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Fri May 1 12:40:50 CDT 2009


Author: jpeeler
Date: Fri May  1 12:40:46 2009
New Revision: 191488

URL: http://svn.digium.com/svn-view/asterisk?view=rev&rev=191488
Log:
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.


Modified:
    branches/1.4/main/channel.c

Modified: branches/1.4/main/channel.c
URL: http://svn.digium.com/svn-view/asterisk/branches/1.4/main/channel.c?view=diff&rev=191488&r1=191487&r2=191488
==============================================================================
--- branches/1.4/main/channel.c (original)
+++ branches/1.4/main/channel.c Fri May  1 12:40:46 2009
@@ -3950,6 +3950,13 @@
 	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 @@
 				}
 				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)




More information about the asterisk-commits mailing list