From 2b5990387c6dbd2d8ea74906eb04f08592b62618 Mon Sep 17 00:00:00 2001 From: Russell Bryant Date: Wed, 7 Feb 2007 17:39:31 +0000 Subject: [PATCH] When parsing the NTP timestamp in a sender report message, you are supposed to 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 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/rtp.c b/main/rtp.c index 394bd4aebe..78349f2367 100644 --- a/main/rtp.c +++ b/main/rtp.c @@ -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);