[asterisk-commits] mjordan: branch 10 r373237 - in /branches/10: ./ res/res_rtp_asterisk.c
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Thu Sep 20 13:42:55 CDT 2012
Author: mjordan
Date: Thu Sep 20 13:42:51 2012
New Revision: 373237
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=373237
Log:
When processing RFC 2833 DTMF, accomodate increasing timestamps in End events
While endpoints should not be changing the source timestamp between DTMF event
packets, the fact is there exists those endpoints that do exactly that. To
work around this, we absorb timestamps within the expected re-transmit period.
Note that this period only affects End of Event packets, so it should not
prevent the detection of new DTMF digits that happen to arrive right on top
of each other.
(closes issue ASTERISK-20424)
Reported by: Vladimir Mikhelson
Tested by: mjordan, Vladimir Mikhelson
Review: https://reviewboard.asterisk.org/r/2124
........
Merged revisions 373236 from http://svn.asterisk.org/svn/asterisk/branches/1.8
Modified:
branches/10/ (props changed)
branches/10/res/res_rtp_asterisk.c
Propchange: branches/10/
------------------------------------------------------------------------------
Binary property 'branch-1.8-merged' - no diff available.
Modified: branches/10/res/res_rtp_asterisk.c
URL: http://svnview.digium.com/svn/asterisk/branches/10/res/res_rtp_asterisk.c?view=diff&rev=373237&r1=373236&r2=373237
==============================================================================
--- branches/10/res/res_rtp_asterisk.c (original)
+++ branches/10/res/res_rtp_asterisk.c Thu Sep 20 13:42:51 2012
@@ -1589,8 +1589,9 @@
new_duration = (new_duration & ~0xFFFF) | samples;
if (event_end & 0x80) {
- /* End event */
- if ((rtp->last_seqno != seqno) && (timestamp > rtp->last_end_timestamp)) {
+ /* End event. Absorb re-transmits, and account for some endpoints
+ * that erroneously increment the timestamp during re-transmissions */
+ if ((seqno != rtp->last_seqno) && (timestamp > rtp->last_end_timestamp + 320)) {
rtp->last_end_timestamp = timestamp;
rtp->dtmf_duration = new_duration;
rtp->resp = resp;
@@ -1600,7 +1601,7 @@
rtp->dtmf_duration = rtp->dtmf_timeout = 0;
AST_LIST_INSERT_TAIL(frames, f, frame_list);
} else if (rtpdebug) {
- ast_debug(1, "Dropping duplicate or out of order DTMF END frame (seqno: %d, ts %d, digit %c)\n",
+ ast_debug(1, "Dropping re-transmitted, duplicate, or out of order DTMF END frame (seqno: %d, ts %d, digit %c)\n",
seqno, timestamp, resp);
}
} else {
More information about the asterisk-commits
mailing list