Index: rtp.c =================================================================== RCS file: /usr/cvsroot/asterisk/rtp.c,v retrieving revision 1.109 retrieving revision 1.110 diff -u -r1.109 -r1.110 --- rtp.c 15 Feb 2005 15:57:52 -0000 1.109 +++ rtp.c 27 Feb 2005 05:59:24 -0000 1.110 @@ -85,6 +85,7 @@ int dtmfcount; unsigned int dtmfduration; int nat; + int digitssent; int flags; struct sockaddr_in us; struct sockaddr_in them; @@ -1010,6 +1011,7 @@ 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 @@ /* 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 @@ 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) {