]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 372198 via svnmerge from
authorAutomerge script <automerge@asterisk.org>
Wed, 5 Sep 2012 05:22:21 +0000 (05:22 +0000)
committerAutomerge script <automerge@asterisk.org>
Wed, 5 Sep 2012 05:22:21 +0000 (05:22 +0000)
file:///srv/subversion/repos/asterisk/branches/10

................
  r372198 | elguero | 2012-09-04 23:47:00 -0500 (Tue, 04 Sep 2012) | 19 lines

  Fix Incrementing Sequence Number For Retransmitted DTMF End Packets

  In Asterisk 1.4+, a fix was put in place to increment the sequence number for
  retransmitted DTMF end packets.  With the introduction of the RTP engine API in
  1.8, the sequence number was no longer being incremented.  This patch fixes this
  regression as well as cleans up a few lines that were not doing anything.

  (closes issue ASTERISK-20295)
  Reported by: Nitesh Bansal
  Tested by: Michael L. Young
  Patches:
  01_rtp_event_seq_num.patch uploaded by Nitesh Bansal (license 6418)
  asterisk-20295-dtmf-fix-cleanup.diff uploaded by Michael L. Young (license 5026)

  Review: https://reviewboard.asterisk.org/r/2083/
  ........

  Merged revisions 372185 from http://svn.asterisk.org/svn/asterisk/branches/1.8
................

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/10-digiumphones@372211 65c4cc65-6c06-0410-ace0-fbb531ad65f3

res/res_rtp_asterisk.c

index 4e2757082d5ac7f74ff3b8d5309e76c04da7b635..123e652521af5e8bffab40cdce41d8160ef64ff9 100644 (file)
@@ -718,11 +718,10 @@ static int ast_rtp_dtmf_continuation(struct ast_rtp_instance *instance)
        }
 
        /* Actually create the packet we will be sending */
-       rtpheader[0] = htonl((2 << 30) | (1 << 23) | (rtp->send_payload << 16) | (rtp->seqno));
+       rtpheader[0] = htonl((2 << 30) | (rtp->send_payload << 16) | (rtp->seqno));
        rtpheader[1] = htonl(rtp->lastdigitts);
        rtpheader[2] = htonl(rtp->ssrc);
        rtpheader[3] = htonl((rtp->send_digit << 24) | (0xa << 16) | (rtp->send_duration));
-       rtpheader[0] = htonl((2 << 30) | (rtp->send_payload << 16) | (rtp->seqno));
 
        /* Boom, send it on out */
        res = rtp_sendto(instance, (void *) rtpheader, hdrlen + 4, 0, &remote_address);
@@ -785,15 +784,16 @@ static int ast_rtp_dtmf_end_with_duration(struct ast_rtp_instance *instance, cha
        }
 
        /* Construct the packet we are going to send */
-       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));
        rtpheader[3] |= htonl((1 << 23));
-       rtpheader[0] = htonl((2 << 30) | (rtp->send_payload << 16) | (rtp->seqno));
 
        /* Send it 3 times, that's the magical number */
        for (i = 0; i < 3; i++) {
+
+               rtpheader[0] = htonl((2 << 30) | (rtp->send_payload << 16) | (rtp->seqno));
+
                res = rtp_sendto(instance, (void *) rtpheader, hdrlen + 4, 0, &remote_address);
                if (res < 0) {
                        ast_log(LOG_ERROR, "RTP Transmission error to %s: %s\n",
@@ -805,6 +805,8 @@ static int ast_rtp_dtmf_end_with_duration(struct ast_rtp_instance *instance, cha
                                    ast_sockaddr_stringify(&remote_address),
                                    rtp->send_payload, rtp->seqno, rtp->lastdigitts, res - hdrlen);
                }
+
+               rtp->seqno++;
        }
 
        /* Oh and we can't forget to turn off the stuff that says we are sending DTMF */