diff --git a/p2p/base/dtlstransport.cc b/p2p/base/dtlstransport.cc index e88c061502..97c6b13fb7 100644 --- a/p2p/base/dtlstransport.cc +++ b/p2p/base/dtlstransport.cc @@ -114,31 +114,17 @@ void StreamInterfaceChannel::Close() { state_ = rtc::SS_CLOSED; } -DtlsTransport::DtlsTransport(IceTransportInternal* ice_transport, - const webrtc::CryptoOptions& crypto_options) - : transport_name_(ice_transport->transport_name()), - component_(ice_transport->component()), - ice_transport_(ice_transport), - downward_(NULL), - srtp_ciphers_(crypto_options.GetSupportedDtlsSrtpCryptoSuites()), - ssl_max_version_(rtc::SSL_PROTOCOL_DTLS_12), - crypto_options_(crypto_options) { - RTC_DCHECK(ice_transport_); - ConnectToIceTransport(); -} - DtlsTransport::DtlsTransport( std::unique_ptr ice_transport, const webrtc::CryptoOptions& crypto_options) : transport_name_(ice_transport->transport_name()), component_(ice_transport->component()), - ice_transport_(ice_transport.get()), - owned_ice_transport_(std::move(ice_transport)), + ice_transport_(std::move(ice_transport)), downward_(NULL), srtp_ciphers_(crypto_options.GetSupportedDtlsSrtpCryptoSuites()), ssl_max_version_(rtc::SSL_PROTOCOL_DTLS_12), crypto_options_(crypto_options) { - RTC_DCHECK(owned_ice_transport_); + RTC_DCHECK(ice_transport_); ConnectToIceTransport(); } @@ -336,7 +322,8 @@ bool DtlsTransport::ExportKeyingMaterial(const std::string& label, bool DtlsTransport::SetupDtls() { RTC_DCHECK(dtls_role_); - StreamInterfaceChannel* downward = new StreamInterfaceChannel(ice_transport_); + StreamInterfaceChannel* downward = + new StreamInterfaceChannel(ice_transport_.get()); dtls_.reset(rtc::SSLStreamAdapter::Create(downward)); if (!dtls_) { @@ -432,7 +419,7 @@ int DtlsTransport::SendPacket(const char* data, } IceTransportInternal* DtlsTransport::ice_transport() { - return ice_transport_; + return ice_transport_.get(); } bool DtlsTransport::IsDtlsConnected() { @@ -489,7 +476,7 @@ void DtlsTransport::ConnectToIceTransport() { // impl again void DtlsTransport::OnWritableState(rtc::PacketTransportInternal* transport) { RTC_DCHECK_RUN_ON(&thread_checker_); - RTC_DCHECK(transport == ice_transport_); + RTC_DCHECK(transport == ice_transport_.get()); RTC_LOG(LS_VERBOSE) << ToString() << ": ice_transport writable state changed to " << ice_transport_->writable(); @@ -521,7 +508,7 @@ void DtlsTransport::OnWritableState(rtc::PacketTransportInternal* transport) { void DtlsTransport::OnReceivingState(rtc::PacketTransportInternal* transport) { RTC_DCHECK_RUN_ON(&thread_checker_); - RTC_DCHECK(transport == ice_transport_); + RTC_DCHECK(transport == ice_transport_.get()); RTC_LOG(LS_VERBOSE) << ToString() << ": ice_transport " "receiving state changed to " @@ -538,7 +525,7 @@ void DtlsTransport::OnReadPacket(rtc::PacketTransportInternal* transport, const int64_t& packet_time_us, int flags) { RTC_DCHECK_RUN_ON(&thread_checker_); - RTC_DCHECK(transport == ice_transport_); + RTC_DCHECK(transport == ice_transport_.get()); RTC_DCHECK(flags == 0); if (!dtls_active_) { diff --git a/p2p/base/dtlstransport.h b/p2p/base/dtlstransport.h index 2dd470e2f7..ce95803aec 100644 --- a/p2p/base/dtlstransport.h +++ b/p2p/base/dtlstransport.h @@ -95,9 +95,6 @@ class DtlsTransport : public DtlsTransportInternal { // // |crypto_options| are the options used for the DTLS handshake. This affects // whether GCM crypto suites are negotiated. - // TODO(zhihuang): Remove this once we switch to JsepTransportController. - explicit DtlsTransport(IceTransportInternal* ice_transport, - const webrtc::CryptoOptions& crypto_options); explicit DtlsTransport(std::unique_ptr ice_transport, const webrtc::CryptoOptions& crypto_options); @@ -221,9 +218,8 @@ class DtlsTransport : public DtlsTransportInternal { std::string transport_name_; int component_; DtlsTransportState dtls_state_ = DTLS_TRANSPORT_NEW; - // Underlying ice_transport, not owned by this class. - IceTransportInternal* const ice_transport_; - std::unique_ptr owned_ice_transport_; + // Underlying ice_transport, owned by this class. + std::unique_ptr ice_transport_; std::unique_ptr dtls_; // The DTLS stream StreamInterfaceChannel* downward_; // Wrapper for ice_transport_, owned by dtls_. diff --git a/p2p/base/dtlstransport_unittest.cc b/p2p/base/dtlstransport_unittest.cc index 05a9b4bbdd..93f3da337d 100644 --- a/p2p/base/dtlstransport_unittest.cc +++ b/p2p/base/dtlstransport_unittest.cc @@ -11,6 +11,7 @@ #include #include #include +#include #include "p2p/base/dtlstransport.h" #include "p2p/base/fakeicetransport.h" @@ -76,18 +77,18 @@ class DtlsTestClient : public sigslot::has_slots<> { } // Set up fake ICE transport and real DTLS transport under test. void SetupTransports(IceRole role, int async_delay_ms = 0) { - fake_ice_transport_.reset(new FakeIceTransport("fake", 0)); - fake_ice_transport_->SetAsync(true); - fake_ice_transport_->SetAsyncDelay(async_delay_ms); - fake_ice_transport_->SetIceRole(role); - fake_ice_transport_->SetIceTiebreaker((role == ICEROLE_CONTROLLING) ? 1 - : 2); + std::unique_ptr fake_ice_transport; + fake_ice_transport.reset(new FakeIceTransport("fake", 0)); + fake_ice_transport->SetAsync(true); + fake_ice_transport->SetAsyncDelay(async_delay_ms); + fake_ice_transport->SetIceRole(role); + fake_ice_transport->SetIceTiebreaker((role == ICEROLE_CONTROLLING) ? 1 : 2); // Hook the raw packets so that we can verify they are encrypted. - fake_ice_transport_->SignalReadPacket.connect( + fake_ice_transport->SignalReadPacket.connect( this, &DtlsTestClient::OnFakeIceTransportReadPacket); dtls_transport_ = absl::make_unique( - fake_ice_transport_.get(), webrtc::CryptoOptions()); + std::move(fake_ice_transport), webrtc::CryptoOptions()); dtls_transport_->SetSslMaxProtocolVersion(ssl_max_version_); // Note: Certificate may be null here if testing passthrough. dtls_transport_->SetLocalCertificate(certificate_); @@ -99,13 +100,16 @@ class DtlsTestClient : public sigslot::has_slots<> { this, &DtlsTestClient::OnTransportSentPacket); } - FakeIceTransport* fake_ice_transport() { return fake_ice_transport_.get(); } + FakeIceTransport* fake_ice_transport() { + return static_cast(dtls_transport_->ice_transport()); + } DtlsTransport* dtls_transport() { return dtls_transport_.get(); } // Simulate fake ICE transports connecting. bool Connect(DtlsTestClient* peer, bool asymmetric) { - fake_ice_transport_->SetDestination(peer->fake_ice_transport(), asymmetric); + fake_ice_transport()->SetDestination(peer->fake_ice_transport(), + asymmetric); return true; }