Index: webrtc/p2p/base/p2ptransportchannel.cc |
diff --git a/webrtc/p2p/base/p2ptransportchannel.cc b/webrtc/p2p/base/p2ptransportchannel.cc |
index 03b0ed426a7d5e1bae0eb2130f5ca504fe1dae87..f5f8a665aa51e90ee7d544c1257216378bbaf023 100644 |
--- a/webrtc/p2p/base/p2ptransportchannel.cc |
+++ b/webrtc/p2p/base/p2ptransportchannel.cc |
@@ -308,38 +308,37 @@ TransportChannelState P2PTransportChannel::ComputeState() const { |
return TransportChannelState::STATE_COMPLETED; |
} |
-void P2PTransportChannel::SetIceCredentials(const std::string& ice_ufrag, |
- const std::string& ice_pwd) { |
+void P2PTransportChannel::SetIceParameters(const IceParameters& ice_params) { |
ASSERT(worker_thread_ == rtc::Thread::Current()); |
- ice_ufrag_ = ice_ufrag; |
- ice_pwd_ = ice_pwd; |
+ ice_parameters_ = ice_params; |
// Note: Candidate gathering will restart when MaybeStartGathering is next |
// called. |
} |
-void P2PTransportChannel::SetRemoteIceCredentials(const std::string& ice_ufrag, |
- const std::string& ice_pwd) { |
+void P2PTransportChannel::SetRemoteIceParameters( |
+ const IceParameters& ice_params) { |
ASSERT(worker_thread_ == rtc::Thread::Current()); |
+ LOG(LS_INFO) << "Remote supports ICE renomination ? " |
+ << ice_params.renomination; |
IceParameters* current_ice = remote_ice(); |
- IceParameters new_ice(ice_ufrag, ice_pwd); |
- if (!current_ice || *current_ice != new_ice) { |
+ if (!current_ice || *current_ice != ice_params) { |
// Keep the ICE credentials so that newer connections |
// are prioritized over the older ones. |
- remote_ice_parameters_.push_back(new_ice); |
+ remote_ice_parameters_.push_back(ice_params); |
} |
// Update the pwd of remote candidate if needed. |
for (RemoteCandidate& candidate : remote_candidates_) { |
- if (candidate.username() == ice_ufrag && candidate.password().empty()) { |
- candidate.set_password(ice_pwd); |
+ if (candidate.username() == ice_params.ufrag && |
+ candidate.password().empty()) { |
+ candidate.set_password(ice_params.pwd); |
} |
} |
// We need to update the credentials and generation for any peer reflexive |
// candidates. |
for (Connection* conn : connections_) { |
- conn->MaybeSetRemoteIceCredentialsAndGeneration( |
- ice_ufrag, ice_pwd, |
- static_cast<int>(remote_ice_parameters_.size() - 1)); |
+ conn->MaybeSetRemoteIceParametersAndGeneration( |
+ ice_params, static_cast<int>(remote_ice_parameters_.size() - 1)); |
} |
// Updating the remote ICE candidate generation could change the sort order. |
RequestSortAndStateUpdate(); |
@@ -434,22 +433,23 @@ const IceConfig& P2PTransportChannel::config() const { |
} |
void P2PTransportChannel::MaybeStartGathering() { |
- if (ice_ufrag_.empty() || ice_pwd_.empty()) { |
+ if (ice_parameters_.ufrag.empty() || ice_parameters_.pwd.empty()) { |
return; |
} |
// Start gathering if we never started before, or if an ICE restart occurred. |
if (allocator_sessions_.empty() || |
IceCredentialsChanged(allocator_sessions_.back()->ice_ufrag(), |
- allocator_sessions_.back()->ice_pwd(), ice_ufrag_, |
- ice_pwd_)) { |
+ allocator_sessions_.back()->ice_pwd(), |
+ ice_parameters_.ufrag, ice_parameters_.pwd)) { |
if (gathering_state_ != kIceGatheringGathering) { |
gathering_state_ = kIceGatheringGathering; |
SignalGatheringState(this); |
} |
// Time for a new allocator. |
std::unique_ptr<PortAllocatorSession> pooled_session = |
- allocator_->TakePooledSession(transport_name(), component(), ice_ufrag_, |
- ice_pwd_); |
+ allocator_->TakePooledSession(transport_name(), component(), |
+ ice_parameters_.ufrag, |
+ ice_parameters_.pwd); |
if (pooled_session) { |
AddAllocatorSession(std::move(pooled_session)); |
PortAllocatorSession* raw_pooled_session = |
@@ -465,7 +465,8 @@ void P2PTransportChannel::MaybeStartGathering() { |
} |
} else { |
AddAllocatorSession(allocator_->CreateSession( |
- transport_name(), component(), ice_ufrag_, ice_pwd_)); |
+ transport_name(), component(), ice_parameters_.ufrag, |
+ ice_parameters_.pwd)); |
LOG(LS_INFO) << "Start getting ports"; |
allocator_sessions_.back()->StartGettingPorts(); |
} |
@@ -1625,7 +1626,10 @@ void P2PTransportChannel::PingConnection(Connection* conn) { |
bool use_candidate_attr = false; |
uint32_t nomination = 0; |
if (ice_role_ == ICEROLE_CONTROLLING) { |
- if (remote_supports_renomination_) { |
+ bool renomination_supported = ice_parameters_.renomination && |
+ !remote_ice_parameters_.empty() && |
+ remote_ice_parameters_.back().renomination; |
+ if (renomination_supported) { |
nomination = GetNominationAttr(conn); |
} else { |
use_candidate_attr = |