mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-06 05:02:29 +00:00
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
This commit is contained in:
@@ -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)
|
||||
|
Reference in New Issue
Block a user