Chromium Code Reviews| 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..58d7334d052e5916f74d7159fa77c023430ad46c 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,17 @@ 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) { |
|
åsapersson
2016/07/26 09:58:15
is payload_size_bytes multiple of 4 here or should
danilchap
2016/07/26 11:37:02
Good point.
It is possible to create a packet wher
|
| + LOG(LS_WARNING) << "Packet is too small to be 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 +53,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); |
| } |