Merged revisions 162653 via svnmerge from
authorJoshua Colp <jcolp@digium.com>
Wed, 10 Dec 2008 16:06:59 +0000 (16:06 +0000)
committerJoshua Colp <jcolp@digium.com>
Wed, 10 Dec 2008 16:06:59 +0000 (16:06 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
  r162653 | file | 2008-12-10 12:05:29 -0400 (Wed, 10 Dec 2008) | 6 lines

  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/trunk@162656 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/rtp.c

index e5c4a7b..c613aac 100644 (file)
@@ -3151,16 +3151,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),
@@ -3173,7 +3174,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;
 }