From e324acbb8a9e8123cf43c13ee9bb5cf00b14d189 Mon Sep 17 00:00:00 2001 From: markster Date: Sun, 27 Feb 2005 05:59:24 +0000 Subject: Make sure we increase the timestamp between digits (bug #3675) git-svn-id: http://svn.digium.com/svn/asterisk/trunk@5097 f38db490-d61c-443f-a65b-d21fe96a405b --- rtp.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'rtp.c') diff --git a/rtp.c b/rtp.c index 09dfbbf3e..210bd5760 100755 --- 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) { -- cgit v1.2.3