protocol/rtp: better comment for NTPTimestamp and renamed fields

This commit is contained in:
Saxon 2019-04-23 14:25:22 +09:30
parent b43f6f8072
commit 4068aea207
3 changed files with 22 additions and 12 deletions

View File

@ -263,8 +263,8 @@ func (c *Client) jitter() uint32 {
// setSenderTs allows us to safely set the current sender report timestamp. // setSenderTs allows us to safely set the current sender report timestamp.
func (c *Client) setSenderTs(t NTPTimestamp) { func (c *Client) setSenderTs(t NTPTimestamp) {
c.mu.Lock() c.mu.Lock()
binary.BigEndian.PutUint32(c.senderTs[:], t.MSW) binary.BigEndian.PutUint32(c.senderTs[:], t.Seconds)
binary.BigEndian.PutUint32(c.senderTs[4:], t.LSW) binary.BigEndian.PutUint32(c.senderTs[4:], t.Fraction)
c.mu.Unlock() c.mu.Unlock()
} }
@ -285,7 +285,7 @@ func (c *Client) delay() uint32 {
return uint32(time.Now().Sub(t).Seconds() / delayUnit) return uint32(time.Now().Sub(t).Seconds() / delayUnit)
} }
// received is called when a sender report is received to mark the receive time. // markReceivedTime is called when a sender report is received to mark the receive time.
func (c *Client) markReceivedTime() { func (c *Client) markReceivedTime() {
c.mu.Lock() c.mu.Lock()
c.receiveTime = time.Now() c.receiveTime = time.Now()

View File

@ -32,10 +32,20 @@ import (
"errors" "errors"
) )
// NTPTimestamp describes the NTP timestamp format (http://www.beaglesoft.com/Manual/page53.htm) // NTPTimestamp describes an NTP timestamp.
//
// NTP timestamps are represented as a 64-bit unsigned fixed-
// point number, in seconds relative to 0h on 1 January 1900. The integer
// part is in the first 32 bits and the fraction part in the last 32 bits.
// This format allows convenient multiple-precision arithmetic and
// conversion to Time Protocol representation (seconds), but does
// complicate the conversion to ICMP Timestamp message representation
// (milliseconds). The precision of this representation is about 200
// picoseconds, which should be adequate for even the most exotic
// requirements.
type NTPTimestamp struct { type NTPTimestamp struct {
MSW uint32 Seconds uint32
LSW uint32 Fraction uint32
} }
// Timestamp gets the timestamp from a receiver report and returns it as the most // Timestamp gets the timestamp from a receiver report and returns it as the most
@ -54,7 +64,7 @@ func Timestamp(buf []byte) (NTPTimestamp, error) {
} }
return NTPTimestamp{ return NTPTimestamp{
MSW: binary.BigEndian.Uint32(buf[8:]), Seconds: binary.BigEndian.Uint32(buf[8:]),
LSW: binary.BigEndian.Uint32(buf[12:]), Fraction: binary.BigEndian.Uint32(buf[12:]),
}, nil }, nil
} }

View File

@ -51,11 +51,11 @@ func TestTimestamp(t *testing.T) {
t.Fatalf("did not expect error: %v", err) t.Fatalf("did not expect error: %v", err)
} }
if ts.MSW != expectedMSW { if ts.Seconds != expectedMSW {
t.Errorf("most significant word of timestamp is not what's expected. \nGot: %v\n Want: %v\n", ts.MSW, expectedMSW) t.Errorf("most significant word of timestamp is not what's expected. \nGot: %v\n Want: %v\n", ts.Seconds, expectedMSW)
} }
if ts.LSW != expectedLSW { if ts.Fraction != expectedLSW {
t.Errorf("least significant word of timestamp is not what's expected. \nGot: %v\n Want: %v\n", ts.LSW, expectedLSW) t.Errorf("least significant word of timestamp is not what's expected. \nGot: %v\n Want: %v\n", ts.Fraction, expectedLSW)
} }
} }