[asterisk-commits] file: branch 1.4 r81437 - /branches/1.4/main/channel.c
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Tue Sep 4 08:46:23 CDT 2007
Author: file
Date: Tue Sep 4 08:46:23 2007
New Revision: 81437
URL: http://svn.digium.com/view/asterisk?view=rev&rev=81437
Log:
(closes issue #10476)
Reported by: mdu113
Only look for the end of a digit when waiting for a digit. This in turn disables emulation in the core.
Modified:
branches/1.4/main/channel.c
Modified: branches/1.4/main/channel.c
URL: http://svn.digium.com/view/asterisk/branches/1.4/main/channel.c?view=diff&rev=81437&r1=81436&r2=81437
==============================================================================
--- branches/1.4/main/channel.c (original)
+++ branches/1.4/main/channel.c Tue Sep 4 08:46:23 2007
@@ -2080,11 +2080,13 @@
int ast_waitfordigit_full(struct ast_channel *c, int ms, int audiofd, int cmdfd)
{
- int begin_digit = 0;
-
/* Stop if we're a zombie or need a soft hangup */
if (ast_test_flag(c, AST_FLAG_ZOMBIE) || ast_check_hangup(c))
return -1;
+
+ /* Only look for the end of DTMF, don't bother with the beginning and don't emulate things */
+ ast_set_flag(c, AST_FLAG_END_DTMF_ONLY);
+
/* Wait for a digit, no more than ms milliseconds total. */
while (ms) {
struct ast_channel *rchan;
@@ -2096,9 +2098,11 @@
if (errno == 0 || errno == EINTR)
continue;
ast_log(LOG_WARNING, "Wait failed (%s)\n", strerror(errno));
+ ast_clear_flag(c, AST_FLAG_END_DTMF_ONLY);
return -1;
} else if (outfd > -1) {
/* The FD we were watching has something waiting */
+ ast_clear_flag(c, AST_FLAG_END_DTMF_ONLY);
return 1;
} else if (rchan) {
int res;
@@ -2108,18 +2112,17 @@
switch(f->frametype) {
case AST_FRAME_DTMF_BEGIN:
- begin_digit = f->subclass;
break;
case AST_FRAME_DTMF_END:
- if (begin_digit != f->subclass)
- break;
res = f->subclass;
ast_frfree(f);
+ ast_clear_flag(c, AST_FLAG_END_DTMF_ONLY);
return res;
case AST_FRAME_CONTROL:
switch(f->subclass) {
case AST_CONTROL_HANGUP:
ast_frfree(f);
+ ast_clear_flag(c, AST_FLAG_END_DTMF_ONLY);
return -1;
case AST_CONTROL_RINGING:
case AST_CONTROL_ANSWER:
@@ -2141,6 +2144,9 @@
ast_frfree(f);
}
}
+
+ ast_clear_flag(c, AST_FLAG_END_DTMF_ONLY);
+
return 0; /* Time is up */
}
More information about the asterisk-commits
mailing list