| Index: webrtc/modules/rtp_rtcp/source/rtcp_packet/app.cc
|
| diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/app.cc b/webrtc/modules/rtp_rtcp/source/rtcp_packet/app.cc
|
| index a1ad8d6427992a06b12c727b8a135416d1d47622..205fdbb092f415932e59b84a1b1c3f32d78c3689 100644
|
| --- a/webrtc/modules/rtp_rtcp/source/rtcp_packet/app.cc
|
| +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/app.cc
|
| @@ -13,12 +13,12 @@
|
| #include "webrtc/base/checks.h"
|
| #include "webrtc/base/logging.h"
|
| #include "webrtc/modules/rtp_rtcp/source/byte_io.h"
|
| -
|
| -using webrtc::RTCPUtility::RtcpCommonHeader;
|
| +#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/common_header.h"
|
|
|
| namespace webrtc {
|
| namespace rtcp {
|
| -
|
| +constexpr uint8_t App::kPacketType;
|
| +constexpr size_t App::kMaxDataSize;
|
| // Application-Defined packet (APP) (RFC 3550).
|
| //
|
| // 0 1 2 3
|
| @@ -32,13 +32,22 @@ namespace rtcp {
|
| // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
| // 8 | application-dependent data ...
|
| // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
| -bool App::Parse(const RtcpCommonHeader& header, const uint8_t* payload) {
|
| - RTC_DCHECK(header.packet_type == kPacketType);
|
| -
|
| - sub_type_ = header.count_or_format;
|
| - ssrc_ = ByteReader<uint32_t>::ReadBigEndian(&payload[0]);
|
| - name_ = ByteReader<uint32_t>::ReadBigEndian(&payload[4]);
|
| - data_.SetData(&payload[8], header.payload_size_bytes - 8);
|
| +bool App::Parse(const CommonHeader& packet) {
|
| + RTC_DCHECK_EQ(packet.type(), kPacketType);
|
| + if (packet.payload_size_bytes() < kAppBaseLength) {
|
| + LOG(LS_WARNING) << "Packet is too small to be a valid APP packet";
|
| + return false;
|
| + }
|
| + if (packet.payload_size_bytes() % 4 != 0) {
|
| + LOG(LS_WARNING)
|
| + << "Packet payload must be 32 bits aligned to make a valid APP packet";
|
| + return false;
|
| + }
|
| + sub_type_ = packet.fmt();
|
| + ssrc_ = ByteReader<uint32_t>::ReadBigEndian(&packet.payload()[0]);
|
| + name_ = ByteReader<uint32_t>::ReadBigEndian(&packet.payload()[4]);
|
| + data_.SetData(packet.payload() + kAppBaseLength,
|
| + packet.payload_size_bytes() - kAppBaseLength);
|
| return true;
|
| }
|
|
|
| @@ -49,10 +58,10 @@ void App::WithSubType(uint8_t subtype) {
|
|
|
| void App::WithData(const uint8_t* data, size_t data_length) {
|
| RTC_DCHECK(data);
|
| - RTC_DCHECK_EQ(0u, data_length % 4) << "Data must be 32 bits aligned.";
|
| - RTC_DCHECK(data_length <= kMaxDataSize) << "App data size << " << data_length
|
| - << "exceed maximum of "
|
| - << kMaxDataSize << " bytes.";
|
| + RTC_DCHECK_EQ(data_length % 4, 0u) << "Data must be 32 bits aligned.";
|
| + RTC_DCHECK_LE(data_length, kMaxDataSize) << "App data size " << data_length
|
| + << " exceed maximum of "
|
| + << kMaxDataSize << " bytes.";
|
| data_.SetData(data, data_length);
|
| }
|
|
|
|
|