mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-02 20:08:17 +00:00
Merged revisions 278167 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r278167 | tilghman | 2010-07-20 15:59:06 -0500 (Tue, 20 Jul 2010) | 4 lines Do not queue up DTMF frames while a call is on hold. (Fixes ABE-2110) ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@278272 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -56,6 +56,7 @@ struct asent {
|
||||
* it gets stopped for the last time. */
|
||||
unsigned int use_count;
|
||||
unsigned int orig_end_dtmf_flag:1;
|
||||
unsigned int ignore_frame_types;
|
||||
/*! Frames go on at the head of deferred_frames, so we have the frames
|
||||
* from newest to oldest. As we put them at the head of the readq, we'll
|
||||
* end up with them in the right order for the channel's readq. */
|
||||
@@ -286,7 +287,9 @@ int ast_autoservice_stop(struct ast_channel *chan)
|
||||
|
||||
ast_channel_lock(chan);
|
||||
while ((f = AST_LIST_REMOVE_HEAD(&as->deferred_frames, frame_list))) {
|
||||
ast_queue_frame_head(chan, f);
|
||||
if (!((1 << f->frametype) & as->ignore_frame_types)) {
|
||||
ast_queue_frame_head(chan, f);
|
||||
}
|
||||
ast_frfree(f);
|
||||
}
|
||||
ast_channel_unlock(chan);
|
||||
@@ -296,6 +299,23 @@ int ast_autoservice_stop(struct ast_channel *chan)
|
||||
return res;
|
||||
}
|
||||
|
||||
int ast_autoservice_ignore(struct ast_channel *chan, enum ast_frame_type ftype)
|
||||
{
|
||||
struct asent *as;
|
||||
int res = -1;
|
||||
|
||||
AST_LIST_LOCK(&aslist);
|
||||
AST_LIST_TRAVERSE(&aslist, as, list) {
|
||||
if (as->chan == chan) {
|
||||
res = 0;
|
||||
as->ignore_frame_types |= (1 << ftype);
|
||||
break;
|
||||
}
|
||||
}
|
||||
AST_LIST_UNLOCK(&aslist);
|
||||
return res;
|
||||
}
|
||||
|
||||
void ast_autoservice_init(void)
|
||||
{
|
||||
ast_cond_init(&as_cond, NULL);
|
||||
|
||||
Reference in New Issue
Block a user