Move SocketStream to test.
The class is now only used by one test class. Bug: none Change-Id: Ib7714469254bd507d027385d2825b1c14bd63c94 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/343123 Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org> Commit-Queue: Tomas Gunnarsson <tommi@webrtc.org> Cr-Commit-Position: refs/heads/main@{#41917}
This commit is contained in:
parent
a06e7eeec0
commit
bdb867f163
@ -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",
|
||||
|
||||
@ -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<uint8_t> 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<const uint8_t> 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
|
||||
@ -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 <stddef.h>
|
||||
|
||||
#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<uint8_t> buffer,
|
||||
size_t& read,
|
||||
int& error) override;
|
||||
|
||||
StreamResult Write(rtc::ArrayView<const uint8_t> 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_
|
||||
@ -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<uint8_t> 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<const uint8_t> 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<rtc::Socket> 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<rtc::SocketStream>(socket));
|
||||
ssl_stream_adapter_ =
|
||||
rtc::SSLStreamAdapter::Create(std::make_unique<SocketStream>(socket));
|
||||
|
||||
ssl_stream_adapter_->SetMode(ssl_mode_);
|
||||
ssl_stream_adapter_->SetServerRole();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user