aboutsummaryrefslogtreecommitdiffstats
path: root/main
diff options
context:
space:
mode:
authormmichelson <mmichelson@f38db490-d61c-443f-a65b-d21fe96a405b>2010-07-06 14:33:16 +0000
committermmichelson <mmichelson@f38db490-d61c-443f-a65b-d21fe96a405b>2010-07-06 14:33:16 +0000
commit10449c510d168ee63ec94a651d11bbc53a7a550c (patch)
tree5d9609e0215b2ea02fb49dc5f8dda24ab784c2ae /main
parent2458ba2cd11d1ccd1c4b51279b78a4b069af2e6b (diff)
Merged revisions 274164 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk ................ r274164 | mmichelson | 2010-07-06 09:31:13 -0500 (Tue, 06 Jul 2010) | 22 lines Merged revisions 274157 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r274157 | mmichelson | 2010-07-06 09:29:23 -0500 (Tue, 06 Jul 2010) | 16 lines Fix problem with RFC 2833 DTMF not being accepted. A recent check was added to ensure that we did not erroneously detect duplicate DTMF when we received packets out of order. The problem was that the check did not account for the fact that the seqno of an RTP stream will roll over back to 0 after hitting 65535. Now, we have a secondary check that will ensure that the seqno rolling over will not cause us to stop accepting DTMF. (closes issue #17571) Reported by: mdeneen Patches: rtp_seqno_rollover.patch uploaded by mmichelson (license 60) Tested by: richardf, maxochoa, JJCinAZ ........ ................ git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.2@274168 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'main')
-rw-r--r--main/rtp.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/main/rtp.c b/main/rtp.c
index 6ac4fe7d8..424912202 100644
--- a/main/rtp.c
+++ b/main/rtp.c
@@ -1072,8 +1072,11 @@ static void process_rfc2833(struct ast_rtp *rtp, unsigned char *data, int len, u
if (last_duration > 64000 && samples < last_duration)
new_duration += 0xFFFF + 1;
new_duration = (new_duration & ~0xFFFF) | samples;
-
- if (rtp->lastevent > seqno) {
+ /* The second portion of this check is to not mistakenly
+ * stop accepting DTMF if the seqno rolls over beyond
+ * 65535.
+ */
+ if (rtp->lastevent > seqno && rtp->lastevent - seqno < 50) {
/* Out of order frame. Processing this can cause us to
* improperly duplicate incoming DTMF, so just drop
* this.