DTMF hooks: Leaving channels need to push any collected digits into the bridge.

Any partially collected DTMF digits for a DTMF hook need to be pushed into
the bridge when a channel leaves the bridging system as if there were a
timeout.

Review: https://reviewboard.asterisk.org/r/4199/
........

Merged revisions 428601 from http://svn.asterisk.org/svn/asterisk/branches/12
........

Merged revisions 428602 from http://svn.asterisk.org/svn/asterisk/branches/13


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428603 65c4cc65-6c06-0410-ace0-fbb531ad65f3
changes/42/42/1
Richard Mudgett 11 years ago
parent 3576ae47f4
commit c38ffca9a1

@ -1764,8 +1764,8 @@ int ast_bridge_depart(struct ast_channel *chan)
} }
/* /*
* We are claiming the reference held by the depart bridge * We are claiming the bridge_channel reference held by
* channel thread. * bridge_channel_depart_thread().
*/ */
ast_bridge_channel_leave_bridge(bridge_channel, ast_bridge_channel_leave_bridge(bridge_channel,

@ -2564,10 +2564,15 @@ int bridge_channel_internal_join(struct ast_bridge_channel *bridge_channel)
ast_bridge_unlock(bridge_channel->bridge); ast_bridge_unlock(bridge_channel->bridge);
bridge_channel_event_join_leave(bridge_channel, AST_BRIDGE_HOOK_TYPE_JOIN); bridge_channel_event_join_leave(bridge_channel, AST_BRIDGE_HOOK_TYPE_JOIN);
while (bridge_channel->state == BRIDGE_CHANNEL_STATE_WAIT) { while (bridge_channel->state == BRIDGE_CHANNEL_STATE_WAIT) {
/* Wait for something to do. */ /* Wait for something to do. */
bridge_channel_wait(bridge_channel); bridge_channel_wait(bridge_channel);
} }
/* Force a timeout on any accumulated DTMF hook digits. */
ast_bridge_channel_feature_digit(bridge_channel, 0);
bridge_channel_event_join_leave(bridge_channel, AST_BRIDGE_HOOK_TYPE_LEAVE); bridge_channel_event_join_leave(bridge_channel, AST_BRIDGE_HOOK_TYPE_LEAVE);
ast_bridge_channel_lock_bridge(bridge_channel); ast_bridge_channel_lock_bridge(bridge_channel);
} }

Loading…
Cancel
Save