[rtcp] Tmmbn/Tmmbr Parse updated not to use RTCPUtility
BUG=webrtc:5260 Review-Url: https://codereview.webrtc.org/2010723002 Cr-Commit-Position: refs/heads/master@{#12916}
This commit is contained in:
@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
namespace rtcp {
|
namespace rtcp {
|
||||||
|
constexpr uint8_t Rtpfb::kPacketType;
|
||||||
// RFC 4585, Section 6.1: Feedback format.
|
// RFC 4585, Section 6.1: Feedback format.
|
||||||
//
|
//
|
||||||
// Common packet format:
|
// Common packet format:
|
||||||
|
|||||||
@ -22,10 +22,10 @@ namespace rtcp {
|
|||||||
// RFC4585, Section 6.2
|
// RFC4585, Section 6.2
|
||||||
class Rtpfb : public RtcpPacket {
|
class Rtpfb : public RtcpPacket {
|
||||||
public:
|
public:
|
||||||
static const uint8_t kPacketType = 205;
|
static constexpr uint8_t kPacketType = 205;
|
||||||
|
|
||||||
Rtpfb() : sender_ssrc_(0), media_ssrc_(0) {}
|
Rtpfb() : sender_ssrc_(0), media_ssrc_(0) {}
|
||||||
virtual ~Rtpfb() {}
|
~Rtpfb() override {}
|
||||||
|
|
||||||
void From(uint32_t ssrc) { sender_ssrc_ = ssrc; }
|
void From(uint32_t ssrc) { sender_ssrc_ = ssrc; }
|
||||||
void To(uint32_t ssrc) { media_ssrc_ = ssrc; }
|
void To(uint32_t ssrc) { media_ssrc_ = ssrc; }
|
||||||
@ -34,7 +34,7 @@ class Rtpfb : public RtcpPacket {
|
|||||||
uint32_t media_ssrc() const { return media_ssrc_; }
|
uint32_t media_ssrc() const { return media_ssrc_; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
static const size_t kCommonFeedbackLength = 8;
|
static constexpr size_t kCommonFeedbackLength = 8;
|
||||||
void ParseCommonFeedback(const uint8_t* payload);
|
void ParseCommonFeedback(const uint8_t* payload);
|
||||||
void CreateCommonFeedback(uint8_t* payload) const;
|
void CreateCommonFeedback(uint8_t* payload) const;
|
||||||
|
|
||||||
|
|||||||
@ -13,11 +13,11 @@
|
|||||||
#include "webrtc/base/checks.h"
|
#include "webrtc/base/checks.h"
|
||||||
#include "webrtc/base/logging.h"
|
#include "webrtc/base/logging.h"
|
||||||
#include "webrtc/modules/rtp_rtcp/source/byte_io.h"
|
#include "webrtc/modules/rtp_rtcp/source/byte_io.h"
|
||||||
|
#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/common_header.h"
|
||||||
using webrtc::RTCPUtility::RtcpCommonHeader;
|
|
||||||
|
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
namespace rtcp {
|
namespace rtcp {
|
||||||
|
constexpr uint8_t Tmmbn::kFeedbackMessageType;
|
||||||
// RFC 4585: Feedback format.
|
// RFC 4585: Feedback format.
|
||||||
// Common packet format:
|
// Common packet format:
|
||||||
//
|
//
|
||||||
@ -42,23 +42,23 @@ namespace rtcp {
|
|||||||
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
// | MxTBR Exp | MxTBR Mantissa |Measured Overhead|
|
// | MxTBR Exp | MxTBR Mantissa |Measured Overhead|
|
||||||
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
bool Tmmbn::Parse(const RtcpCommonHeader& header, const uint8_t* payload) {
|
bool Tmmbn::Parse(const CommonHeader& packet) {
|
||||||
RTC_CHECK(header.packet_type == kPacketType);
|
RTC_DCHECK_EQ(packet.type(), kPacketType);
|
||||||
RTC_CHECK(header.count_or_format == kFeedbackMessageType);
|
RTC_DCHECK_EQ(packet.fmt(), kFeedbackMessageType);
|
||||||
|
|
||||||
if (header.payload_size_bytes < kCommonFeedbackLength) {
|
if (packet.payload_size_bytes() < kCommonFeedbackLength) {
|
||||||
LOG(LS_WARNING) << "Payload length " << header.payload_size_bytes
|
LOG(LS_WARNING) << "Payload length " << packet.payload_size_bytes()
|
||||||
<< " is too small for TMMBN.";
|
<< " is too small for TMMBN.";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
size_t items_size_bytes = header.payload_size_bytes - kCommonFeedbackLength;
|
size_t items_size_bytes = packet.payload_size_bytes() - kCommonFeedbackLength;
|
||||||
if (items_size_bytes % TmmbItem::kLength != 0) {
|
if (items_size_bytes % TmmbItem::kLength != 0) {
|
||||||
LOG(LS_WARNING) << "Payload length " << header.payload_size_bytes
|
LOG(LS_WARNING) << "Payload length " << packet.payload_size_bytes()
|
||||||
<< " is not valid for TMMBN.";
|
<< " is not valid for TMMBN.";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
ParseCommonFeedback(payload);
|
ParseCommonFeedback(packet.payload());
|
||||||
const uint8_t* next_item = payload + kCommonFeedbackLength;
|
const uint8_t* next_item = packet.payload() + kCommonFeedbackLength;
|
||||||
|
|
||||||
size_t number_of_items = items_size_bytes / TmmbItem::kLength;
|
size_t number_of_items = items_size_bytes / TmmbItem::kLength;
|
||||||
items_.resize(number_of_items);
|
items_.resize(number_of_items);
|
||||||
|
|||||||
@ -17,22 +17,22 @@
|
|||||||
#include "webrtc/base/constructormagic.h"
|
#include "webrtc/base/constructormagic.h"
|
||||||
#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/rtpfb.h"
|
#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/rtpfb.h"
|
||||||
#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/tmmb_item.h"
|
#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/tmmb_item.h"
|
||||||
#include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h"
|
|
||||||
|
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
namespace rtcp {
|
namespace rtcp {
|
||||||
|
class CommonHeader;
|
||||||
|
|
||||||
// Temporary Maximum Media Stream Bit Rate Notification (TMMBN).
|
// Temporary Maximum Media Stream Bit Rate Notification (TMMBN).
|
||||||
// RFC 5104, Section 4.2.2.
|
// RFC 5104, Section 4.2.2.
|
||||||
class Tmmbn : public Rtpfb {
|
class Tmmbn : public Rtpfb {
|
||||||
public:
|
public:
|
||||||
static const uint8_t kFeedbackMessageType = 4;
|
static constexpr uint8_t kFeedbackMessageType = 4;
|
||||||
|
|
||||||
Tmmbn() {}
|
Tmmbn() {}
|
||||||
~Tmmbn() override {}
|
~Tmmbn() override {}
|
||||||
|
|
||||||
// Parse assumes header is already parsed and validated.
|
// Parse assumes header is already parsed and validated.
|
||||||
bool Parse(const RTCPUtility::RtcpCommonHeader& header,
|
bool Parse(const CommonHeader& packet);
|
||||||
const uint8_t* payload); // Size of the payload is in the header.
|
|
||||||
|
|
||||||
void WithTmmbr(uint32_t ssrc, uint32_t bitrate_kbps, uint16_t overhead) {
|
void WithTmmbr(uint32_t ssrc, uint32_t bitrate_kbps, uint16_t overhead) {
|
||||||
WithTmmbr(TmmbItem(ssrc, bitrate_kbps * 1000, overhead));
|
WithTmmbr(TmmbItem(ssrc, bitrate_kbps * 1000, overhead));
|
||||||
|
|||||||
@ -12,14 +12,13 @@
|
|||||||
|
|
||||||
#include "testing/gmock/include/gmock/gmock.h"
|
#include "testing/gmock/include/gmock/gmock.h"
|
||||||
#include "testing/gtest/include/gtest/gtest.h"
|
#include "testing/gtest/include/gtest/gtest.h"
|
||||||
|
#include "webrtc/test/rtcp_packet_parser.h"
|
||||||
|
|
||||||
using testing::ElementsAreArray;
|
using testing::ElementsAreArray;
|
||||||
using testing::IsEmpty;
|
using testing::IsEmpty;
|
||||||
using testing::make_tuple;
|
using testing::make_tuple;
|
||||||
using webrtc::rtcp::TmmbItem;
|
using webrtc::rtcp::TmmbItem;
|
||||||
using webrtc::rtcp::Tmmbn;
|
using webrtc::rtcp::Tmmbn;
|
||||||
using webrtc::RTCPUtility::RtcpCommonHeader;
|
|
||||||
using webrtc::RTCPUtility::RtcpParseCommonHeader;
|
|
||||||
|
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
namespace {
|
namespace {
|
||||||
@ -32,13 +31,6 @@ const uint8_t kPacket[] = {0x84, 205, 0x00, 0x04,
|
|||||||
0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00,
|
||||||
0x23, 0x45, 0x67, 0x89,
|
0x23, 0x45, 0x67, 0x89,
|
||||||
0x0a, 0x61, 0x61, 0xfe};
|
0x0a, 0x61, 0x61, 0xfe};
|
||||||
|
|
||||||
bool ParseTmmbn(const uint8_t* buffer, size_t length, Tmmbn* tmmbn) {
|
|
||||||
RtcpCommonHeader header;
|
|
||||||
EXPECT_TRUE(RtcpParseCommonHeader(buffer, length, &header));
|
|
||||||
EXPECT_EQ(length, header.BlockSize());
|
|
||||||
return tmmbn->Parse(header, buffer + RtcpCommonHeader::kHeaderSizeBytes);
|
|
||||||
}
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
TEST(RtcpPacketTmmbnTest, Create) {
|
TEST(RtcpPacketTmmbnTest, Create) {
|
||||||
@ -54,7 +46,7 @@ TEST(RtcpPacketTmmbnTest, Create) {
|
|||||||
|
|
||||||
TEST(RtcpPacketTmmbnTest, Parse) {
|
TEST(RtcpPacketTmmbnTest, Parse) {
|
||||||
Tmmbn tmmbn;
|
Tmmbn tmmbn;
|
||||||
EXPECT_TRUE(ParseTmmbn(kPacket, sizeof(kPacket), &tmmbn));
|
EXPECT_TRUE(test::ParseSinglePacket(kPacket, &tmmbn));
|
||||||
|
|
||||||
const Tmmbn& parsed = tmmbn;
|
const Tmmbn& parsed = tmmbn;
|
||||||
|
|
||||||
@ -71,7 +63,7 @@ TEST(RtcpPacketTmmbnTest, CreateAndParseWithoutItems) {
|
|||||||
|
|
||||||
rtc::Buffer packet = tmmbn.Build();
|
rtc::Buffer packet = tmmbn.Build();
|
||||||
Tmmbn parsed;
|
Tmmbn parsed;
|
||||||
EXPECT_TRUE(ParseTmmbn(packet.data(), packet.size(), &parsed));
|
EXPECT_TRUE(test::ParseSinglePacket(packet, &parsed));
|
||||||
|
|
||||||
EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc());
|
EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc());
|
||||||
EXPECT_THAT(parsed.items(), IsEmpty());
|
EXPECT_THAT(parsed.items(), IsEmpty());
|
||||||
@ -85,7 +77,7 @@ TEST(RtcpPacketTmmbnTest, CreateAndParseWithTwoItems) {
|
|||||||
|
|
||||||
rtc::Buffer packet = tmmbn.Build();
|
rtc::Buffer packet = tmmbn.Build();
|
||||||
Tmmbn parsed;
|
Tmmbn parsed;
|
||||||
EXPECT_TRUE(ParseTmmbn(packet.data(), packet.size(), &parsed));
|
EXPECT_TRUE(test::ParseSinglePacket(packet, &parsed));
|
||||||
|
|
||||||
EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc());
|
EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc());
|
||||||
EXPECT_EQ(2u, parsed.items().size());
|
EXPECT_EQ(2u, parsed.items().size());
|
||||||
@ -101,7 +93,7 @@ TEST(RtcpPacketTmmbnTest, ParseFailsOnTooSmallPacket) {
|
|||||||
const uint8_t kSmallPacket[] = {0x84, 205, 0x00, 0x01,
|
const uint8_t kSmallPacket[] = {0x84, 205, 0x00, 0x01,
|
||||||
0x12, 0x34, 0x56, 0x78};
|
0x12, 0x34, 0x56, 0x78};
|
||||||
Tmmbn tmmbn;
|
Tmmbn tmmbn;
|
||||||
EXPECT_FALSE(ParseTmmbn(kSmallPacket, sizeof(kSmallPacket), &tmmbn));
|
EXPECT_FALSE(test::ParseSinglePacket(kSmallPacket, &tmmbn));
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(RtcpPacketTmmbnTest, ParseFailsOnUnAlignedPacket) {
|
TEST(RtcpPacketTmmbnTest, ParseFailsOnUnAlignedPacket) {
|
||||||
@ -111,6 +103,6 @@ TEST(RtcpPacketTmmbnTest, ParseFailsOnUnAlignedPacket) {
|
|||||||
0x23, 0x45, 0x67, 0x89};
|
0x23, 0x45, 0x67, 0x89};
|
||||||
|
|
||||||
Tmmbn tmmbn;
|
Tmmbn tmmbn;
|
||||||
EXPECT_FALSE(ParseTmmbn(kUnalignedPacket, sizeof(kUnalignedPacket), &tmmbn));
|
EXPECT_FALSE(test::ParseSinglePacket(kUnalignedPacket, &tmmbn));
|
||||||
}
|
}
|
||||||
} // namespace webrtc
|
} // namespace webrtc
|
||||||
|
|||||||
@ -13,11 +13,11 @@
|
|||||||
#include "webrtc/base/checks.h"
|
#include "webrtc/base/checks.h"
|
||||||
#include "webrtc/base/logging.h"
|
#include "webrtc/base/logging.h"
|
||||||
#include "webrtc/modules/rtp_rtcp/source/byte_io.h"
|
#include "webrtc/modules/rtp_rtcp/source/byte_io.h"
|
||||||
|
#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/common_header.h"
|
||||||
using webrtc::RTCPUtility::RtcpCommonHeader;
|
|
||||||
|
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
namespace rtcp {
|
namespace rtcp {
|
||||||
|
constexpr uint8_t Tmmbr::kFeedbackMessageType;
|
||||||
// RFC 4585: Feedback format.
|
// RFC 4585: Feedback format.
|
||||||
// Common packet format:
|
// Common packet format:
|
||||||
//
|
//
|
||||||
@ -43,24 +43,24 @@ namespace rtcp {
|
|||||||
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
// | MxTBR Exp | MxTBR Mantissa |Measured Overhead|
|
// | MxTBR Exp | MxTBR Mantissa |Measured Overhead|
|
||||||
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
bool Tmmbr::Parse(const RtcpCommonHeader& header, const uint8_t* payload) {
|
bool Tmmbr::Parse(const CommonHeader& packet) {
|
||||||
RTC_CHECK(header.packet_type == kPacketType);
|
RTC_DCHECK_EQ(packet.type(), kPacketType);
|
||||||
RTC_CHECK(header.count_or_format == kFeedbackMessageType);
|
RTC_DCHECK_EQ(packet.fmt(), kFeedbackMessageType);
|
||||||
|
|
||||||
if (header.payload_size_bytes < kCommonFeedbackLength + TmmbItem::kLength) {
|
if (packet.payload_size_bytes() < kCommonFeedbackLength + TmmbItem::kLength) {
|
||||||
LOG(LS_WARNING) << "Payload length " << header.payload_size_bytes
|
LOG(LS_WARNING) << "Payload length " << packet.payload_size_bytes()
|
||||||
<< " is too small for a TMMBR.";
|
<< " is too small for a TMMBR.";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
size_t items_size_bytes = header.payload_size_bytes - kCommonFeedbackLength;
|
size_t items_size_bytes = packet.payload_size_bytes() - kCommonFeedbackLength;
|
||||||
if (items_size_bytes % TmmbItem::kLength != 0) {
|
if (items_size_bytes % TmmbItem::kLength != 0) {
|
||||||
LOG(LS_WARNING) << "Payload length " << header.payload_size_bytes
|
LOG(LS_WARNING) << "Payload length " << packet.payload_size_bytes()
|
||||||
<< " is not valid for a TMMBR.";
|
<< " is not valid for a TMMBR.";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
ParseCommonFeedback(payload);
|
ParseCommonFeedback(packet.payload());
|
||||||
|
|
||||||
const uint8_t* next_item = payload + kCommonFeedbackLength;
|
const uint8_t* next_item = packet.payload() + kCommonFeedbackLength;
|
||||||
size_t number_of_items = items_size_bytes / TmmbItem::kLength;
|
size_t number_of_items = items_size_bytes / TmmbItem::kLength;
|
||||||
items_.resize(number_of_items);
|
items_.resize(number_of_items);
|
||||||
for (TmmbItem& item : items_) {
|
for (TmmbItem& item : items_) {
|
||||||
|
|||||||
@ -17,22 +17,22 @@
|
|||||||
#include "webrtc/base/constructormagic.h"
|
#include "webrtc/base/constructormagic.h"
|
||||||
#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/rtpfb.h"
|
#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/rtpfb.h"
|
||||||
#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/tmmb_item.h"
|
#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/tmmb_item.h"
|
||||||
#include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h"
|
|
||||||
|
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
namespace rtcp {
|
namespace rtcp {
|
||||||
|
class CommonHeader;
|
||||||
|
|
||||||
// Temporary Maximum Media Stream Bit Rate Request (TMMBR).
|
// Temporary Maximum Media Stream Bit Rate Request (TMMBR).
|
||||||
// RFC 5104, Section 4.2.1.
|
// RFC 5104, Section 4.2.1.
|
||||||
class Tmmbr : public Rtpfb {
|
class Tmmbr : public Rtpfb {
|
||||||
public:
|
public:
|
||||||
static const uint8_t kFeedbackMessageType = 3;
|
static constexpr uint8_t kFeedbackMessageType = 3;
|
||||||
|
|
||||||
Tmmbr() {}
|
Tmmbr() {}
|
||||||
~Tmmbr() override {}
|
~Tmmbr() override {}
|
||||||
|
|
||||||
// Parse assumes header is already parsed and validated.
|
// Parse assumes header is already parsed and validated.
|
||||||
bool Parse(const RTCPUtility::RtcpCommonHeader& header,
|
bool Parse(const CommonHeader& packet);
|
||||||
const uint8_t* payload); // Size of the payload is in the header.
|
|
||||||
|
|
||||||
void WithTmmbr(const TmmbItem& item);
|
void WithTmmbr(const TmmbItem& item);
|
||||||
|
|
||||||
|
|||||||
@ -12,14 +12,13 @@
|
|||||||
|
|
||||||
#include "testing/gmock/include/gmock/gmock.h"
|
#include "testing/gmock/include/gmock/gmock.h"
|
||||||
#include "testing/gtest/include/gtest/gtest.h"
|
#include "testing/gtest/include/gtest/gtest.h"
|
||||||
|
#include "webrtc/test/rtcp_packet_parser.h"
|
||||||
|
|
||||||
using testing::ElementsAreArray;
|
using testing::ElementsAreArray;
|
||||||
using testing::IsEmpty;
|
using testing::IsEmpty;
|
||||||
using testing::make_tuple;
|
using testing::make_tuple;
|
||||||
using webrtc::rtcp::TmmbItem;
|
using webrtc::rtcp::TmmbItem;
|
||||||
using webrtc::rtcp::Tmmbr;
|
using webrtc::rtcp::Tmmbr;
|
||||||
using webrtc::RTCPUtility::RtcpCommonHeader;
|
|
||||||
using webrtc::RTCPUtility::RtcpParseCommonHeader;
|
|
||||||
|
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
namespace {
|
namespace {
|
||||||
@ -32,13 +31,6 @@ const uint8_t kPacket[] = {0x83, 205, 0x00, 0x04,
|
|||||||
0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00,
|
||||||
0x23, 0x45, 0x67, 0x89,
|
0x23, 0x45, 0x67, 0x89,
|
||||||
0x0a, 0x61, 0x61, 0xfe};
|
0x0a, 0x61, 0x61, 0xfe};
|
||||||
|
|
||||||
bool ParseTmmbr(const uint8_t* buffer, size_t length, Tmmbr* tmmbr) {
|
|
||||||
RtcpCommonHeader header;
|
|
||||||
EXPECT_TRUE(RtcpParseCommonHeader(buffer, length, &header));
|
|
||||||
EXPECT_EQ(length, header.BlockSize());
|
|
||||||
return tmmbr->Parse(header, buffer + RtcpCommonHeader::kHeaderSizeBytes);
|
|
||||||
}
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
TEST(RtcpPacketTmmbrTest, Create) {
|
TEST(RtcpPacketTmmbrTest, Create) {
|
||||||
@ -54,7 +46,7 @@ TEST(RtcpPacketTmmbrTest, Create) {
|
|||||||
|
|
||||||
TEST(RtcpPacketTmmbrTest, Parse) {
|
TEST(RtcpPacketTmmbrTest, Parse) {
|
||||||
Tmmbr tmmbr;
|
Tmmbr tmmbr;
|
||||||
EXPECT_TRUE(ParseTmmbr(kPacket, sizeof(kPacket), &tmmbr));
|
EXPECT_TRUE(test::ParseSinglePacket(kPacket, &tmmbr));
|
||||||
const Tmmbr& parsed = tmmbr;
|
const Tmmbr& parsed = tmmbr;
|
||||||
|
|
||||||
EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc());
|
EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc());
|
||||||
@ -73,7 +65,7 @@ TEST(RtcpPacketTmmbrTest, CreateAndParseWithTwoEntries) {
|
|||||||
rtc::Buffer packet = tmmbr.Build();
|
rtc::Buffer packet = tmmbr.Build();
|
||||||
|
|
||||||
Tmmbr parsed;
|
Tmmbr parsed;
|
||||||
EXPECT_TRUE(ParseTmmbr(packet.data(), packet.size(), &parsed));
|
EXPECT_TRUE(test::ParseSinglePacket(packet, &parsed));
|
||||||
|
|
||||||
EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc());
|
EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc());
|
||||||
EXPECT_EQ(2u, parsed.requests().size());
|
EXPECT_EQ(2u, parsed.requests().size());
|
||||||
@ -87,7 +79,7 @@ TEST(RtcpPacketTmmbrTest, ParseFailsWithoutItems) {
|
|||||||
0x00, 0x00, 0x00, 0x00};
|
0x00, 0x00, 0x00, 0x00};
|
||||||
|
|
||||||
Tmmbr tmmbr;
|
Tmmbr tmmbr;
|
||||||
EXPECT_FALSE(ParseTmmbr(kZeroItemsPacket, sizeof(kZeroItemsPacket), &tmmbr));
|
EXPECT_FALSE(test::ParseSinglePacket(kZeroItemsPacket, &tmmbr));
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(RtcpPacketTmmbrTest, ParseFailsOnUnAlignedPacket) {
|
TEST(RtcpPacketTmmbrTest, ParseFailsOnUnAlignedPacket) {
|
||||||
@ -99,6 +91,6 @@ TEST(RtcpPacketTmmbrTest, ParseFailsOnUnAlignedPacket) {
|
|||||||
0x34, 0x56, 0x78, 0x9a};
|
0x34, 0x56, 0x78, 0x9a};
|
||||||
|
|
||||||
Tmmbr tmmbr;
|
Tmmbr tmmbr;
|
||||||
EXPECT_FALSE(ParseTmmbr(kUnalignedPacket, sizeof(kUnalignedPacket), &tmmbr));
|
EXPECT_FALSE(test::ParseSinglePacket(kUnalignedPacket, &tmmbr));
|
||||||
}
|
}
|
||||||
} // namespace webrtc
|
} // namespace webrtc
|
||||||
|
|||||||
Reference in New Issue
Block a user