Delete StreamAdapterInterface
Shortens the inheritance chain between StreamInterface and
OpenSSLStreamAdapter.
Bug: webrtc:6424
Change-Id: I4306e27b583eb75c1a49efde3c27e1d81c117ac8
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/213181
Commit-Queue: Niels Moller <nisse@webrtc.org>
Reviewed-by: Taylor <deadbeef@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#33755}
diff --git a/rtc_base/openssl_stream_adapter.cc b/rtc_base/openssl_stream_adapter.cc
index 63b8069..ab2289b 100644
--- a/rtc_base/openssl_stream_adapter.cc
+++ b/rtc_base/openssl_stream_adapter.cc
@@ -288,7 +288,7 @@
OpenSSLStreamAdapter::OpenSSLStreamAdapter(
std::unique_ptr<StreamInterface> stream)
- : SSLStreamAdapter(std::move(stream)),
+ : stream_(std::move(stream)),
owner_(rtc::Thread::Current()),
state_(SSL_NONE),
role_(SSL_CLIENT),
@@ -300,7 +300,9 @@
ssl_max_version_(SSL_PROTOCOL_TLS_12),
// Default is to support legacy TLS protocols.
// This will be changed to default non-support in M82 or M83.
- support_legacy_tls_protocols_flag_(ShouldAllowLegacyTLSProtocols()) {}
+ support_legacy_tls_protocols_flag_(ShouldAllowLegacyTLSProtocols()) {
+ stream_->SignalEvent.connect(this, &OpenSSLStreamAdapter::OnEvent);
+}
OpenSSLStreamAdapter::~OpenSSLStreamAdapter() {
timeout_task_.Stop();
@@ -519,7 +521,7 @@
return -1;
}
- if (StreamAdapterInterface::GetState() != SS_OPEN) {
+ if (stream_->GetState() != SS_OPEN) {
state_ = SSL_WAIT;
return 0;
}
@@ -561,7 +563,7 @@
switch (state_) {
case SSL_NONE:
// pass-through in clear text
- return StreamAdapterInterface::Write(data, data_len, written, error);
+ return stream_->Write(data, data_len, written, error);
case SSL_WAIT:
case SSL_CONNECTING:
@@ -629,7 +631,7 @@
switch (state_) {
case SSL_NONE:
// pass-through in clear text
- return StreamAdapterInterface::Read(data, data_len, read, error);
+ return stream_->Read(data, data_len, read, error);
case SSL_WAIT:
case SSL_CONNECTING:
return SR_BLOCK;
@@ -733,7 +735,7 @@
// When we're closed at SSL layer, also close the stream level which
// performs necessary clean up. Otherwise, a new incoming packet after
// this could overflow the stream buffer.
- StreamAdapterInterface::Close();
+ stream_->Close();
}
StreamState OpenSSLStreamAdapter::GetState() const {
@@ -757,7 +759,7 @@
int err) {
int events_to_signal = 0;
int signal_error = 0;
- RTC_DCHECK(stream == this->stream());
+ RTC_DCHECK(stream == stream_.get());
if ((events & SE_OPEN)) {
RTC_DLOG(LS_VERBOSE) << "OpenSSLStreamAdapter::OnEvent SE_OPEN";
@@ -809,7 +811,9 @@
}
if (events_to_signal) {
- StreamAdapterInterface::OnEvent(stream, events_to_signal, signal_error);
+ // Note that the adapter presents itself as the origin of the stream events,
+ // since users of the adapter may not recognize the adapted object.
+ SignalEvent(this, events_to_signal, signal_error);
}
}
@@ -854,7 +858,7 @@
return -1;
}
- bio = BIO_new_stream(static_cast<StreamInterface*>(stream()));
+ bio = BIO_new_stream(stream_.get());
if (!bio) {
return -1;
}
@@ -912,8 +916,7 @@
// The caller of ContinueSSL may be the same object listening for these
// events and may not be prepared for reentrancy.
// PostEvent(SE_OPEN | SE_READ | SE_WRITE, 0);
- StreamAdapterInterface::OnEvent(stream(), SE_OPEN | SE_READ | SE_WRITE,
- 0);
+ SignalEvent(this, SE_OPEN | SE_READ | SE_WRITE, 0);
}
break;
@@ -956,7 +959,7 @@
ssl_error_code_ = err;
Cleanup(alert);
if (signal) {
- StreamAdapterInterface::OnEvent(stream(), SE_CLOSE, err);
+ SignalEvent(this, SE_CLOSE, err);
}
}
diff --git a/rtc_base/openssl_stream_adapter.h b/rtc_base/openssl_stream_adapter.h
index a09737c..58e15e3 100644
--- a/rtc_base/openssl_stream_adapter.h
+++ b/rtc_base/openssl_stream_adapter.h
@@ -136,9 +136,6 @@
// using a fake clock.
static void EnableTimeCallbackForTesting();
- protected:
- void OnEvent(StreamInterface* stream, int events, int err) override;
-
private:
enum SSLState {
// Before calling one of the StartSSL methods, data flows
@@ -151,6 +148,8 @@
SSL_CLOSED // Clean close
};
+ void OnEvent(StreamInterface* stream, int events, int err);
+
void PostEvent(int events, int err);
void SetTimeout(int delay_ms);
@@ -203,6 +202,8 @@
!peer_certificate_digest_value_.empty();
}
+ const std::unique_ptr<StreamInterface> stream_;
+
rtc::Thread* const owner_;
webrtc::ScopedTaskSafety task_safety_;
webrtc::RepeatingTaskHandle timeout_task_;
diff --git a/rtc_base/ssl_stream_adapter.cc b/rtc_base/ssl_stream_adapter.cc
index 354622e..5730af6 100644
--- a/rtc_base/ssl_stream_adapter.cc
+++ b/rtc_base/ssl_stream_adapter.cc
@@ -95,11 +95,6 @@
return std::make_unique<OpenSSLStreamAdapter>(std::move(stream));
}
-SSLStreamAdapter::SSLStreamAdapter(std::unique_ptr<StreamInterface> stream)
- : StreamAdapterInterface(stream.release()) {}
-
-SSLStreamAdapter::~SSLStreamAdapter() {}
-
bool SSLStreamAdapter::GetSslCipherSuite(int* cipher_suite) {
return false;
}
diff --git a/rtc_base/ssl_stream_adapter.h b/rtc_base/ssl_stream_adapter.h
index 977768a..6b44c76 100644
--- a/rtc_base/ssl_stream_adapter.h
+++ b/rtc_base/ssl_stream_adapter.h
@@ -118,7 +118,7 @@
// Used to send back UMA histogram value. Logged when Dtls handshake fails.
enum class SSLHandshakeError { UNKNOWN, INCOMPATIBLE_CIPHERSUITE, MAX_VALUE };
-class SSLStreamAdapter : public StreamAdapterInterface {
+class SSLStreamAdapter : public StreamInterface, public sigslot::has_slots<> {
public:
// Instantiate an SSLStreamAdapter wrapping the given stream,
// (using the selected implementation for the platform).
@@ -126,8 +126,8 @@
static std::unique_ptr<SSLStreamAdapter> Create(
std::unique_ptr<StreamInterface> stream);
- explicit SSLStreamAdapter(std::unique_ptr<StreamInterface> stream);
- ~SSLStreamAdapter() override;
+ SSLStreamAdapter() = default;
+ ~SSLStreamAdapter() override = default;
// Specify our SSL identity: key and certificate. SSLStream takes ownership
// of the SSLIdentity object and will free it when appropriate. Should be
diff --git a/rtc_base/stream.cc b/rtc_base/stream.cc
index ee72f8d..30c7678 100644
--- a/rtc_base/stream.cc
+++ b/rtc_base/stream.cc
@@ -49,68 +49,4 @@
StreamInterface::StreamInterface() {}
-///////////////////////////////////////////////////////////////////////////////
-// StreamAdapterInterface
-///////////////////////////////////////////////////////////////////////////////
-
-StreamAdapterInterface::StreamAdapterInterface(StreamInterface* stream,
- bool owned)
- : stream_(stream), owned_(owned) {
- if (nullptr != stream_)
- stream_->SignalEvent.connect(this, &StreamAdapterInterface::OnEvent);
-}
-
-StreamState StreamAdapterInterface::GetState() const {
- return stream_->GetState();
-}
-StreamResult StreamAdapterInterface::Read(void* buffer,
- size_t buffer_len,
- size_t* read,
- int* error) {
- return stream_->Read(buffer, buffer_len, read, error);
-}
-StreamResult StreamAdapterInterface::Write(const void* data,
- size_t data_len,
- size_t* written,
- int* error) {
- return stream_->Write(data, data_len, written, error);
-}
-void StreamAdapterInterface::Close() {
- stream_->Close();
-}
-
-bool StreamAdapterInterface::Flush() {
- return stream_->Flush();
-}
-
-void StreamAdapterInterface::Attach(StreamInterface* stream, bool owned) {
- if (nullptr != stream_)
- stream_->SignalEvent.disconnect(this);
- if (owned_)
- delete stream_;
- stream_ = stream;
- owned_ = owned;
- if (nullptr != stream_)
- stream_->SignalEvent.connect(this, &StreamAdapterInterface::OnEvent);
-}
-
-StreamInterface* StreamAdapterInterface::Detach() {
- if (nullptr != stream_)
- stream_->SignalEvent.disconnect(this);
- StreamInterface* stream = stream_;
- stream_ = nullptr;
- return stream;
-}
-
-StreamAdapterInterface::~StreamAdapterInterface() {
- if (owned_)
- delete stream_;
-}
-
-void StreamAdapterInterface::OnEvent(StreamInterface* stream,
- int events,
- int err) {
- SignalEvent(this, events, err);
-}
-
} // namespace rtc
diff --git a/rtc_base/stream.h b/rtc_base/stream.h
index 9bf11a2..70de65a 100644
--- a/rtc_base/stream.h
+++ b/rtc_base/stream.h
@@ -115,50 +115,6 @@
RTC_DISALLOW_COPY_AND_ASSIGN(StreamInterface);
};
-///////////////////////////////////////////////////////////////////////////////
-// StreamAdapterInterface is a convenient base-class for adapting a stream.
-// By default, all operations are pass-through. Override the methods that you
-// require adaptation. Streams should really be upgraded to reference-counted.
-// In the meantime, use the owned flag to indicate whether the adapter should
-// own the adapted stream.
-///////////////////////////////////////////////////////////////////////////////
-
-class StreamAdapterInterface : public StreamInterface,
- public sigslot::has_slots<> {
- public:
- explicit StreamAdapterInterface(StreamInterface* stream, bool owned = true);
-
- // Core Stream Interface
- StreamState GetState() const override;
- StreamResult Read(void* buffer,
- size_t buffer_len,
- size_t* read,
- int* error) override;
- StreamResult Write(const void* data,
- size_t data_len,
- size_t* written,
- int* error) override;
- void Close() override;
-
- bool Flush() override;
-
- void Attach(StreamInterface* stream, bool owned = true);
- StreamInterface* Detach();
-
- protected:
- ~StreamAdapterInterface() override;
-
- // Note that the adapter presents itself as the origin of the stream events,
- // since users of the adapter may not recognize the adapted object.
- virtual void OnEvent(StreamInterface* stream, int events, int err);
- StreamInterface* stream() { return stream_; }
-
- private:
- StreamInterface* stream_;
- bool owned_;
- RTC_DISALLOW_COPY_AND_ASSIGN(StreamAdapterInterface);
-};
-
} // namespace rtc
#endif // RTC_BASE_STREAM_H_