From 5724d8f9051ebf53e7562d9b921e7b653aeb2368 Mon Sep 17 00:00:00 2001 From: Mark Michelson Date: Tue, 6 Jul 2010 14:29:23 +0000 Subject: [PATCH] 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: https://origsvn.digium.com/svn/asterisk/branches/1.4@274157 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- main/rtp.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/main/rtp.c b/main/rtp.c index 121f6aed82..5a1266a3c8 100644 --- a/main/rtp.c +++ b/main/rtp.c @@ -776,7 +776,11 @@ static void process_rfc2833(struct ast_rtp *rtp, unsigned char *data, int len, u 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. -- 2.47.2