mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-12 21:30:45 +01:00
Add absl::AnyInvocable to SSLStreamAdapter::Create
Remove internal use of SignalSSLHandshakeError and prepare removal of sigslot dependency from SSLStreamAdapter. Bug: webrtc:11943 Change-Id: I9768e2e31529945620bdd8d0d285042bb2388b7b Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/318881 Reviewed-by: Harald Alvestrand <hta@webrtc.org> Commit-Queue: Tomas Gunnarsson <tommi@webrtc.org> Cr-Commit-Position: refs/heads/main@{#40695}
This commit is contained in:
parent
7cc1ca26c8
commit
59574ca6d3
6 changed files with 27 additions and 9 deletions
|
@ -357,7 +357,9 @@ bool DtlsTransport::SetupDtls() {
|
|||
auto downward = std::make_unique<StreamInterfaceChannel>(ice_transport_);
|
||||
StreamInterfaceChannel* downward_ptr = downward.get();
|
||||
|
||||
dtls_ = rtc::SSLStreamAdapter::Create(std::move(downward));
|
||||
dtls_ = rtc::SSLStreamAdapter::Create(
|
||||
std::move(downward),
|
||||
[this](rtc::SSLHandshakeError error) { OnDtlsHandshakeError(error); });
|
||||
if (!dtls_) {
|
||||
RTC_LOG(LS_ERROR) << ToString() << ": Failed to create DTLS adapter.";
|
||||
return false;
|
||||
|
@ -370,8 +372,6 @@ bool DtlsTransport::SetupDtls() {
|
|||
dtls_->SetMaxProtocolVersion(ssl_max_version_);
|
||||
dtls_->SetServerRole(*dtls_role_);
|
||||
dtls_->SignalEvent.connect(this, &DtlsTransport::OnDtlsEvent);
|
||||
dtls_->SignalSSLHandshakeError.connect(this,
|
||||
&DtlsTransport::OnDtlsHandshakeError);
|
||||
if (remote_fingerprint_value_.size() &&
|
||||
!dtls_->SetPeerCertificateDigest(
|
||||
remote_fingerprint_algorithm_,
|
||||
|
|
|
@ -1548,6 +1548,7 @@ rtc_library("ssl") {
|
|||
absl_deps = [
|
||||
"//third_party/abseil-cpp/absl/algorithm:container",
|
||||
"//third_party/abseil-cpp/absl/base:core_headers",
|
||||
"//third_party/abseil-cpp/absl/functional:any_invocable",
|
||||
"//third_party/abseil-cpp/absl/memory",
|
||||
"//third_party/abseil-cpp/absl/strings",
|
||||
"//third_party/abseil-cpp/absl/types:optional",
|
||||
|
|
|
@ -294,8 +294,10 @@ bool ShouldAllowLegacyTLSProtocols() {
|
|||
}
|
||||
|
||||
OpenSSLStreamAdapter::OpenSSLStreamAdapter(
|
||||
std::unique_ptr<StreamInterface> stream)
|
||||
std::unique_ptr<StreamInterface> stream,
|
||||
absl::AnyInvocable<void(SSLHandshakeError)> handshake_error)
|
||||
: stream_(std::move(stream)),
|
||||
handshake_error_(std::move(handshake_error)),
|
||||
owner_(rtc::Thread::Current()),
|
||||
state_(SSL_NONE),
|
||||
role_(SSL_CLIENT),
|
||||
|
@ -938,7 +940,13 @@ int OpenSSLStreamAdapter::ContinueSSL() {
|
|||
}
|
||||
RTC_DLOG(LS_VERBOSE) << " -- error " << code << ", " << err_code << ", "
|
||||
<< ERR_GET_REASON(err_code);
|
||||
SignalSSLHandshakeError(ssl_handshake_err);
|
||||
if (handshake_error_) {
|
||||
handshake_error_(ssl_handshake_err);
|
||||
} else {
|
||||
// TODO(bugs.webrtc.org/11943): SignalSSLHandshakeError usage has been
|
||||
// deprecated. Remove once external usage has been cleaned up.
|
||||
SignalSSLHandshakeError(ssl_handshake_err);
|
||||
}
|
||||
return (ssl_error != 0) ? ssl_error : -1;
|
||||
}
|
||||
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "absl/functional/any_invocable.h"
|
||||
#include "absl/strings/string_view.h"
|
||||
#include "absl/types/optional.h"
|
||||
#include "rtc_base/buffer.h"
|
||||
|
@ -72,7 +73,9 @@ RTC_EXPORT void SetAllowLegacyTLSProtocols(const absl::optional<bool>& allow);
|
|||
|
||||
class OpenSSLStreamAdapter final : public SSLStreamAdapter {
|
||||
public:
|
||||
explicit OpenSSLStreamAdapter(std::unique_ptr<StreamInterface> stream);
|
||||
OpenSSLStreamAdapter(
|
||||
std::unique_ptr<StreamInterface> stream,
|
||||
absl::AnyInvocable<void(SSLHandshakeError)> handshake_error);
|
||||
~OpenSSLStreamAdapter() override;
|
||||
|
||||
void SetIdentity(std::unique_ptr<SSLIdentity> identity) override;
|
||||
|
@ -202,6 +205,7 @@ class OpenSSLStreamAdapter final : public SSLStreamAdapter {
|
|||
}
|
||||
|
||||
const std::unique_ptr<StreamInterface> stream_;
|
||||
absl::AnyInvocable<void(SSLHandshakeError)> handshake_error_;
|
||||
|
||||
rtc::Thread* const owner_;
|
||||
webrtc::ScopedTaskSafety task_safety_;
|
||||
|
|
|
@ -91,8 +91,10 @@ bool IsGcmCryptoSuiteName(absl::string_view crypto_suite) {
|
|||
}
|
||||
|
||||
std::unique_ptr<SSLStreamAdapter> SSLStreamAdapter::Create(
|
||||
std::unique_ptr<StreamInterface> stream) {
|
||||
return std::make_unique<OpenSSLStreamAdapter>(std::move(stream));
|
||||
std::unique_ptr<StreamInterface> stream,
|
||||
absl::AnyInvocable<void(SSLHandshakeError)> handshake_error) {
|
||||
return std::make_unique<OpenSSLStreamAdapter>(std::move(stream),
|
||||
std::move(handshake_error));
|
||||
}
|
||||
|
||||
bool SSLStreamAdapter::GetSslCipherSuite(int* cipher_suite) {
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "absl/functional/any_invocable.h"
|
||||
#include "absl/memory/memory.h"
|
||||
#include "absl/strings/string_view.h"
|
||||
#include "rtc_base/ssl_certificate.h"
|
||||
|
@ -118,7 +119,8 @@ class SSLStreamAdapter : public StreamInterface, public sigslot::has_slots<> {
|
|||
// (using the selected implementation for the platform).
|
||||
// Caller is responsible for freeing the returned object.
|
||||
static std::unique_ptr<SSLStreamAdapter> Create(
|
||||
std::unique_ptr<StreamInterface> stream);
|
||||
std::unique_ptr<StreamInterface> stream,
|
||||
absl::AnyInvocable<void(SSLHandshakeError)> handshake_error = nullptr);
|
||||
|
||||
SSLStreamAdapter() = default;
|
||||
~SSLStreamAdapter() override = default;
|
||||
|
@ -261,6 +263,7 @@ class SSLStreamAdapter : public StreamInterface, public sigslot::has_slots<> {
|
|||
// authentication.
|
||||
bool GetClientAuthEnabled() const { return client_auth_enabled_; }
|
||||
|
||||
// TODO(bugs.webrtc.org/11943): Remove after updating downstream code.
|
||||
sigslot::signal1<SSLHandshakeError> SignalSSLHandshakeError;
|
||||
|
||||
private:
|
||||
|
|
Loading…
Reference in a new issue