]> git.ipfire.org Git - thirdparty/asterisk.git/commit
bridge_channel: Don't settle owed events on an optimization. 05/2305/2
authorRichard Mudgett <rmudgett@digium.com>
Sat, 20 Feb 2016 01:06:14 +0000 (19:06 -0600)
committerRichard Mudgett <rmudgett@digium.com>
Mon, 29 Feb 2016 18:50:43 +0000 (12:50 -0600)
commit86f7336c91bb3fcd0704143ed93d41275080b2e4
tree1c17d9f843d6a92e20f86b08d421e03c6461cd3c
parent128c96456ce0fc794867317c6a47fb41795c33d5
bridge_channel: Don't settle owed events on an optimization.

Local channel optimization could cause DTMF digits to be duplicated.
Pending DTMF end events would be posted to a bridge when the local channel
optimizes out and is replaced by the channel further down the chain.  When
the real digit ends, the channel would get another DTMF end posted to the
bridge.

A -- LocalA;1/n -- LocalA;2/n -- LocalB;1 -- LocalB;2 -- B

1) LocalA has the /n flag to prevent optimization.
2) B is sending DTMF to A through the local channel chain.
3) When LocalB optimizes out it can move B to the position of LocalB;1
4) Without this patch, when B swaps with LocalB;1 then LocalB;1 would
settle an owed DTMF end to the bridge toward LocalA;2.
5) When B finally ends its DTMF it sends the DTMF end down the chain.
6) Without this patch, A would hear the DTMF digit end when LocalB
optimizes out and when B ends the original digit.

ASTERISK-25582

Change-Id: I1bbd28b8b399c0fb54985a5747f330a4cd2aa251
include/asterisk/bridge_channel_internal.h
main/bridge.c
main/bridge_channel.c