Make sure we increase the timestamp between digits (bug #3675)
authorMark Spencer <markster@digium.com>
Sun, 27 Feb 2005 05:59:24 +0000 (05:59 +0000)
committerMark Spencer <markster@digium.com>
Sun, 27 Feb 2005 05:59:24 +0000 (05:59 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@5097 65c4cc65-6c06-0410-ace0-fbb531ad65f3

rtp.c

diff --git a/rtp.c b/rtp.c
index 09dfbbf..210bd57 100755 (executable)
--- a/rtp.c
+++ b/rtp.c
@@ -85,6 +85,7 @@ struct ast_rtp {
        int dtmfcount;
        unsigned int dtmfduration;
        int nat;
+       int digitssent;
        int flags;
        struct sockaddr_in us;
        struct sockaddr_in them;
@@ -1010,6 +1011,7 @@ void ast_rtp_reset(struct ast_rtp *rtp)
        memset(&rtp->dtmfmute, 0, sizeof(rtp->dtmfmute));
        rtp->lastts = 0;
        rtp->lastrxts = 0;
+       rtp->digitssent = 0;
        rtp->lastividtimestamp = 0;
        rtp->lastovidtimestamp = 0;
        rtp->lasteventseqn = 0;
@@ -1101,10 +1103,14 @@ int ast_rtp_senddigit(struct ast_rtp *rtp, char digit)
        
        /* Get a pointer to the header */
        rtpheader = (unsigned int *)data;
-       rtpheader[0] = htonl((2 << 30) | (1 << 23) | (payload << 16) | (rtp->seqno++));
-       rtpheader[1] = htonl(rtp->lastts);
+       rtpheader[0] = htonl((2 << 30) | (1 << 23) | (payload << 16) | rtp->seqno);
+       rtpheader[1] = htonl(rtp->lastts + (rtp->digitssent * 160));
        rtpheader[2] = htonl(rtp->ssrc); 
        rtpheader[3] = htonl((digit << 24) | (0xa << 16) | (0));
+
+       rtp->seqno++;
+       rtp->digitssent++;
+
        for (x=0;x<6;x++) {
                if (rtp->them.sin_port && rtp->them.sin_addr.s_addr) {
                        res = sendto(rtp->s, (void *)rtpheader, hdrlen + 4, 0, (struct sockaddr *)&rtp->them, sizeof(rtp->them));
@@ -1272,6 +1278,7 @@ static int ast_rtp_raw_write(struct ast_rtp *rtp, struct ast_frame *f, int codec
        put_uint32(rtpheader + 4, htonl(rtp->lastts));
        put_uint32(rtpheader + 8, htonl(rtp->ssrc)); 
 
+       rtp->digitssent = 0;
        rtp->seqno++;
 
        if (rtp->them.sin_port && rtp->them.sin_addr.s_addr) {