tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

rrtr.cc (2020B)


      1 /*
      2 *  Copyright (c) 2015 The WebRTC project authors. All Rights Reserved.
      3 *
      4 *  Use of this source code is governed by a BSD-style license
      5 *  that can be found in the LICENSE file in the root of the source
      6 *  tree. An additional intellectual property rights grant can be found
      7 *  in the file PATENTS.  All contributing project authors may
      8 *  be found in the AUTHORS file in the root of the source tree.
      9 */
     10 
     11 #include "modules/rtp_rtcp/source/rtcp_packet/rrtr.h"
     12 
     13 #include <cstdint>
     14 
     15 #include "modules/rtp_rtcp/source/byte_io.h"
     16 #include "rtc_base/checks.h"
     17 
     18 namespace webrtc {
     19 namespace rtcp {
     20 // Receiver Reference Time Report Block (RFC 3611).
     21 //
     22 //   0                   1                   2                   3
     23 //   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     24 //  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     25 //  |     BT=4      |   reserved    |       block length = 2        |
     26 //  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     27 //  |              NTP timestamp, most significant word             |
     28 //  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     29 //  |             NTP timestamp, least significant word             |
     30 //  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     31 
     32 void Rrtr::Parse(const uint8_t* buffer) {
     33  RTC_DCHECK(buffer[0] == kBlockType);
     34  // reserved = buffer[1];
     35  RTC_DCHECK(ByteReader<uint16_t>::ReadBigEndian(&buffer[2]) == kBlockLength);
     36  uint32_t seconds = ByteReader<uint32_t>::ReadBigEndian(&buffer[4]);
     37  uint32_t fraction = ByteReader<uint32_t>::ReadBigEndian(&buffer[8]);
     38  ntp_.Set(seconds, fraction);
     39 }
     40 
     41 void Rrtr::Create(uint8_t* buffer) const {
     42  const uint8_t kReserved = 0;
     43  buffer[0] = kBlockType;
     44  buffer[1] = kReserved;
     45  ByteWriter<uint16_t>::WriteBigEndian(&buffer[2], kBlockLength);
     46  ByteWriter<uint32_t>::WriteBigEndian(&buffer[4], ntp_.seconds());
     47  ByteWriter<uint32_t>::WriteBigEndian(&buffer[8], ntp_.fractions());
     48 }
     49 
     50 }  // namespace rtcp
     51 }  // namespace webrtc