diff options
-rw-r--r-- | main/channel.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/main/channel.c b/main/channel.c index 4f0b58536..f0215851b 100644 --- a/main/channel.c +++ b/main/channel.c @@ -2268,7 +2268,7 @@ static struct ast_frame *__ast_read(struct ast_channel *chan, int dropaudio) ast_set_flag(chan, AST_FLAG_EMULATE_DTMF); chan->emulate_dtmf_digit = f->subclass; chan->dtmf_begin_tv = ast_tvnow(); - if (f->len) + if (f->len && f->len > AST_DEFAULT_EMULATE_DTMF_DURATION) chan->emulate_dtmf_duration = f->len; else chan->emulate_dtmf_duration = AST_DEFAULT_EMULATE_DTMF_DURATION; @@ -2276,6 +2276,12 @@ static struct ast_frame *__ast_read(struct ast_channel *chan, int dropaudio) ast_clear_flag(chan, AST_FLAG_IN_DTMF); if (!f->len) f->len = ast_tvdiff_ms(ast_tvnow(), chan->dtmf_begin_tv); + if (f->len < AST_DEFAULT_EMULATE_DTMF_DURATION) { + ast_set_flag(chan, AST_FLAG_EMULATE_DTMF); + chan->emulate_dtmf_digit = f->subclass; + chan->emulate_dtmf_duration = AST_DEFAULT_EMULATE_DTMF_DURATION - f->len; + f = &ast_null_frame; + } } break; case AST_FRAME_DTMF_BEGIN: |