Pass HOLD and UNHOLD frames to the other channel when they are returned from a

native bridge function.  This fixes a problem where when two zap channels are
natively bridged and one does a flash hook, the other channel did not receive
music on hold.  (Reported to me directly by Doug Bailey at Digium)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@73512 65c4cc65-6c06-0410-ace0-fbb531ad65f3
1.4
Russell Bryant 18 years ago
parent 9b753a0649
commit 6a2ab6b475

@ -1470,17 +1470,24 @@ int ast_bridge_call(struct ast_channel *chan,struct ast_channel *peer,struct ast
/* many things should be sent to the 'other' channel */
other = (who == chan) ? peer : chan;
if (f->frametype == AST_FRAME_CONTROL) {
if (f->subclass == AST_CONTROL_RINGING)
ast_indicate(other, AST_CONTROL_RINGING);
else if (f->subclass == -1)
ast_indicate(other, -1);
else if (f->subclass == AST_CONTROL_FLASH)
ast_indicate(other, AST_CONTROL_FLASH);
else if (f->subclass == AST_CONTROL_OPTION) {
switch (f->subclass) {
case AST_CONTROL_RINGING:
case AST_CONTROL_FLASH:
case -1:
ast_indicate(other, f->subclass);
break;
case AST_CONTROL_HOLD:
case AST_CONTROL_UNHOLD:
ast_indicate_data(other, f->subclass, f->data, f->datalen);
break;
case AST_CONTROL_OPTION:
aoh = f->data;
/* Forward option Requests */
if (aoh && aoh->flag == AST_OPTION_FLAG_REQUEST)
ast_channel_setoption(other, ntohs(aoh->option), aoh->data, f->datalen - sizeof(struct ast_option_header), 0);
if (aoh && aoh->flag == AST_OPTION_FLAG_REQUEST) {
ast_channel_setoption(other, ntohs(aoh->option), aoh->data,
f->datalen - sizeof(struct ast_option_header), 0);
}
break;
}
} else if (f->frametype == AST_FRAME_DTMF_BEGIN) {
/* eat it */

Loading…
Cancel
Save