diff --git a/rtc_base/BUILD.gn b/rtc_base/BUILD.gn index 829f0970d1..2ba00e0034 100644 --- a/rtc_base/BUILD.gn +++ b/rtc_base/BUILD.gn @@ -1688,8 +1688,6 @@ rtc_library("rtc_base_tests_utils") { "server_socket_adapters.cc", "server_socket_adapters.h", "sigslot_tester.h", - "socket_stream.cc", - "socket_stream.h", "test_base64.h", "test_certificate_verifier.h", "test_echo_server.cc", diff --git a/rtc_base/socket_stream.cc b/rtc_base/socket_stream.cc deleted file mode 100644 index 5c993ea233..0000000000 --- a/rtc_base/socket_stream.cc +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright 2010 The WebRTC Project Authors. All rights reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -#include "rtc_base/socket_stream.h" - -#include "rtc_base/checks.h" -#include "rtc_base/socket.h" - -namespace rtc { - -SocketStream::SocketStream(Socket* socket) : socket_(nullptr) { - Attach(socket); -} - -SocketStream::~SocketStream() { - delete socket_; -} - -void SocketStream::Attach(Socket* socket) { - if (socket_) - delete socket_; - socket_ = socket; - if (socket_) { - socket_->SignalConnectEvent.connect(this, &SocketStream::OnConnectEvent); - socket_->SignalReadEvent.connect(this, &SocketStream::OnReadEvent); - socket_->SignalWriteEvent.connect(this, &SocketStream::OnWriteEvent); - socket_->SignalCloseEvent.connect(this, &SocketStream::OnCloseEvent); - } -} - -Socket* SocketStream::Detach() { - Socket* socket = socket_; - if (socket_) { - socket_->SignalConnectEvent.disconnect(this); - socket_->SignalReadEvent.disconnect(this); - socket_->SignalWriteEvent.disconnect(this); - socket_->SignalCloseEvent.disconnect(this); - socket_ = nullptr; - } - return socket; -} - -StreamState SocketStream::GetState() const { - RTC_DCHECK(socket_ != nullptr); - switch (socket_->GetState()) { - case Socket::CS_CONNECTED: - return SS_OPEN; - case Socket::CS_CONNECTING: - return SS_OPENING; - case Socket::CS_CLOSED: - default: - return SS_CLOSED; - } -} - -StreamResult SocketStream::Read(rtc::ArrayView buffer, - size_t& read, - int& error) { - RTC_DCHECK(socket_ != nullptr); - int result = socket_->Recv(buffer.data(), buffer.size(), nullptr); - if (result < 0) { - if (socket_->IsBlocking()) - return SR_BLOCK; - error = socket_->GetError(); - return SR_ERROR; - } - if ((result > 0) || (buffer.size() == 0)) { - read = result; - return SR_SUCCESS; - } - return SR_EOS; -} - -StreamResult SocketStream::Write(rtc::ArrayView data, - size_t& written, - int& error) { - RTC_DCHECK(socket_ != nullptr); - int result = socket_->Send(data.data(), data.size()); - if (result < 0) { - if (socket_->IsBlocking()) - return SR_BLOCK; - error = socket_->GetError(); - return SR_ERROR; - } - written = result; - return SR_SUCCESS; -} - -void SocketStream::Close() { - RTC_DCHECK(socket_ != nullptr); - socket_->Close(); -} - -void SocketStream::OnConnectEvent(Socket* socket) { - RTC_DCHECK(socket == socket_); - SignalEvent(this, SE_OPEN | SE_READ | SE_WRITE, 0); -} - -void SocketStream::OnReadEvent(Socket* socket) { - RTC_DCHECK(socket == socket_); - SignalEvent(this, SE_READ, 0); -} - -void SocketStream::OnWriteEvent(Socket* socket) { - RTC_DCHECK(socket == socket_); - SignalEvent(this, SE_WRITE, 0); -} - -void SocketStream::OnCloseEvent(Socket* socket, int err) { - RTC_DCHECK(socket == socket_); - SignalEvent(this, SE_CLOSE, err); -} - -} // namespace rtc diff --git a/rtc_base/socket_stream.h b/rtc_base/socket_stream.h deleted file mode 100644 index 492cc42e96..0000000000 --- a/rtc_base/socket_stream.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright 2005 The WebRTC Project Authors. All rights reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -#ifndef RTC_BASE_SOCKET_STREAM_H_ -#define RTC_BASE_SOCKET_STREAM_H_ - -#include - -#include "rtc_base/socket.h" -#include "rtc_base/stream.h" -#include "rtc_base/third_party/sigslot/sigslot.h" - -namespace rtc { - -/////////////////////////////////////////////////////////////////////////////// - -class SocketStream : public StreamInterface, public sigslot::has_slots<> { - public: - explicit SocketStream(Socket* socket); - ~SocketStream() override; - - SocketStream(const SocketStream&) = delete; - SocketStream& operator=(const SocketStream&) = delete; - - void Attach(Socket* socket); - Socket* Detach(); - - Socket* GetSocket() { return socket_; } - - StreamState GetState() const override; - - StreamResult Read(rtc::ArrayView buffer, - size_t& read, - int& error) override; - - StreamResult Write(rtc::ArrayView data, - size_t& written, - int& error) override; - - void Close() override; - - private: - void OnConnectEvent(Socket* socket); - void OnReadEvent(Socket* socket); - void OnWriteEvent(Socket* socket); - void OnCloseEvent(Socket* socket, int err); - - Socket* socket_; -}; - -/////////////////////////////////////////////////////////////////////////////// - -} // namespace rtc - -#endif // RTC_BASE_SOCKET_STREAM_H_ diff --git a/rtc_base/ssl_adapter_unittest.cc b/rtc_base/ssl_adapter_unittest.cc index 2da59ddbb2..d0aedb8c35 100644 --- a/rtc_base/ssl_adapter_unittest.cc +++ b/rtc_base/ssl_adapter_unittest.cc @@ -19,7 +19,6 @@ #include "rtc_base/gunit.h" #include "rtc_base/ip_address.h" #include "rtc_base/message_digest.h" -#include "rtc_base/socket_stream.h" #include "rtc_base/ssl_identity.h" #include "rtc_base/ssl_stream_adapter.h" #include "rtc_base/stream.h" @@ -157,6 +156,88 @@ class SSLAdapterTestDummyClient : public sigslot::has_slots<> { std::string data_; }; +namespace { + +class SocketStream : public rtc::StreamInterface, public sigslot::has_slots<> { + public: + explicit SocketStream(rtc::Socket* socket) : socket_(socket) { + socket_->SignalConnectEvent.connect(this, &SocketStream::OnConnectEvent); + socket_->SignalReadEvent.connect(this, &SocketStream::OnReadEvent); + socket_->SignalWriteEvent.connect(this, &SocketStream::OnWriteEvent); + socket_->SignalCloseEvent.connect(this, &SocketStream::OnCloseEvent); + } + + ~SocketStream() override = default; + + rtc::StreamState GetState() const override { + switch (socket_->GetState()) { + case rtc::Socket::CS_CONNECTED: + return rtc::SS_OPEN; + case rtc::Socket::CS_CONNECTING: + return rtc::SS_OPENING; + case rtc::Socket::CS_CLOSED: + default: + return rtc::SS_CLOSED; + } + } + + rtc::StreamResult Read(rtc::ArrayView buffer, + size_t& read, + int& error) override { + int result = socket_->Recv(buffer.data(), buffer.size(), nullptr); + if (result < 0) { + if (socket_->IsBlocking()) + return rtc::SR_BLOCK; + error = socket_->GetError(); + return rtc::SR_ERROR; + } + if ((result > 0) || (buffer.size() == 0)) { + read = result; + return rtc::SR_SUCCESS; + } + return rtc::SR_EOS; + } + + rtc::StreamResult Write(rtc::ArrayView data, + size_t& written, + int& error) override { + int result = socket_->Send(data.data(), data.size()); + if (result < 0) { + if (socket_->IsBlocking()) + return rtc::SR_BLOCK; + error = socket_->GetError(); + return rtc::SR_ERROR; + } + written = result; + return rtc::SR_SUCCESS; + } + + void Close() override { socket_->Close(); } + + private: + void OnConnectEvent(rtc::Socket* socket) { + RTC_DCHECK_EQ(socket, socket_.get()); + SignalEvent(this, rtc::SE_OPEN | rtc::SE_READ | rtc::SE_WRITE, 0); + } + + void OnReadEvent(rtc::Socket* socket) { + RTC_DCHECK_EQ(socket, socket_.get()); + SignalEvent(this, rtc::SE_READ, 0); + } + void OnWriteEvent(rtc::Socket* socket) { + RTC_DCHECK_EQ(socket, socket_.get()); + SignalEvent(this, rtc::SE_WRITE, 0); + } + void OnCloseEvent(rtc::Socket* socket, int err) { + RTC_DCHECK_EQ(socket, socket_.get()); + SignalEvent(this, rtc::SE_CLOSE, err); + } + + std::unique_ptr socket_; +}; + +} // namespace + class SSLAdapterTestDummyServer : public sigslot::has_slots<> { public: explicit SSLAdapterTestDummyServer(const rtc::SSLMode& ssl_mode, @@ -257,8 +338,8 @@ class SSLAdapterTestDummyServer : public sigslot::has_slots<> { private: void DoHandshake(rtc::Socket* socket) { - ssl_stream_adapter_ = rtc::SSLStreamAdapter::Create( - std::make_unique(socket)); + ssl_stream_adapter_ = + rtc::SSLStreamAdapter::Create(std::make_unique(socket)); ssl_stream_adapter_->SetMode(ssl_mode_); ssl_stream_adapter_->SetServerRole();