From: Russell Bryant Date: Mon, 9 Jun 2008 16:35:40 +0000 (+0000) Subject: Do not attempt to do emulation if an END digit is received and the length is X-Git-Tag: 1.4.22-rc1~230 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a3e4233c7df27a21220965ac1aeb7c1ead1b762f;p=thirdparty%2Fasterisk.git Do not attempt to do emulation if an END digit is received and the length is less than the defined minimum digit length, and the other end only wants END digits (SIP INFO, for example). (closes issue #12778) Reported by: tsearle Patches: 12778.rev1.txt uploaded by russell (license 2) Tested by: tsearle git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@121280 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/main/channel.c b/main/channel.c index 392b0b113e..cafbfe9c56 100644 --- a/main/channel.c +++ b/main/channel.c @@ -2168,7 +2168,7 @@ static struct ast_frame *__ast_read(struct ast_channel *chan, int dropaudio) ast_log(LOG_DTMF, "DTMF end accepted without begin '%c' on %s\n", f->subclass, chan->name); f->len = AST_MIN_DTMF_DURATION; } - if (f->len < AST_MIN_DTMF_DURATION) { + if (f->len < AST_MIN_DTMF_DURATION && !ast_test_flag(chan, AST_FLAG_END_DTMF_ONLY)) { ast_log(LOG_DTMF, "DTMF end '%c' has duration %ld but want minimum %d, emulating on %s\n", f->subclass, f->len, AST_MIN_DTMF_DURATION, chan->name); ast_set_flag(chan, AST_FLAG_EMULATE_DTMF); chan->emulate_dtmf_digit = f->subclass; @@ -2177,6 +2177,9 @@ static struct ast_frame *__ast_read(struct ast_channel *chan, int dropaudio) f = &ast_null_frame; } else { ast_log(LOG_DTMF, "DTMF end passthrough '%c' on %s\n", f->subclass, chan->name); + if (f->len < AST_MIN_DTMF_DURATION) { + f->len = AST_MIN_DTMF_DURATION; + } chan->dtmf_tv = now; } if (chan->audiohooks) {