From 9acd4d1201ddc27153141f92790e9286c23bff2b Mon Sep 17 00:00:00 2001 From: Harald Alvestrand Date: Tue, 18 Feb 2025 15:10:32 +0000 Subject: [PATCH] Deprecate ByteBufferWriter::WriteBytes and switch usages to ByteBufferWriter::Write This is part of getting rid of "pointer + length" arguments. Bug: webrtc:42225170 Change-Id: I65a9b9550868022c0eb1f63b547195dadfbea678 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/377461 Reviewed-by: Evan Shrubsole Commit-Queue: Harald Alvestrand Cr-Commit-Position: refs/heads/main@{#43916} --- api/transport/stun.cc | 18 ++++++++++-------- p2p/base/turn_port.cc | 3 ++- p2p/base/turn_server.cc | 2 +- rtc_base/byte_buffer.h | 1 + rtc_base/byte_buffer_unittest.cc | 14 +++++++++++++- video/rtp_video_stream_receiver2_unittest.cc | 3 +-- 6 files changed, 28 insertions(+), 13 deletions(-) diff --git a/api/transport/stun.cc b/api/transport/stun.cc index 6f89028573..ce7bcdd0da 100644 --- a/api/transport/stun.cc +++ b/api/transport/stun.cc @@ -806,7 +806,7 @@ void StunAttribute::WritePadding(ByteBufferWriter* buf) const { int remainder = length_ % 4; if (remainder > 0) { uint8_t zeroes[4] = {0}; - buf->WriteBytes(zeroes, 4 - remainder); + buf->Write(webrtc::ArrayView(zeroes, 4 - remainder)); } } @@ -940,12 +940,14 @@ bool StunAddressAttribute::Write(ByteBufferWriter* buf) const { switch (address_.family()) { case AF_INET: { in_addr v4addr = address_.ipaddr().ipv4_address(); - buf->WriteBytes(reinterpret_cast(&v4addr), sizeof(v4addr)); + buf->Write(webrtc::ArrayView( + reinterpret_cast(&v4addr), sizeof(v4addr))); break; } case AF_INET6: { in6_addr v6addr = address_.ipaddr().ipv6_address(); - buf->WriteBytes(reinterpret_cast(&v6addr), sizeof(v6addr)); + buf->Write(webrtc::ArrayView( + reinterpret_cast(&v6addr), sizeof(v6addr))); break; } } @@ -1030,14 +1032,14 @@ bool StunXorAddressAttribute::Write(ByteBufferWriter* buf) const { switch (xored_ip.family()) { case AF_INET: { in_addr v4addr = xored_ip.ipv4_address(); - buf->WriteBytes(reinterpret_cast(&v4addr), - sizeof(v4addr)); + buf->Write(webrtc::ArrayView( + reinterpret_cast(&v4addr), sizeof(v4addr))); break; } case AF_INET6: { in6_addr v6addr = xored_ip.ipv6_address(); - buf->WriteBytes(reinterpret_cast(&v6addr), - sizeof(v6addr)); + buf->Write(webrtc::ArrayView( + reinterpret_cast(&v6addr), sizeof(v6addr))); break; } } @@ -1163,7 +1165,7 @@ bool StunByteStringAttribute::Write(ByteBufferWriter* buf) const { if (!LengthValid(type(), length())) { return false; } - buf->WriteBytes(bytes_, length()); + buf->Write(webrtc::ArrayView(bytes_, length())); WritePadding(buf); return true; } diff --git a/p2p/base/turn_port.cc b/p2p/base/turn_port.cc index b4da910ab3..c7c8daf630 100644 --- a/p2p/base/turn_port.cc +++ b/p2p/base/turn_port.cc @@ -1852,7 +1852,8 @@ int TurnEntry::Send(const void* data, // If the channel is bound, we can send the data as a Channel Message. buf.WriteUInt16(channel_id_); buf.WriteUInt16(static_cast(size)); - buf.WriteBytes(reinterpret_cast(data), size); + buf.Write(webrtc::ArrayView( + reinterpret_cast(data), size)); } rtc::PacketOptions modified_options(options); modified_options.info_signaled_after_sent.turn_overhead_bytes = diff --git a/p2p/base/turn_server.cc b/p2p/base/turn_server.cc index e8e238f3cf..ae36312338 100644 --- a/p2p/base/turn_server.cc +++ b/p2p/base/turn_server.cc @@ -795,7 +795,7 @@ void TurnServerAllocation::OnExternalPacket(rtc::AsyncPacketSocket* socket, rtc::ByteBufferWriter buf; buf.WriteUInt16(channel->id); buf.WriteUInt16(static_cast(packet.payload().size())); - buf.WriteBytes(packet.payload().data(), packet.payload().size()); + buf.Write(webrtc::ArrayView(packet.payload())); server_->Send(&conn_, buf); } else if (!server_->enable_permission_checks_ || HasPermission(packet.source_address().ipaddr())) { diff --git a/rtc_base/byte_buffer.h b/rtc_base/byte_buffer.h index 3c3075b516..a880bfc8e7 100644 --- a/rtc_base/byte_buffer.h +++ b/rtc_base/byte_buffer.h @@ -97,6 +97,7 @@ class ByteBufferWriterT { val.size()); } // Write an array of bytes (uint8_t) + [[deprecated("issues.webrtc.org/4225170 - use Write(ArrayView)")]] void WriteBytes(const uint8_t* val, size_t len) { WriteBytesInternal(reinterpret_cast(val), len); } diff --git a/rtc_base/byte_buffer_unittest.cc b/rtc_base/byte_buffer_unittest.cc index 3f98f9f41c..e52281d806 100644 --- a/rtc_base/byte_buffer_unittest.cc +++ b/rtc_base/byte_buffer_unittest.cc @@ -168,7 +168,7 @@ TEST(ByteBufferTest, TestReadWriteBuffer) { // Write and read bytes uint8_t write_bytes[] = {3, 2, 1}; - buffer.WriteBytes(write_bytes, 3); + buffer.Write(webrtc::ArrayView(write_bytes, 3)); ByteBufferReader read_buf7(buffer); uint8_t read_bytes[3]; EXPECT_TRUE(read_buf7.ReadBytes(read_bytes)); @@ -176,6 +176,18 @@ TEST(ByteBufferTest, TestReadWriteBuffer) { EXPECT_EQ(read_buf7.Length(), 0U); buffer.Clear(); + // Write and read bytes with deprecated function + // TODO: issues.webrtc.org/42225170 - delete +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + buffer.WriteBytes(write_bytes, 3); +#pragma clang diagnostic pop + ByteBufferReader read_buf75(buffer); + EXPECT_TRUE(read_buf75.ReadBytes(read_bytes)); + EXPECT_THAT(read_bytes, ElementsAreArray(write_bytes)); + EXPECT_EQ(read_buf75.Length(), 0U); + buffer.Clear(); + // Write and read reserved buffer space uint8_t* write_dst = buffer.ReserveWriteBuffer(3); memcpy(write_dst, write_bytes, 3); diff --git a/video/rtp_video_stream_receiver2_unittest.cc b/video/rtp_video_stream_receiver2_unittest.cc index 357fd9b895..9cf1b8d513 100644 --- a/video/rtp_video_stream_receiver2_unittest.cc +++ b/video/rtp_video_stream_receiver2_unittest.cc @@ -131,8 +131,7 @@ class MockOnCompleteFrameCallback void ClearExpectedBitstream() { buffer_.Clear(); } void AppendExpectedBitstream(const uint8_t data[], size_t size_in_bytes) { - // TODO(Johan): Let rtc::ByteBuffer handle uint8_t* instead of char*. - buffer_.WriteBytes(data, size_in_bytes); + buffer_.Write(ArrayView(data, size_in_bytes)); } rtc::ByteBufferWriter buffer_; };