From a6edd8ba5ffe822b223c2f7447afb9214639980a Mon Sep 17 00:00:00 2001 From: Joshua Colp Date: Wed, 10 Dec 2008 16:05:29 +0000 Subject: [PATCH] Increment the sequence number on the end packets for RFC2833. After reading the RFC some more and doing some testing I agree with this change. (closes issue #12983) Reported by: vt Patches: dtmf_inc_seqnum_on_end_pkts.diff uploaded by vt (license 520) git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@162653 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- main/rtp.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/main/rtp.c b/main/rtp.c index c11d4cecf3..01083410d3 100644 --- a/main/rtp.c +++ b/main/rtp.c @@ -2316,16 +2316,17 @@ int ast_rtp_senddigit_end(struct ast_rtp *rtp, char digit) rtp->dtmfmute = ast_tvadd(ast_tvnow(), ast_tv(0, 500000)); rtpheader = (unsigned int *)data; - rtpheader[0] = htonl((2 << 30) | (1 << 23) | (rtp->send_payload << 16) | (rtp->seqno)); rtpheader[1] = htonl(rtp->lastdigitts); rtpheader[2] = htonl(rtp->ssrc); rtpheader[3] = htonl((digit << 24) | (0xa << 16) | (rtp->send_duration)); /* Set end bit */ rtpheader[3] |= htonl((1 << 23)); - rtpheader[0] = htonl((2 << 30) | (rtp->send_payload << 16) | (rtp->seqno)); + /* Send 3 termination packets */ for (i = 0; i < 3; i++) { + rtpheader[0] = htonl((2 << 30) | (rtp->send_payload << 16) | (rtp->seqno)); res = sendto(rtp->s, (void *) rtpheader, hdrlen + 4, 0, (struct sockaddr *) &rtp->them, sizeof(rtp->them)); + rtp->seqno++; if (res < 0) ast_log(LOG_ERROR, "RTP Transmission error to %s:%d: %s\n", ast_inet_ntoa(rtp->them.sin_addr), @@ -2338,7 +2339,6 @@ int ast_rtp_senddigit_end(struct ast_rtp *rtp, char digit) rtp->lastts += rtp->send_duration; rtp->sending_digit = 0; rtp->send_digit = 0; - rtp->seqno++; return res; }