| Index: webrtc/p2p/base/portallocator.h
|
| diff --git a/webrtc/p2p/base/portallocator.h b/webrtc/p2p/base/portallocator.h
|
| index 9b4465d3de816b522bb93d55130e8e1d61bf9253..dc1961db73f2ab41c8f887a2b90ebbd3174bb20a 100644
|
| --- a/webrtc/p2p/base/portallocator.h
|
| +++ b/webrtc/p2p/base/portallocator.h
|
| @@ -88,6 +88,14 @@ enum {
|
| CF_ALL = 0x7,
|
| };
|
|
|
| +enum class SessionState {
|
| + GATHERING, // Actively allocating ports and gathering candidates.
|
| + CLEARED, // Current allocation process has been stopped but may start
|
| + // new ones.
|
| + STOPPED // This session has completely stopped, no new allocation
|
| + // process will be started.
|
| +};
|
| +
|
| // TODO(deadbeef): Rename to TurnCredentials (and username to ufrag).
|
| struct RelayCredentials {
|
| RelayCredentials() {}
|
| @@ -159,12 +167,27 @@ class PortAllocatorSession : public sigslot::has_slots<> {
|
| virtual void SetCandidateFilter(uint32_t filter) = 0;
|
|
|
| // Starts gathering STUN and Relay configurations.
|
| - virtual void StartGettingPorts() = 0;
|
| - virtual void StopGettingPorts() = 0;
|
| - // Only stop the existing gathering process but may start new ones if needed.
|
| - virtual void ClearGettingPorts() = 0;
|
| - // Whether the process of getting ports has been stopped.
|
| - virtual bool IsGettingPorts() = 0;
|
| + virtual void StartGettingPorts() { state_ = SessionState::GATHERING; }
|
| + // Completely stops the gathering process and will not start new ones.
|
| + virtual void StopGettingPorts() { state_ = SessionState::STOPPED; }
|
| + // Only stops the existing gathering process but may start new ones if needed.
|
| + virtual void ClearGettingPorts() { state_ = SessionState::CLEARED; }
|
| + // Whether the session is actively getting ports.
|
| + bool IsGettingPorts() { return state_ == SessionState::GATHERING; }
|
| + // Whether it is in the state where the existing gathering process is stopped,
|
| + // but new ones may be started (basically after calling ClearGettingPorts).
|
| + bool IsCleared() { return state_ == SessionState::CLEARED; }
|
| + // Whether the session has completely stopped.
|
| + bool IsStopped() { return state_ == SessionState::STOPPED; }
|
| + // Re-gathers candidates on networks that do not have any connections. More
|
| + // precisely, a network interface may have more than one IP addresses (e.g.,
|
| + // IPv4 and IPv6 addresses). Each address subnet will be used to create a
|
| + // network. Only if all networks of an interface have no connection, the
|
| + // implementation should start re-gathering on all networks of that interface.
|
| + virtual void RegatherOnFailedNetworks() {}
|
| + // Re-gathers candidates on all networks.
|
| + // TODO(honghaiz): Implement this in BasicPortAllocator.
|
| + virtual void RegatherOnAllNetworks() {}
|
|
|
| // Another way of getting the information provided by the signals below.
|
| //
|
| @@ -175,8 +198,17 @@ class PortAllocatorSession : public sigslot::has_slots<> {
|
| virtual bool CandidatesAllocationDone() const = 0;
|
|
|
| sigslot::signal2<PortAllocatorSession*, PortInterface*> SignalPortReady;
|
| + // Ports should be signaled to be removed when the networks of the ports
|
| + // failed (either because the interface is down, or because there is no
|
| + // connection on the interface).
|
| + sigslot::signal2<PortAllocatorSession*, const std::vector<PortInterface*>&>
|
| + SignalPortsRemoved;
|
| sigslot::signal2<PortAllocatorSession*,
|
| const std::vector<Candidate>&> SignalCandidatesReady;
|
| + // Candidates should be signaled to be removed when the port that generated
|
| + // the candidates is removed.
|
| + sigslot::signal2<PortAllocatorSession*, const std::vector<Candidate>&>
|
| + SignalCandidatesRemoved;
|
| sigslot::signal1<PortAllocatorSession*> SignalCandidatesAllocationDone;
|
| // A TURN port is pruned if a higher-priority TURN port becomes ready
|
| // (pairable). When it is pruned, it will not be used for creating
|
| @@ -220,6 +252,7 @@ class PortAllocatorSession : public sigslot::has_slots<> {
|
| int component_;
|
| std::string ice_ufrag_;
|
| std::string ice_pwd_;
|
| + SessionState state_ = SessionState::CLEARED;
|
|
|
| // SetIceParameters is an implementation detail which only PortAllocator
|
| // should be able to call.
|
|
|