Chromium Code Reviews| Index: webrtc/p2p/base/portallocator.h |
| diff --git a/webrtc/p2p/base/portallocator.h b/webrtc/p2p/base/portallocator.h |
| index 51474297f77d1726cb1333dbceca8f3c361377d1..9104da0275449a50bdd717c5cba10374e006c499 100644 |
| --- a/webrtc/p2p/base/portallocator.h |
| +++ b/webrtc/p2p/base/portallocator.h |
| @@ -307,6 +307,7 @@ class PortAllocator : public sigslot::has_slots<> { |
| allow_tcp_listen_(true), |
| candidate_filter_(CF_ALL) { |
| } |
| + |
| virtual ~PortAllocator() {} |
| // This should be called on the PortAllocator's thread before the |
| @@ -316,11 +317,13 @@ class PortAllocator : public sigslot::has_slots<> { |
| // Set STUN and TURN servers to be used in future sessions, and set |
| // candidate pool size, as described in JSEP. |
| // |
| - // If the servers are changing and the candidate pool size is nonzero, |
| - // existing pooled sessions will be destroyed and new ones created. |
| + // If the servers are changing, and the candidate pool size is nonzero, and |
| + // FreezeCandidatePool hasn't been called, existing pooled sessions will be |
| + // destroyed and new ones created. |
| // |
| - // If the servers are not changing but the candidate pool size is, |
| - // pooled sessions will be either created or destroyed as necessary. |
| + // If the servers are not changing but the candidate pool size is, and |
| + // FreezeCandidatePool hasn't been called, pooled sessions will be either |
| + // created or destroyed as necessary. |
| // |
| // Returns true if the configuration could successfully be changed. |
| bool SetConfiguration(const ServerAddresses& stun_servers, |
| @@ -363,6 +366,18 @@ class PortAllocator : public sigslot::has_slots<> { |
| // Returns the next session that would be returned by TakePooledSession. |
| const PortAllocatorSession* GetPooledSession() const; |
| + // After FreezeCandidatePool is called, changing the candidate pool size will |
| + // no longer be allowed, and changing ICE servers will not cause pooled |
| + // sessions to be recreated. |
| + // |
| + // Expected to be called when SetLocalDescription is called on a |
| + // PeerConnection. Can be called safely on any thread as long as not |
| + // simultaneously with SetConfiguration. |
| + void FreezeCandidatePool(); |
| + |
| + // Discard any remaining pooled sessions. |
| + void DiscardPooledSessions(); |
|
pthatcher1
2017/03/09 00:28:15
DiscardCandidatePool?
To be consistent with Freez
Taylor Brandstetter
2017/03/09 14:59:03
Done
|
| + |
| uint32_t flags() const { return flags_; } |
| void set_flags(uint32_t flags) { flags_ = flags; } |
| @@ -439,6 +454,7 @@ class PortAllocator : public sigslot::has_slots<> { |
| std::vector<RelayServerConfig> turn_servers_; |
| int candidate_pool_size_ = 0; // Last value passed into SetConfiguration. |
| std::deque<std::unique_ptr<PortAllocatorSession>> pooled_sessions_; |
| + bool candidate_pool_frozen_ = false; |
| bool prune_turn_ports_ = false; |
| webrtc::MetricsObserverInterface* metrics_observer_ = nullptr; |