aboutsummaryrefslogtreecommitdiffstats
path: root/rtp.c
diff options
context:
space:
mode:
authormarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2005-02-27 05:59:24 +0000
committermarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2005-02-27 05:59:24 +0000
commite324acbb8a9e8123cf43c13ee9bb5cf00b14d189 (patch)
tree97a17c16a44900c14d19708aa8763cb11a4161e0 /rtp.c
parent638364436dbf485e773e9eec371483bcd17a2770 (diff)
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
Diffstat (limited to 'rtp.c')
-rwxr-xr-xrtp.c11
1 files changed, 9 insertions, 2 deletions
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) {