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 12 #ifndef MODULES_RTP_RTCP_SOURCE_RTCP_PACKET_REPORT_BLOCK_H_ 13 #define MODULES_RTP_RTCP_SOURCE_RTCP_PACKET_REPORT_BLOCK_H_ 14 15 #include <stddef.h> 16 #include <stdint.h> 17 18 namespace webrtc { 19 namespace rtcp { 20 21 // A ReportBlock represents the Sender Report packet from 22 // RFC 3550 section 6.4.1. 23 class ReportBlock { 24 public: 25 static const size_t kLength = 24; 26 27 ReportBlock(); ~ReportBlock()28 ~ReportBlock() {} 29 30 bool Parse(const uint8_t* buffer, size_t length); 31 32 // Fills buffer with the ReportBlock. 33 // Consumes ReportBlock::kLength bytes. 34 void Create(uint8_t* buffer) const; 35 SetMediaSsrc(uint32_t ssrc)36 void SetMediaSsrc(uint32_t ssrc) { source_ssrc_ = ssrc; } SetFractionLost(uint8_t fraction_lost)37 void SetFractionLost(uint8_t fraction_lost) { 38 fraction_lost_ = fraction_lost; 39 } 40 bool SetCumulativeLost(int32_t cumulative_lost); SetExtHighestSeqNum(uint32_t ext_highest_seq_num)41 void SetExtHighestSeqNum(uint32_t ext_highest_seq_num) { 42 extended_high_seq_num_ = ext_highest_seq_num; 43 } SetJitter(uint32_t jitter)44 void SetJitter(uint32_t jitter) { jitter_ = jitter; } SetLastSr(uint32_t last_sr)45 void SetLastSr(uint32_t last_sr) { last_sr_ = last_sr; } SetDelayLastSr(uint32_t delay_last_sr)46 void SetDelayLastSr(uint32_t delay_last_sr) { 47 delay_since_last_sr_ = delay_last_sr; 48 } 49 source_ssrc()50 uint32_t source_ssrc() const { return source_ssrc_; } fraction_lost()51 uint8_t fraction_lost() const { return fraction_lost_; } cumulative_lost_signed()52 int32_t cumulative_lost_signed() const { return cumulative_lost_; } 53 // Deprecated - returns max(0, cumulative_lost_), not negative values. 54 uint32_t cumulative_lost() const; extended_high_seq_num()55 uint32_t extended_high_seq_num() const { return extended_high_seq_num_; } jitter()56 uint32_t jitter() const { return jitter_; } last_sr()57 uint32_t last_sr() const { return last_sr_; } delay_since_last_sr()58 uint32_t delay_since_last_sr() const { return delay_since_last_sr_; } 59 60 private: 61 uint32_t source_ssrc_; // 32 bits 62 uint8_t fraction_lost_; // 8 bits representing a fixed point value 0..1 63 int32_t cumulative_lost_; // Signed 24-bit value 64 uint32_t extended_high_seq_num_; // 32 bits 65 uint32_t jitter_; // 32 bits 66 uint32_t last_sr_; // 32 bits 67 uint32_t delay_since_last_sr_; // 32 bits, units of 1/65536 seconds 68 }; 69 70 } // namespace rtcp 71 } // namespace webrtc 72 #endif // MODULES_RTP_RTCP_SOURCE_RTCP_PACKET_REPORT_BLOCK_H_ 73