]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
When parsing the NTP timestamp in a sender report message, you are supposed to
authorRussell Bryant <russell@russellbryant.com>
Wed, 7 Feb 2007 17:39:31 +0000 (17:39 +0000)
committerRussell Bryant <russell@russellbryant.com>
Wed, 7 Feb 2007 17:39:31 +0000 (17:39 +0000)
take the low 16 bits of the integer part, and the high 16 bits of the
fractional part.  However, the code here was erroneously taking the low 16 bits
of the fractional part.  It then shifted the result 16 bits down, so the result
was always zero.  This fix makes it grab the appropriate high 16 bits, instead.
(issue #8991, pointed out by andre_abrantes)

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

main/rtp.c

index 394bd4aebeb24f79851d4746abe85d051ffb7455..78349f23671c3be10a6317f04d24dbfeaeee2d79 100644 (file)
@@ -898,7 +898,7 @@ struct ast_frame *ast_rtcp_read(struct ast_rtp *rtp)
                        gettimeofday(&rtp->rtcp->rxlsr,NULL); /* To be able to populate the dlsr */
                        rtp->rtcp->spc = ntohl(rtcpheader[i+3]);
                        rtp->rtcp->soc = ntohl(rtcpheader[i + 4]);
-                       rtp->rtcp->themrxlsr = ((ntohl(rtcpheader[i]) & 0x0000ffff) << 16) | ((ntohl(rtcpheader[i + 1]) & 0xffff) >> 16); /* Going to LSR in RR*/
+                       rtp->rtcp->themrxlsr = ((ntohl(rtcpheader[i]) & 0x0000ffff) << 16) | ((ntohl(rtcpheader[i + 1]) & 0xffff0000) >> 16); /* Going to LSR in RR*/
     
                        if (rtcp_debug_test_addr(&sin)) {
                                ast_verbose("NTP timestamp: %lu.%010lu\n", (unsigned long) ntohl(rtcpheader[i]), (unsigned long) ntohl(rtcpheader[i + 1]) * 4096);