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

Side by Side Diff: webrtc/modules/rtp_rtcp/source/rtp_packet.cc

Issue 2801733002: Move rtp header extension length check from Packet::FindExtension to ExtensionT::Parse (Closed)
Patch Set: Created 3 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) 2016 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2016 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
(...skipping 515 matching lines...) Expand 10 before | Expand all | Expand 10 after
526 payload_offset_ = extension_offset + extensions_capacity; 526 payload_offset_ = extension_offset + extensions_capacity;
527 } 527 }
528 528
529 if (payload_offset_ + padding_size_ > size) { 529 if (payload_offset_ + padding_size_ > size) {
530 return false; 530 return false;
531 } 531 }
532 payload_size_ = size - payload_offset_ - padding_size_; 532 payload_size_ = size - payload_offset_ - padding_size_;
533 return true; 533 return true;
534 } 534 }
535 535
536 bool Packet::FindExtension(ExtensionType type, 536 rtc::ArrayView<const uint8_t> Packet::FindExtension(ExtensionType type) const {
537 uint8_t length,
538 uint16_t* offset) const {
539 RTC_DCHECK(offset);
540 for (const ExtensionInfo& extension : extension_entries_) { 537 for (const ExtensionInfo& extension : extension_entries_) {
541 if (extension.type == type) { 538 if (extension.type == type) {
542 if (extension.length == 0) { 539 if (extension.length == 0) {
543 // Extension is registered but not set. 540 // Extension is registered but not set.
544 return false; 541 return nullptr;
545 } 542 }
546 if (length != extension.length) { 543 return rtc::MakeArrayView(data() + extension.offset, extension.length);
547 LOG(LS_WARNING) << "Length mismatch for extension '" << type
548 << "': expected " << static_cast<int>(length)
549 << ", received " << static_cast<int>(extension.length);
550 return false;
551 }
552 *offset = extension.offset;
553 return true;
554 } 544 }
555 } 545 }
556 return false; 546 return nullptr;
557 } 547 }
558 548
559 rtc::ArrayView<uint8_t> Packet::AllocateExtension(ExtensionType type, 549 rtc::ArrayView<uint8_t> Packet::AllocateExtension(ExtensionType type,
560 size_t length) { 550 size_t length) {
561 for (size_t i = 0; i < kMaxExtensionHeaders; ++i) { 551 for (size_t i = 0; i < kMaxExtensionHeaders; ++i) {
562 if (extension_entries_[i].type == type) { 552 if (extension_entries_[i].type == type) {
563 int extension_id = i + 1; 553 int extension_id = i + 1;
564 return AllocateRawExtension(extension_id, length); 554 return AllocateRawExtension(extension_id, length);
565 } 555 }
566 } 556 }
567 // Extension not registered. 557 // Extension not registered.
568 return nullptr; 558 return nullptr;
569 } 559 }
570 560
571 uint8_t* Packet::WriteAt(size_t offset) { 561 uint8_t* Packet::WriteAt(size_t offset) {
572 return buffer_.data() + offset; 562 return buffer_.data() + offset;
573 } 563 }
574 564
575 void Packet::WriteAt(size_t offset, uint8_t byte) { 565 void Packet::WriteAt(size_t offset, uint8_t byte) {
576 buffer_.data()[offset] = byte; 566 buffer_.data()[offset] = byte;
577 } 567 }
578 568
579 } // namespace rtp 569 } // namespace rtp
580 } // namespace webrtc 570 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtp_packet.h ('k') | webrtc/modules/rtp_rtcp/source/rtp_packet_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698