Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 261 | 261 |
| 262 P2PTransportChannel::~P2PTransportChannel() { | 262 P2PTransportChannel::~P2PTransportChannel() { |
| 263 ASSERT(worker_thread_ == rtc::Thread::Current()); | 263 ASSERT(worker_thread_ == rtc::Thread::Current()); |
| 264 | 264 |
| 265 for (size_t i = 0; i < allocator_sessions_.size(); ++i) | 265 for (size_t i = 0; i < allocator_sessions_.size(); ++i) |
| 266 delete allocator_sessions_[i]; | 266 delete allocator_sessions_[i]; |
| 267 } | 267 } |
| 268 | 268 |
| 269 // Add the allocator session to our list so that we know which sessions | 269 // Add the allocator session to our list so that we know which sessions |
| 270 // are still active. | 270 // are still active. |
| 271 void P2PTransportChannel::AddAllocatorSession(PortAllocatorSession* session) { | 271 void P2PTransportChannel::AddAllocatorSession(PortAllocatorSession* session, |
| 272 bool pooled) { | |
| 272 ASSERT(worker_thread_ == rtc::Thread::Current()); | 273 ASSERT(worker_thread_ == rtc::Thread::Current()); |
| 273 | 274 |
| 274 session->set_generation(static_cast<uint32_t>(allocator_sessions_.size())); | 275 session->set_generation(static_cast<uint32_t>(allocator_sessions_.size())); |
| 275 allocator_sessions_.push_back(session); | 276 allocator_sessions_.push_back(session); |
| 276 | 277 |
| 277 // We now only want to apply new candidates that we receive to the ports | 278 // We now only want to apply new candidates that we receive to the ports |
| 278 // created by this new session because these are replacing those of the | 279 // created by this new session because these are replacing those of the |
| 279 // previous sessions. | 280 // previous sessions. |
| 280 ports_.clear(); | 281 ports_.clear(); |
| 281 | 282 |
| 282 session->SignalPortReady.connect(this, &P2PTransportChannel::OnPortReady); | 283 session->SignalPortReady.connect(this, &P2PTransportChannel::OnPortReady); |
| 283 session->SignalCandidatesReady.connect( | 284 session->SignalCandidatesReady.connect( |
| 284 this, &P2PTransportChannel::OnCandidatesReady); | 285 this, &P2PTransportChannel::OnCandidatesReady); |
| 285 session->SignalCandidatesAllocationDone.connect( | 286 session->SignalCandidatesAllocationDone.connect( |
| 286 this, &P2PTransportChannel::OnCandidatesAllocationDone); | 287 this, &P2PTransportChannel::OnCandidatesAllocationDone); |
| 287 session->StartGettingPorts(); | 288 if (!pooled) { |
| 289 session->StartGettingPorts(); | |
| 290 } | |
|
pthatcher1
2016/05/05 21:51:24
Instead of having a bool passed in, I think it mig
Taylor Brandstetter
2016/05/06 03:53:34
Not much point in making a method (StartAllocatorS
pthatcher1
2016/05/07 00:21:44
That was actually the first idea I had. Now seein
| |
| 288 } | 291 } |
|
pthatcher1
2016/05/05 21:51:24
Actually, is StartGettingPorts a no-op if it's alr
Taylor Brandstetter
2016/05/06 03:53:34
No, it isn't a no-op.
| |
| 289 | 292 |
| 290 void P2PTransportChannel::AddConnection(Connection* connection) { | 293 void P2PTransportChannel::AddConnection(Connection* connection) { |
| 291 connections_.push_back(connection); | 294 connections_.push_back(connection); |
| 292 unpinged_connections_.insert(connection); | 295 unpinged_connections_.insert(connection); |
| 293 connection->set_remote_ice_mode(remote_ice_mode_); | 296 connection->set_remote_ice_mode(remote_ice_mode_); |
| 294 connection->set_receiving_timeout(config_.receiving_timeout); | 297 connection->set_receiving_timeout(config_.receiving_timeout); |
| 295 connection->SignalReadPacket.connect( | 298 connection->SignalReadPacket.connect( |
| 296 this, &P2PTransportChannel::OnReadPacket); | 299 this, &P2PTransportChannel::OnReadPacket); |
| 297 connection->SignalReadyToSend.connect( | 300 connection->SignalReadyToSend.connect( |
| 298 this, &P2PTransportChannel::OnReadyToSend); | 301 this, &P2PTransportChannel::OnReadyToSend); |
| (...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 464 | 467 |
| 465 void P2PTransportChannel::MaybeStartGathering() { | 468 void P2PTransportChannel::MaybeStartGathering() { |
| 466 // Start gathering if we never started before, or if an ICE restart occurred. | 469 // Start gathering if we never started before, or if an ICE restart occurred. |
| 467 if (allocator_sessions_.empty() || | 470 if (allocator_sessions_.empty() || |
| 468 IceCredentialsChanged(allocator_sessions_.back()->ice_ufrag(), | 471 IceCredentialsChanged(allocator_sessions_.back()->ice_ufrag(), |
| 469 allocator_sessions_.back()->ice_pwd(), ice_ufrag_, | 472 allocator_sessions_.back()->ice_pwd(), ice_ufrag_, |
| 470 ice_pwd_)) { | 473 ice_pwd_)) { |
| 471 if (gathering_state_ != kIceGatheringGathering) { | 474 if (gathering_state_ != kIceGatheringGathering) { |
| 472 gathering_state_ = kIceGatheringGathering; | 475 gathering_state_ = kIceGatheringGathering; |
| 473 SignalGatheringState(this); | 476 SignalGatheringState(this); |
| 474 } | 477 } |
|
Taylor Brandstetter
2016/05/05 19:56:22
You might think "we shouldn't use pooled sessions
| |
| 475 // Time for a new allocator | 478 // Time for a new allocator. |
| 476 AddAllocatorSession(allocator_->CreateSession( | 479 PortAllocatorSession* pooled_session = allocator_->GetPooledSession( |
| 477 SessionId(), transport_name(), component(), ice_ufrag_, ice_pwd_)); | 480 transport_name(), component(), ice_ufrag_, ice_pwd_); |
| 481 if (pooled_session) { | |
| 482 AddAllocatorSession(pooled_session, true); | |
| 483 // Process the pooled session's existing candidates/ports, if they exist. | |
| 484 OnCandidatesReady(pooled_session, pooled_session->ReadyCandidates()); | |
| 485 for (PortInterface* port : pooled_session->ReadyPorts()) { | |
| 486 OnPortReady(pooled_session, port); | |
| 487 } | |
| 488 if (pooled_session->CandidatesAllocationDone()) { | |
| 489 OnCandidatesAllocationDone(pooled_session); | |
| 490 } | |
| 491 } else { | |
| 492 AddAllocatorSession( | |
| 493 allocator_->CreateSession(SessionId(), transport_name(), component(), | |
| 494 ice_ufrag_, ice_pwd_), | |
| 495 false); | |
| 496 } | |
| 478 } | 497 } |
| 479 } | 498 } |
| 480 | 499 |
| 481 // A new port is available, attempt to make connections for it | 500 // A new port is available, attempt to make connections for it |
| 482 void P2PTransportChannel::OnPortReady(PortAllocatorSession *session, | 501 void P2PTransportChannel::OnPortReady(PortAllocatorSession *session, |
| 483 PortInterface* port) { | 502 PortInterface* port) { |
| 484 ASSERT(worker_thread_ == rtc::Thread::Current()); | 503 ASSERT(worker_thread_ == rtc::Thread::Current()); |
| 485 | 504 |
| 486 // Set in-effect options on the new port | 505 // Set in-effect options on the new port |
| 487 for (OptionMap::const_iterator it = options_.begin(); | 506 for (OptionMap::const_iterator it = options_.begin(); |
| (...skipping 1150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1638 | 1657 |
| 1639 // During the initial state when nothing has been pinged yet, return the first | 1658 // During the initial state when nothing has been pinged yet, return the first |
| 1640 // one in the ordered |connections_|. | 1659 // one in the ordered |connections_|. |
| 1641 return *(std::find_if(connections_.begin(), connections_.end(), | 1660 return *(std::find_if(connections_.begin(), connections_.end(), |
| 1642 [conn1, conn2](Connection* conn) { | 1661 [conn1, conn2](Connection* conn) { |
| 1643 return conn == conn1 || conn == conn2; | 1662 return conn == conn1 || conn == conn2; |
| 1644 })); | 1663 })); |
| 1645 } | 1664 } |
| 1646 | 1665 |
| 1647 } // namespace cricket | 1666 } // namespace cricket |
| OLD | NEW |