[asterisk-commits] file: trunk r78956 - in /trunk: ./ main/file.c
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Fri Aug 10 09:17:43 CDT 2007
Author: file
Date: Fri Aug 10 09:17:42 2007
New Revision: 78956
URL: http://svn.digium.com/view/asterisk?view=rev&rev=78956
Log:
Merged revisions 78955 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r78955 | file | 2007-08-10 11:15:53 -0300 (Fri, 10 Aug 2007) | 2 lines
Don't bother having the core pass through or emulate begin DTMF frames when in an ast_waitstream. It only cares about the end of DTMF.
........
Modified:
trunk/ (props changed)
trunk/main/file.c
Propchange: trunk/
------------------------------------------------------------------------------
Binary property 'branch-1.4-merged' - no diff available.
Modified: trunk/main/file.c
URL: http://svn.digium.com/view/asterisk/trunk/main/file.c?view=diff&rev=78956&r1=78955&r2=78956
==============================================================================
--- trunk/main/file.c (original)
+++ trunk/main/file.c Fri Aug 10 09:17:42 2007
@@ -986,6 +986,9 @@
forward = "";
if (!rewind)
rewind = "";
+
+ /* Switch the channel to end DTMF frame only. waitstream_core doesn't care about the start of DTMF. */
+ ast_set_flag(c, AST_FLAG_END_DTMF_ONLY);
while (c->stream) {
int res;
@@ -1000,6 +1003,7 @@
res = ast_waitfor(c, ms);
if (res < 0) {
ast_log(LOG_WARNING, "Select failed (%s)\n", strerror(errno));
+ ast_clear_flag(c, AST_FLAG_END_DTMF_ONLY);
return res;
}
} else {
@@ -1010,9 +1014,11 @@
if (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) { /* this requires cmdfd set */
/* The FD we were watching has something waiting */
+ ast_clear_flag(c, AST_FLAG_END_DTMF_ONLY);
return 1;
}
/* if rchan is set, it is 'c' */
@@ -1020,8 +1026,10 @@
}
if (res > 0) {
struct ast_frame *fr = ast_read(c);
- if (!fr)
+ if (!fr) {
+ ast_clear_flag(c, AST_FLAG_END_DTMF_ONLY);
return -1;
+ }
switch (fr->frametype) {
case AST_FRAME_DTMF_END:
if (context) {
@@ -1029,6 +1037,7 @@
if (ast_exists_extension(c, context, exten, 1, c->cid.cid_num)) {
res = fr->subclass;
ast_frfree(fr);
+ ast_clear_flag(c, AST_FLAG_END_DTMF_ONLY);
return res;
}
} else {
@@ -1039,6 +1048,7 @@
ast_stream_rewind(c->stream, skip_ms);
} else if (strchr(breakon, res)) {
ast_frfree(fr);
+ ast_clear_flag(c, AST_FLAG_END_DTMF_ONLY);
return res;
}
}
@@ -1049,6 +1059,7 @@
case AST_CONTROL_BUSY:
case AST_CONTROL_CONGESTION:
ast_frfree(fr);
+ ast_clear_flag(c, AST_FLAG_END_DTMF_ONLY);
return -1;
case AST_CONTROL_RINGING:
case AST_CONTROL_ANSWER:
@@ -1073,6 +1084,9 @@
}
ast_sched_runq(c->sched);
}
+
+ ast_clear_flag(c, AST_FLAG_END_DTMF_ONLY);
+
return (c->_softhangup ? -1 : 0);
}
More information about the asterisk-commits
mailing list