Index: webrtc/p2p/base/port.cc |
diff --git a/webrtc/p2p/base/port.cc b/webrtc/p2p/base/port.cc |
index 9207c9d04260433736e51b409f54ab6059c682ed..eba15f69a32a6518766e2a77863d0889c917a02b 100644 |
--- a/webrtc/p2p/base/port.cc |
+++ b/webrtc/p2p/base/port.cc |
@@ -242,25 +242,17 @@ void Port::AddAddress(const rtc::SocketAddress& address, |
ASSERT(!tcptype.empty()); |
} |
- Candidate c; |
- c.set_id(rtc::CreateRandomString(8)); |
- c.set_component(component_); |
- c.set_type(type); |
- c.set_protocol(protocol); |
+ std::string foundation = |
+ ComputeFoundation(type, protocol, relay_protocol, base_address); |
+ Candidate c(component_, protocol, address, 0U, username_fragment(), password_, |
+ type, generation_, foundation, network_->id(), network_cost_); |
+ c.set_priority( |
+ c.GetPriority(type_preference, network_->preference(), relay_preference)); |
c.set_relay_protocol(relay_protocol); |
c.set_tcptype(tcptype); |
- c.set_address(address); |
- c.set_priority(c.GetPriority(type_preference, network_->preference(), |
- relay_preference)); |
- c.set_username(username_fragment()); |
- c.set_password(password_); |
c.set_network_name(network_->name()); |
c.set_network_type(network_->type()); |
- c.set_network_cost(network_cost_); |
- c.set_generation(generation_); |
c.set_related_address(related_address); |
- c.set_foundation( |
- ComputeFoundation(type, protocol, relay_protocol, base_address)); |
candidates_.push_back(c); |
SignalCandidateReady(this, c); |
@@ -705,11 +697,10 @@ class ConnectionRequest : public StunRequest { |
static_cast<uint32_t>(connection_->pings_since_last_response_.size() - |
1))); |
} |
- uint32_t network_cost = connection_->port()->network_cost(); |
- if (network_cost > 0) { |
- request->AddAttribute( |
- new StunUInt32Attribute(STUN_ATTR_NETWORK_COST, network_cost)); |
- } |
+ uint32_t network_info = connection_->port()->Network()->id(); |
+ network_info = (network_info << 16) | connection_->port()->network_cost(); |
+ request->AddAttribute( |
+ new StunUInt32Attribute(STUN_ATTR_NETWORK_INFO, network_info)); |
// Adding ICE_CONTROLLED or ICE_CONTROLLING attribute based on the role. |
if (connection_->port()->GetIceRole() == ICEROLE_CONTROLLING) { |
@@ -1412,11 +1403,12 @@ void Connection::MaybeAddPrflxCandidate(ConnectionRequest* request, |
new_local_candidate.set_password(local_candidate().password()); |
new_local_candidate.set_network_name(local_candidate().network_name()); |
new_local_candidate.set_network_type(local_candidate().network_type()); |
- new_local_candidate.set_network_cost(local_candidate().network_cost()); |
new_local_candidate.set_related_address(local_candidate().address()); |
new_local_candidate.set_foundation(ComputeFoundation( |
PRFLX_PORT_TYPE, local_candidate().protocol(), |
local_candidate().relay_protocol(), local_candidate().address())); |
+ new_local_candidate.set_network_id(local_candidate().network_id()); |
+ new_local_candidate.set_network_cost(local_candidate().network_cost()); |
// Change the local candidate of this Connection to the new prflx candidate. |
local_candidate_index_ = port_->AddPrflxCandidate(new_local_candidate); |