From 7cdcda9dd57269091323ce89b23b81c3fe18a985 Mon Sep 17 00:00:00 2001 From: Qingsi Wang Date: Wed, 28 Aug 2019 09:18:37 -0700 Subject: [PATCH] Use the sanitized pair when surfacing the candidate pair change event. TBR=andersc@webrtc.org Bug: None Change-Id: Ie2c389fe966dada2768e3222e1f8da74e1715568 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/150762 Commit-Queue: Qingsi Wang Reviewed-by: Alex Drake Reviewed-by: Alex Glaznev Cr-Commit-Position: refs/heads/master@{#29052} --- p2p/base/p2p_transport_channel.cc | 5 ++--- p2p/base/p2p_transport_channel_unittest.cc | 6 ++++-- p2p/base/port.h | 3 +-- sdk/android/src/jni/pc/peer_connection.cc | 5 +++-- sdk/objc/api/peerconnection/RTCPeerConnection.mm | 13 +++++++------ 5 files changed, 17 insertions(+), 15 deletions(-) diff --git a/p2p/base/p2p_transport_channel.cc b/p2p/base/p2p_transport_channel.cc index 9e1c7209ff..23a99495d3 100644 --- a/p2p/base/p2p_transport_channel.cc +++ b/p2p/base/p2p_transport_channel.cc @@ -1981,18 +1981,17 @@ void P2PTransportChannel::SwitchSelectedConnection(Connection* conn, } else { RTC_LOG(LS_INFO) << ToString() << ": No selected connection"; } + SignalNetworkRouteChanged(network_route_); // Create event for candidate pair change. if (selected_connection_) { CandidatePairChangeEvent pair_change; pair_change.reason = reason; - pair_change.local_candidate = selected_connection_->local_candidate(); - pair_change.remote_candidate = selected_connection_->remote_candidate(); + pair_change.selected_candidate_pair = *GetSelectedCandidatePair(); pair_change.last_data_received_ms = selected_connection_->last_data_received(); SignalCandidatePairChanged(pair_change); } - SignalNetworkRouteChanged(network_route_); ++selected_candidate_pair_changes_; } diff --git a/p2p/base/p2p_transport_channel_unittest.cc b/p2p/base/p2p_transport_channel_unittest.cc index 72ab65ceac..dd48979269 100644 --- a/p2p/base/p2p_transport_channel_unittest.cc +++ b/p2p/base/p2p_transport_channel_unittest.cc @@ -3379,9 +3379,11 @@ class P2PTransportChannelPingTest : public ::testing::Test, if (!conn) { return !last_candidate_change_event_.has_value(); } else { - return last_candidate_change_event_->local_candidate.IsEquivalent( + const auto& last_selected_pair = + last_candidate_change_event_->selected_candidate_pair; + return last_selected_pair.local_candidate().IsEquivalent( conn->local_candidate()) && - last_candidate_change_event_->remote_candidate.IsEquivalent( + last_selected_pair.remote_candidate().IsEquivalent( conn->remote_candidate()) && last_candidate_change_event_->last_data_received_ms == conn->last_data_received() && diff --git a/p2p/base/port.h b/p2p/base/port.h index 4251cd4e04..65b543cd04 100644 --- a/p2p/base/port.h +++ b/p2p/base/port.h @@ -149,8 +149,7 @@ struct IceCandidateErrorEvent { }; struct CandidatePairChangeEvent { - Candidate local_candidate; - Candidate remote_candidate; + CandidatePair selected_candidate_pair; int64_t last_data_received_ms; std::string reason; }; diff --git a/sdk/android/src/jni/pc/peer_connection.cc b/sdk/android/src/jni/pc/peer_connection.cc index c95e576bd8..13f8301c0b 100644 --- a/sdk/android/src/jni/pc/peer_connection.cc +++ b/sdk/android/src/jni/pc/peer_connection.cc @@ -124,9 +124,10 @@ SdpSemantics JavaToNativeSdpSemantics(JNIEnv* jni, ScopedJavaLocalRef NativeToJavaCandidatePairChange( JNIEnv* env, const cricket::CandidatePairChangeEvent& event) { + const auto& selected_pair = event.selected_candidate_pair; return Java_CandidatePairChangeEvent_Constructor( - env, NativeToJavaCandidate(env, event.local_candidate), - NativeToJavaCandidate(env, event.remote_candidate), + env, NativeToJavaCandidate(env, selected_pair.local_candidate()), + NativeToJavaCandidate(env, selected_pair.remote_candidate()), static_cast(event.last_data_received_ms), NativeToJavaString(env, event.reason)); } diff --git a/sdk/objc/api/peerconnection/RTCPeerConnection.mm b/sdk/objc/api/peerconnection/RTCPeerConnection.mm index 156f7a41b5..f3e91c4dbc 100644 --- a/sdk/objc/api/peerconnection/RTCPeerConnection.mm +++ b/sdk/objc/api/peerconnection/RTCPeerConnection.mm @@ -235,14 +235,15 @@ void PeerConnectionDelegateAdapter::OnIceCandidatesRemoved( void PeerConnectionDelegateAdapter::OnIceSelectedCandidatePairChanged( const cricket::CandidatePairChangeEvent &event) { - std::unique_ptr local_candidate_wrapper( - new JsepIceCandidate(event.local_candidate.transport_name(), -1, event.local_candidate)); + const auto &selected_pair = event.selected_candidate_pair; + auto local_candidate_wrapper = absl::make_unique( + selected_pair.local_candidate().transport_name(), -1, selected_pair.local_candidate()); RTCIceCandidate *local_candidate = - [[RTCIceCandidate alloc] initWithNativeCandidate:local_candidate_wrapper.get()]; - std::unique_ptr remote_candidate_wrapper( - new JsepIceCandidate(event.remote_candidate.transport_name(), -1, event.remote_candidate)); + [[RTCIceCandidate alloc] initWithNativeCandidate:local_candidate_wrapper.release()]; + auto remote_candidate_wrapper = absl::make_unique( + selected_pair.remote_candidate().transport_name(), -1, selected_pair.remote_candidate()); RTCIceCandidate *remote_candidate = - [[RTCIceCandidate alloc] initWithNativeCandidate:remote_candidate_wrapper.get()]; + [[RTCIceCandidate alloc] initWithNativeCandidate:remote_candidate_wrapper.release()]; RTCPeerConnection *peer_connection = peer_connection_; NSString *nsstr_reason = [NSString stringForStdString:event.reason]; if ([peer_connection.delegate