| OLD | NEW |
| 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 Loading... |
| 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 |
| OLD | NEW |