From 1f609c858251b34275f15e8dbe10297b820cdb94 Mon Sep 17 00:00:00 2001 From: Harald Alvestrand Date: Mon, 7 Nov 2022 17:12:07 +0000 Subject: [PATCH] Add aliases for StreamInterface::Read/Write using ArrayView A few usages in ssl_stream_adapter_unittests are converted to make sure the aliases are usable. Next steps are: - Change all usages inside WebRTC to the new form - Deprecate the old API - Remove the old API Pipewire failures believed to be unrelated, so No-try. No-try: true Bug: webrtc:14632 Change-Id: I618551e61a05d53e524e97483d3c7cef59b88a25 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/282221 Reviewed-by: Tomas Gunnarsson Commit-Queue: Harald Alvestrand Reviewed-by: Danil Chapovalov Cr-Commit-Position: refs/heads/main@{#38577} --- rtc_base/ssl_stream_adapter_unittest.cc | 13 ++++++++----- rtc_base/stream.h | 15 +++++++++++++++ 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/rtc_base/ssl_stream_adapter_unittest.cc b/rtc_base/ssl_stream_adapter_unittest.cc index 49cbbe0a02..f6a7e323de 100644 --- a/rtc_base/ssl_stream_adapter_unittest.cc +++ b/rtc_base/ssl_stream_adapter_unittest.cc @@ -583,10 +583,11 @@ class SSLStreamAdapterTestBase : public ::testing::Test, // SS_OPENING and writes should return SR_BLOCK. EXPECT_EQ(rtc::SS_OPENING, client_ssl_->GetState()); EXPECT_EQ(rtc::SS_OPENING, server_ssl_->GetState()); - unsigned char packet[1]; + uint8_t packet[1]; size_t sent; - EXPECT_EQ(rtc::SR_BLOCK, client_ssl_->Write(&packet, 1, &sent, 0)); - EXPECT_EQ(rtc::SR_BLOCK, server_ssl_->Write(&packet, 1, &sent, 0)); + int error; + EXPECT_EQ(rtc::SR_BLOCK, client_ssl_->Write(packet, sent, error)); + EXPECT_EQ(rtc::SR_BLOCK, server_ssl_->Write(packet, sent, error)); // Collect both of the certificate digests; needs to be done before calling // SetPeerCertificateDigest as that may reset the identity. @@ -625,8 +626,10 @@ class SSLStreamAdapterTestBase : public ::testing::Test, EXPECT_EQ(rtc::SS_OPEN, client_ssl_->GetState()); // If the client sends a packet while the server still hasn't verified the // client identity, the server should continue to return SR_BLOCK. - EXPECT_EQ(rtc::SR_SUCCESS, client_ssl_->Write(&packet, 1, &sent, 0)); - EXPECT_EQ(rtc::SR_BLOCK, server_ssl_->Read(&packet, 1, 0, 0)); + int error; + EXPECT_EQ(rtc::SR_SUCCESS, client_ssl_->Write(packet, sent, error)); + size_t read; + EXPECT_EQ(rtc::SR_BLOCK, server_ssl_->Read(packet, read, error)); } else { EXPECT_EQ(rtc::SS_CLOSED, client_ssl_->GetState()); } diff --git a/rtc_base/stream.h b/rtc_base/stream.h index 7a9a588733..c57ee61fcc 100644 --- a/rtc_base/stream.h +++ b/rtc_base/stream.h @@ -13,6 +13,7 @@ #include +#include "api/array_view.h" #include "rtc_base/buffer.h" #include "rtc_base/system/rtc_export.h" #include "rtc_base/third_party/sigslot/sigslot.h" @@ -72,10 +73,20 @@ class RTC_EXPORT StreamInterface { size_t buffer_len, size_t* read, int* error) = 0; + virtual StreamResult Read(rtc::ArrayView buffer, + size_t& read, + int& error) { + return Read(buffer.data(), buffer.size(), &read, &error); + } virtual StreamResult Write(const void* data, size_t data_len, size_t* written, int* error) = 0; + virtual StreamResult Write(rtc::ArrayView data, + size_t& written, + int& error) { + return Write(data.data(), data.size(), &written, &error); + } // Attempt to transition to the SS_CLOSED state. SE_CLOSE will not be // signalled as a result of this call. virtual void Close() = 0; @@ -109,6 +120,10 @@ class RTC_EXPORT StreamInterface { size_t* written, int* error); + StreamResult WriteAll(ArrayView data, size_t& written, int& error) { + return WriteAll(data.data(), data.size(), &written, &error); + } + protected: StreamInterface(); };