Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(426)

Side by Side Diff: webrtc/p2p/base/p2ptransportchannel.cc

Issue 2171183002: Remove ports that are not used by any channel after timeout (Closed) Base URL: https://chromium.googlesource.com/external/webrtc@master
Patch Set: . Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « webrtc/p2p/base/p2ptransportchannel.h ('k') | webrtc/p2p/base/p2ptransportchannel_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
136 136
137 session->set_generation(static_cast<uint32_t>(allocator_sessions_.size())); 137 session->set_generation(static_cast<uint32_t>(allocator_sessions_.size()));
138 session->SignalPortReady.connect(this, &P2PTransportChannel::OnPortReady); 138 session->SignalPortReady.connect(this, &P2PTransportChannel::OnPortReady);
139 session->SignalPortsPruned.connect(this, &P2PTransportChannel::OnPortsPruned); 139 session->SignalPortsPruned.connect(this, &P2PTransportChannel::OnPortsPruned);
140 session->SignalCandidatesReady.connect( 140 session->SignalCandidatesReady.connect(
141 this, &P2PTransportChannel::OnCandidatesReady); 141 this, &P2PTransportChannel::OnCandidatesReady);
142 session->SignalCandidatesRemoved.connect( 142 session->SignalCandidatesRemoved.connect(
143 this, &P2PTransportChannel::OnCandidatesRemoved); 143 this, &P2PTransportChannel::OnCandidatesRemoved);
144 session->SignalCandidatesAllocationDone.connect( 144 session->SignalCandidatesAllocationDone.connect(
145 this, &P2PTransportChannel::OnCandidatesAllocationDone); 145 this, &P2PTransportChannel::OnCandidatesAllocationDone);
146 if (!allocator_sessions_.empty()) {
147 allocator_session()->PruneAllPorts();
148 }
149 allocator_sessions_.push_back(std::move(session));
146 150
147 // We now only want to apply new candidates that we receive to the ports 151 // We now only want to apply new candidates that we receive to the ports
148 // created by this new session because these are replacing those of the 152 // created by this new session because these are replacing those of the
149 // previous sessions. 153 // previous sessions.
150 pruned_ports_.insert(pruned_ports_.end(), ports_.begin(), ports_.end()); 154 PruneAllPorts();
151 ports_.clear();
152
153 allocator_sessions_.push_back(std::move(session));
154 } 155 }
155 156
156 void P2PTransportChannel::AddConnection(Connection* connection) { 157 void P2PTransportChannel::AddConnection(Connection* connection) {
157 connections_.push_back(connection); 158 connections_.push_back(connection);
158 unpinged_connections_.insert(connection); 159 unpinged_connections_.insert(connection);
159 connection->set_remote_ice_mode(remote_ice_mode_); 160 connection->set_remote_ice_mode(remote_ice_mode_);
160 connection->set_receiving_timeout(config_.receiving_timeout); 161 connection->set_receiving_timeout(config_.receiving_timeout);
161 connection->SignalReadPacket.connect( 162 connection->SignalReadPacket.connect(
162 this, &P2PTransportChannel::OnReadPacket); 163 this, &P2PTransportChannel::OnReadPacket);
163 connection->SignalReadyToSend.connect( 164 connection->SignalReadyToSend.connect(
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
231 return false; 232 return false;
232 } 233 }
233 234
234 void P2PTransportChannel::SetIceRole(IceRole ice_role) { 235 void P2PTransportChannel::SetIceRole(IceRole ice_role) {
235 ASSERT(worker_thread_ == rtc::Thread::Current()); 236 ASSERT(worker_thread_ == rtc::Thread::Current());
236 if (ice_role_ != ice_role) { 237 if (ice_role_ != ice_role) {
237 ice_role_ = ice_role; 238 ice_role_ = ice_role;
238 for (PortInterface* port : ports_) { 239 for (PortInterface* port : ports_) {
239 port->SetIceRole(ice_role); 240 port->SetIceRole(ice_role);
240 } 241 }
241 // Update role on removed ports as well, because they may still have 242 // Update role on pruned ports as well, because they may still have
242 // connections alive that should be using the correct role. 243 // connections alive that should be using the correct role.
243 for (PortInterface* port : pruned_ports_) { 244 for (PortInterface* port : pruned_ports_) {
244 port->SetIceRole(ice_role); 245 port->SetIceRole(ice_role);
245 } 246 }
246 } 247 }
247 } 248 }
248 249
249 void P2PTransportChannel::SetIceTiebreaker(uint64_t tiebreaker) { 250 void P2PTransportChannel::SetIceTiebreaker(uint64_t tiebreaker) {
250 ASSERT(worker_thread_ == rtc::Thread::Current()); 251 ASSERT(worker_thread_ == rtc::Thread::Current());
251 if (!ports_.empty() || !pruned_ports_.empty()) { 252 if (!ports_.empty() || !pruned_ports_.empty()) {
(...skipping 1429 matching lines...) Expand 10 before | Expand all | Expand 10 after
1681 pruned_ports_.end()); 1682 pruned_ports_.end());
1682 LOG(INFO) << "Removed port because it is destroyed: " << ports_.size() 1683 LOG(INFO) << "Removed port because it is destroyed: " << ports_.size()
1683 << " remaining"; 1684 << " remaining";
1684 } 1685 }
1685 1686
1686 void P2PTransportChannel::OnPortsPruned( 1687 void P2PTransportChannel::OnPortsPruned(
1687 PortAllocatorSession* session, 1688 PortAllocatorSession* session,
1688 const std::vector<PortInterface*>& ports) { 1689 const std::vector<PortInterface*>& ports) {
1689 ASSERT(worker_thread_ == rtc::Thread::Current()); 1690 ASSERT(worker_thread_ == rtc::Thread::Current());
1690 for (PortInterface* port : ports) { 1691 for (PortInterface* port : ports) {
1691 if (OnPortPruned(port)) { 1692 if (PrunePort(port)) {
1692 LOG(INFO) << "Removed port: " << port->ToString() << " " << ports_.size() 1693 LOG(INFO) << "Removed port: " << port->ToString() << " " << ports_.size()
1693 << " remaining"; 1694 << " remaining";
1694 } 1695 }
1695 } 1696 }
1696 } 1697 }
1697 1698
1698 void P2PTransportChannel::OnCandidatesRemoved( 1699 void P2PTransportChannel::OnCandidatesRemoved(
1699 PortAllocatorSession* session, 1700 PortAllocatorSession* session,
1700 const std::vector<Candidate>& candidates) { 1701 const std::vector<Candidate>& candidates) {
1701 ASSERT(worker_thread_ == rtc::Thread::Current()); 1702 ASSERT(worker_thread_ == rtc::Thread::Current());
(...skipping 18 matching lines...) Expand all
1720 // continually, so there is an implicit check on continual gathering here. 1721 // continually, so there is an implicit check on continual gathering here.
1721 if (!allocator_sessions_.empty() && allocator_session()->IsCleared()) { 1722 if (!allocator_sessions_.empty() && allocator_session()->IsCleared()) {
1722 allocator_session()->RegatherOnFailedNetworks(); 1723 allocator_session()->RegatherOnFailedNetworks();
1723 } 1724 }
1724 1725
1725 thread()->PostDelayed(RTC_FROM_HERE, 1726 thread()->PostDelayed(RTC_FROM_HERE,
1726 *config_.regather_on_failed_networks_interval, this, 1727 *config_.regather_on_failed_networks_interval, this,
1727 MSG_REGATHER_ON_FAILED_NETWORKS); 1728 MSG_REGATHER_ON_FAILED_NETWORKS);
1728 } 1729 }
1729 1730
1730 bool P2PTransportChannel::OnPortPruned(PortInterface* port) { 1731 void P2PTransportChannel::PruneAllPorts() {
1732 pruned_ports_.insert(pruned_ports_.end(), ports_.begin(), ports_.end());
1733 ports_.clear();
1734 }
1735
1736 bool P2PTransportChannel::PrunePort(PortInterface* port) {
1731 auto it = std::find(ports_.begin(), ports_.end(), port); 1737 auto it = std::find(ports_.begin(), ports_.end(), port);
1732 // Don't need to do anything if the port has been deleted from the port list. 1738 // Don't need to do anything if the port has been deleted from the port list.
1733 if (it == ports_.end()) { 1739 if (it == ports_.end()) {
1734 return false; 1740 return false;
1735 } 1741 }
1736 ports_.erase(it); 1742 ports_.erase(it);
1737 pruned_ports_.push_back(port); 1743 pruned_ports_.push_back(port);
1738 return true; 1744 return true;
1739 } 1745 }
1740 1746
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
1882 1888
1883 // During the initial state when nothing has been pinged yet, return the first 1889 // During the initial state when nothing has been pinged yet, return the first
1884 // one in the ordered |connections_|. 1890 // one in the ordered |connections_|.
1885 return *(std::find_if(connections_.begin(), connections_.end(), 1891 return *(std::find_if(connections_.begin(), connections_.end(),
1886 [conn1, conn2](Connection* conn) { 1892 [conn1, conn2](Connection* conn) {
1887 return conn == conn1 || conn == conn2; 1893 return conn == conn1 || conn == conn2;
1888 })); 1894 }));
1889 } 1895 }
1890 1896
1891 } // namespace cricket 1897 } // namespace cricket
OLDNEW
« no previous file with comments | « webrtc/p2p/base/p2ptransportchannel.h ('k') | webrtc/p2p/base/p2ptransportchannel_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698