From 686be20b45566c9983b96600a43a6a9b7f412484 Mon Sep 17 00:00:00 2001 From: Anton Sukhanov Date: Tue, 28 May 2019 15:29:45 -0700 Subject: [PATCH] Fix ICE connection in datagram_transport. Connect ICE state changes to datagram transport regardless of bypass mode. ICE states were connected to datagram transport only in bypass mode. As a result, if we received datagram state change notification before ICE state change notification, the state was not propagated. TODO: We need fake datagram transport implementation/test so that we could unit test such failures without relying on downstream projects. Bug: webrtc:9719 Change-Id: I5a180676e0d05f707b2a43d07e8c04fb10985027 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/138982 Reviewed-by: Steve Anton Reviewed-by: Bjorn Mellem Commit-Queue: Anton Sukhanov Cr-Commit-Position: refs/heads/master@{#28094} --- p2p/base/datagram_dtls_adaptor.cc | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/p2p/base/datagram_dtls_adaptor.cc b/p2p/base/datagram_dtls_adaptor.cc index ecf14b3195..344f1c1e07 100644 --- a/p2p/base/datagram_dtls_adaptor.cc +++ b/p2p/base/datagram_dtls_adaptor.cc @@ -58,6 +58,17 @@ DatagramDtlsAdaptor::DatagramDtlsAdaptor( } void DatagramDtlsAdaptor::ConnectToIceTransport() { + ice_transport_->SignalWritableState.connect( + this, &DatagramDtlsAdaptor::OnWritableState); + ice_transport_->SignalReadyToSend.connect( + this, &DatagramDtlsAdaptor::OnReadyToSend); + ice_transport_->SignalReceivingState.connect( + this, &DatagramDtlsAdaptor::OnReceivingState); + + // Datagram transport does not propagate network route change. + ice_transport_->SignalNetworkRouteChanged.connect( + this, &DatagramDtlsAdaptor::OnNetworkRouteChanged); + if (kBypassDatagramDtlsTestOnly) { // In bypass mode we have to subscribe to ICE read and sent events. // Test only case to use ICE directly instead of data transport. @@ -66,21 +77,10 @@ void DatagramDtlsAdaptor::ConnectToIceTransport() { ice_transport_->SignalSentPacket.connect( this, &DatagramDtlsAdaptor::OnSentPacket); - - ice_transport_->SignalWritableState.connect( - this, &DatagramDtlsAdaptor::OnWritableState); - ice_transport_->SignalReadyToSend.connect( - this, &DatagramDtlsAdaptor::OnReadyToSend); - ice_transport_->SignalReceivingState.connect( - this, &DatagramDtlsAdaptor::OnReceivingState); } else { // Subscribe to Data Transport read packets. datagram_transport_->SetDatagramSink(this); datagram_transport_->SetTransportStateCallback(this); - - // Datagram transport does not propagate network route change. - ice_transport_->SignalNetworkRouteChanged.connect( - this, &DatagramDtlsAdaptor::OnNetworkRouteChanged); } }