Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(456)

Side by Side Diff: webrtc/modules/rtp_rtcp/source/rtcp_packet/bye.cc

Issue 1849243002: [rtcp] Bye::Parse updated not to use RTCPUtility (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 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 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 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
11 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/bye.h" 11 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/bye.h"
12 12
13 #include "webrtc/base/checks.h" 13 #include "webrtc/base/checks.h"
14 #include "webrtc/base/logging.h" 14 #include "webrtc/base/logging.h"
15 #include "webrtc/modules/rtp_rtcp/source/byte_io.h" 15 #include "webrtc/modules/rtp_rtcp/source/byte_io.h"
16 16 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/common_header.h"
17 using webrtc::RTCPUtility::RtcpCommonHeader;
18 17
19 namespace webrtc { 18 namespace webrtc {
20 namespace rtcp { 19 namespace rtcp {
21 20
22 // Bye packet (BYE) (RFC 3550). 21 // Bye packet (BYE) (RFC 3550).
23 // 22 //
24 // 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 23 // 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
25 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 24 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
26 // |V=2|P| SC | PT=BYE=203 | length | 25 // |V=2|P| SC | PT=BYE=203 | length |
27 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 26 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
28 // | SSRC/CSRC | 27 // | SSRC/CSRC |
29 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 28 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
30 // : ... : 29 // : ... :
31 // +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 30 // +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
32 // (opt) | length | reason for leaving ... 31 // (opt) | length | reason for leaving ...
33 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 32 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
34 Bye::Bye() : sender_ssrc_(0) {} 33 Bye::Bye() : sender_ssrc_(0) {}
35 34
36 bool Bye::Parse(const RtcpCommonHeader& header, const uint8_t* payload) { 35 bool Bye::Parse(const CommonHeader& packet) {
37 RTC_DCHECK(header.packet_type == kPacketType); 36 RTC_DCHECK(packet.type() == kPacketType);
38 37
39 const uint8_t src_count = header.count_or_format; 38 const uint8_t src_count = packet.count();
40 // Validate packet. 39 // Validate packet.
41 if (header.payload_size_bytes < 4u * src_count) { 40 if (packet.payload_size_bytes() < 4u * src_count) {
42 LOG(LS_WARNING) 41 LOG(LS_WARNING)
43 << "Packet is too small to contain CSRCs it promise to have."; 42 << "Packet is too small to contain CSRCs it promise to have.";
44 return false; 43 return false;
45 } 44 }
46 bool has_reason = (header.payload_size_bytes > 4u * src_count); 45 const uint8_t* const payload = packet.payload();
46 bool has_reason = packet.payload_size_bytes() > 4u * src_count;
47 uint8_t reason_length = 0; 47 uint8_t reason_length = 0;
48 if (has_reason) { 48 if (has_reason) {
49 reason_length = payload[4u * src_count]; 49 reason_length = payload[4u * src_count];
50 if (header.payload_size_bytes - 4u * src_count < 1u + reason_length) { 50 if (packet.payload_size_bytes() - 4u * src_count < 1u + reason_length) {
51 LOG(LS_WARNING) << "Invalid reason length: " << reason_length; 51 LOG(LS_WARNING) << "Invalid reason length: " << reason_length;
52 return false; 52 return false;
53 } 53 }
54 } 54 }
55 // Once sure packet is valid, copy values. 55 // Once sure packet is valid, copy values.
56 if (src_count == 0) { // A count value of zero is valid, but useless. 56 if (src_count == 0) { // A count value of zero is valid, but useless.
57 sender_ssrc_ = 0; 57 sender_ssrc_ = 0;
58 csrcs_.clear(); 58 csrcs_.clear();
59 } else { 59 } else {
60 sender_ssrc_ = ByteReader<uint32_t>::ReadBigEndian(payload); 60 sender_ssrc_ = ByteReader<uint32_t>::ReadBigEndian(payload);
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 } 124 }
125 125
126 size_t Bye::BlockLength() const { 126 size_t Bye::BlockLength() const {
127 size_t src_count = (1 + csrcs_.size()); 127 size_t src_count = (1 + csrcs_.size());
128 size_t reason_size_in_32bits = reason_.empty() ? 0 : (reason_.size() / 4 + 1); 128 size_t reason_size_in_32bits = reason_.empty() ? 0 : (reason_.size() / 4 + 1);
129 return kHeaderLength + 4 * (src_count + reason_size_in_32bits); 129 return kHeaderLength + 4 * (src_count + reason_size_in_32bits);
130 } 130 }
131 131
132 } // namespace rtcp 132 } // namespace rtcp
133 } // namespace webrtc 133 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtcp_packet/bye.h ('k') | webrtc/modules/rtp_rtcp/source/rtcp_packet/bye_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698