bridges/bridge_t38: Add a bridging module for managing T.38 state
authorMatt Jordan <mjordan@digium.com>
Sat, 28 Nov 2015 14:46:02 +0000 (08:46 -0600)
committerJoshua Colp <jcolp@digium.com>
Fri, 4 Dec 2015 14:23:48 +0000 (10:23 -0400)
commitf42d22d3a1ca5c8ea73df99a50c6a28caa8f8749
treed28c3536466b1239a23e8c11abe5df06cbfa2ff4
parentfc1186bf2d5f1cab34bbe0d72f4f667044e612d0
bridges/bridge_t38: Add a bridging module for managing T.38 state

When 4875e5ac32 was merged, it fixed several issues with a direct media bridge
transitioning to handling a T.38 fax. However, it uncovered a race condition
caused by the bridging core. When a channel involved in a T.38 fax leaves a
bridge, the frame queued by the channel driver that should inform the far side
that it is no longer in a T.38 fax may not make it across the bridge. The
bridging framework is *extremely* aggressive in tearing down the bridge, and
control frames that are currently in flight *may* get dropped.

This patch adds a new module to the bridging framework, bridge_t38. This module
maintains some notion of the T.38 state for the two channels in a bridge. When
the bridge detects that it is being torn down or when one of the two channels
leaves, it informs the respective channel(s) that they should stop faxing. This
ensures that channels switch back to audio if they survive and are ejected out
of a bridge while faxing.

ASTERISK-25582

Change-Id: If5b0bb478eb01c4607c9f4a7fc17c7957d260ea0
CHANGES
bridges/bridge_t38.c [new file with mode: 0644]