Add rtcp::CommonHeader::packet_size function
as an alternative to NextPacket function to allow cleaner iterating over stacked rtcp packets. Bug: webrtc:5565 Change-Id: I261afe2684e5fcb5fa3e7bcce272fbefeebd0b66 Reviewed-on: https://webrtc-review.googlesource.com/21360 Reviewed-by: Niels Moller <nisse@webrtc.org> Commit-Queue: Danil Chapovalov <danilchap@webrtc.org> Cr-Commit-Position: refs/heads/master@{#20615}
This commit is contained in:
committed by
Commit Bot
parent
29cb0e7f70
commit
eb0ed28b90
@ -15,6 +15,7 @@
|
|||||||
|
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
namespace rtcp {
|
namespace rtcp {
|
||||||
|
constexpr size_t CommonHeader::kHeaderSizeBytes;
|
||||||
// 0 1 1 2 3
|
// 0 1 1 2 3
|
||||||
// 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
|
// 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
|
||||||
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
@ -27,7 +28,6 @@ namespace rtcp {
|
|||||||
//
|
//
|
||||||
// Common header for all RTCP packets, 4 octets.
|
// Common header for all RTCP packets, 4 octets.
|
||||||
bool CommonHeader::Parse(const uint8_t* buffer, size_t size_bytes) {
|
bool CommonHeader::Parse(const uint8_t* buffer, size_t size_bytes) {
|
||||||
const size_t kHeaderSizeBytes = 4;
|
|
||||||
const uint8_t kVersion = 2;
|
const uint8_t kVersion = 2;
|
||||||
|
|
||||||
if (size_bytes < kHeaderSizeBytes) {
|
if (size_bytes < kHeaderSizeBytes) {
|
||||||
|
|||||||
@ -16,6 +16,8 @@ namespace webrtc {
|
|||||||
namespace rtcp {
|
namespace rtcp {
|
||||||
class CommonHeader {
|
class CommonHeader {
|
||||||
public:
|
public:
|
||||||
|
static constexpr size_t kHeaderSizeBytes = 4;
|
||||||
|
|
||||||
CommonHeader() {}
|
CommonHeader() {}
|
||||||
CommonHeader(const CommonHeader&) = default;
|
CommonHeader(const CommonHeader&) = default;
|
||||||
CommonHeader& operator =(const CommonHeader&) = default;
|
CommonHeader& operator =(const CommonHeader&) = default;
|
||||||
@ -29,6 +31,9 @@ class CommonHeader {
|
|||||||
uint8_t count() const { return count_or_format_; }
|
uint8_t count() const { return count_or_format_; }
|
||||||
size_t payload_size_bytes() const { return payload_size_; }
|
size_t payload_size_bytes() const { return payload_size_; }
|
||||||
const uint8_t* payload() const { return payload_; }
|
const uint8_t* payload() const { return payload_; }
|
||||||
|
size_t packet_size() const {
|
||||||
|
return kHeaderSizeBytes + payload_size_ + padding_size_;
|
||||||
|
}
|
||||||
// Returns pointer to the next RTCP packet in compound packet.
|
// Returns pointer to the next RTCP packet in compound packet.
|
||||||
const uint8_t* NextPacket() const {
|
const uint8_t* NextPacket() const {
|
||||||
return payload_ + payload_size_ + padding_size_;
|
return payload_ + payload_size_ + padding_size_;
|
||||||
|
|||||||
@ -15,9 +15,6 @@
|
|||||||
using webrtc::rtcp::CommonHeader;
|
using webrtc::rtcp::CommonHeader;
|
||||||
|
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
namespace {
|
|
||||||
const size_t kHeaderSizeBytes = 4;
|
|
||||||
} // namespace
|
|
||||||
|
|
||||||
TEST(RtcpCommonHeaderTest, TooSmallBuffer) {
|
TEST(RtcpCommonHeaderTest, TooSmallBuffer) {
|
||||||
uint8_t buffer[] = {0x80, 0x00, 0x00, 0x00};
|
uint8_t buffer[] = {0x80, 0x00, 0x00, 0x00};
|
||||||
@ -53,6 +50,7 @@ TEST(RtcpCommonHeaderTest, PacketSize) {
|
|||||||
EXPECT_TRUE(header.Parse(buffer, sizeof(buffer)));
|
EXPECT_TRUE(header.Parse(buffer, sizeof(buffer)));
|
||||||
EXPECT_EQ(8u, header.payload_size_bytes());
|
EXPECT_EQ(8u, header.payload_size_bytes());
|
||||||
EXPECT_EQ(buffer + sizeof(buffer), header.NextPacket());
|
EXPECT_EQ(buffer + sizeof(buffer), header.NextPacket());
|
||||||
|
EXPECT_EQ(sizeof(buffer), header.packet_size());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(RtcpCommonHeaderTest, PaddingAndPayloadSize) {
|
TEST(RtcpCommonHeaderTest, PaddingAndPayloadSize) {
|
||||||
@ -66,7 +64,8 @@ TEST(RtcpCommonHeaderTest, PaddingAndPayloadSize) {
|
|||||||
|
|
||||||
buffer[3] = 2; // Set payload size to 2x32bit.
|
buffer[3] = 2; // Set payload size to 2x32bit.
|
||||||
const size_t kPayloadSizeBytes = buffer[3] * 4;
|
const size_t kPayloadSizeBytes = buffer[3] * 4;
|
||||||
const size_t kPaddingAddress = kHeaderSizeBytes + kPayloadSizeBytes - 1;
|
const size_t kPaddingAddress =
|
||||||
|
CommonHeader::kHeaderSizeBytes + kPayloadSizeBytes - 1;
|
||||||
|
|
||||||
// Padding one byte larger than possible.
|
// Padding one byte larger than possible.
|
||||||
buffer[kPaddingAddress] = kPayloadSizeBytes + 1;
|
buffer[kPaddingAddress] = kPayloadSizeBytes + 1;
|
||||||
@ -81,13 +80,15 @@ TEST(RtcpCommonHeaderTest, PaddingAndPayloadSize) {
|
|||||||
EXPECT_TRUE(header.Parse(buffer, sizeof(buffer)));
|
EXPECT_TRUE(header.Parse(buffer, sizeof(buffer)));
|
||||||
EXPECT_EQ(0u, header.payload_size_bytes());
|
EXPECT_EQ(0u, header.payload_size_bytes());
|
||||||
EXPECT_EQ(buffer + sizeof(buffer), header.NextPacket());
|
EXPECT_EQ(buffer + sizeof(buffer), header.NextPacket());
|
||||||
EXPECT_EQ(header.payload(), buffer + kHeaderSizeBytes);
|
EXPECT_EQ(header.payload(), buffer + CommonHeader::kHeaderSizeBytes);
|
||||||
|
EXPECT_EQ(header.packet_size(), sizeof(buffer));
|
||||||
|
|
||||||
// Single byte of actual data.
|
// Single byte of actual data.
|
||||||
buffer[kPaddingAddress] = kPayloadSizeBytes - 1;
|
buffer[kPaddingAddress] = kPayloadSizeBytes - 1;
|
||||||
EXPECT_TRUE(header.Parse(buffer, sizeof(buffer)));
|
EXPECT_TRUE(header.Parse(buffer, sizeof(buffer)));
|
||||||
EXPECT_EQ(1u, header.payload_size_bytes());
|
EXPECT_EQ(1u, header.payload_size_bytes());
|
||||||
EXPECT_EQ(buffer + sizeof(buffer), header.NextPacket());
|
EXPECT_EQ(buffer + sizeof(buffer), header.NextPacket());
|
||||||
|
EXPECT_EQ(header.packet_size(), sizeof(buffer));
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(RtcpCommonHeaderTest, FormatAndPayloadType) {
|
TEST(RtcpCommonHeaderTest, FormatAndPayloadType) {
|
||||||
@ -99,6 +100,6 @@ TEST(RtcpCommonHeaderTest, FormatAndPayloadType) {
|
|||||||
EXPECT_EQ(header.fmt(), 0x1e);
|
EXPECT_EQ(header.fmt(), 0x1e);
|
||||||
EXPECT_EQ(header.type(), 0xab);
|
EXPECT_EQ(header.type(), 0xab);
|
||||||
EXPECT_EQ(header.payload_size_bytes(), 0u);
|
EXPECT_EQ(header.payload_size_bytes(), 0u);
|
||||||
EXPECT_EQ(header.payload(), buffer + kHeaderSizeBytes);
|
EXPECT_EQ(header.payload(), buffer + CommonHeader::kHeaderSizeBytes);
|
||||||
}
|
}
|
||||||
} // namespace webrtc
|
} // namespace webrtc
|
||||||
|
|||||||
Reference in New Issue
Block a user