| Index: webrtc/p2p/client/basicportallocator.h
|
| diff --git a/webrtc/p2p/client/basicportallocator.h b/webrtc/p2p/client/basicportallocator.h
|
| index 8ea66c431e76d560a6299c2831d77a1a83dfeb06..bddb3967e544b37ff3ea62039903a9d6091de3e1 100644
|
| --- a/webrtc/p2p/client/basicportallocator.h
|
| +++ b/webrtc/p2p/client/basicportallocator.h
|
| @@ -123,7 +123,15 @@ class BasicPortAllocatorSession : public PortAllocatorSession,
|
| bool has_pairable_candidate() const { return has_pairable_candidate_; }
|
| bool complete() const { return state_ == STATE_COMPLETE; }
|
| bool error() const { return state_ == STATE_ERROR; }
|
| + bool pruned() const { return state_ == STATE_PRUNED; }
|
| + bool inprogress() const { return state_ == STATE_INPROGRESS; }
|
| + // Returns true if this port is ready to be used.
|
| + bool ready() const {
|
| + return has_pairable_candidate_ && state_ != STATE_ERROR &&
|
| + state_ != STATE_PRUNED;
|
| + }
|
|
|
| + void set_pruned() { state_ = STATE_PRUNED; }
|
| void set_has_pairable_candidate(bool has_pairable_candidate) {
|
| if (has_pairable_candidate) {
|
| ASSERT(state_ == STATE_INPROGRESS);
|
| @@ -142,7 +150,9 @@ class BasicPortAllocatorSession : public PortAllocatorSession,
|
| enum State {
|
| STATE_INPROGRESS, // Still gathering candidates.
|
| STATE_COMPLETE, // All candidates allocated and ready for process.
|
| - STATE_ERROR // Error in gathering candidates.
|
| + STATE_ERROR, // Error in gathering candidates.
|
| + STATE_PRUNED // Pruned by higher priority ports on the same network
|
| + // interface. Only TURN ports may be pruned.
|
| };
|
| Port* port_ = nullptr;
|
| AllocationSequence* sequence_ = nullptr;
|
| @@ -178,6 +188,10 @@ class BasicPortAllocatorSession : public PortAllocatorSession,
|
| // in order to avoid leaking any information.
|
| Candidate SanitizeRelatedAddress(const Candidate& c) const;
|
|
|
| + Port* GetBestTurnPortForNetwork(const std::string& network_name) const;
|
| + // Returns true if at least one TURN port is pruned.
|
| + bool PruneTurnPorts(Port* newly_pairable_turn_port);
|
| +
|
| BasicPortAllocator* allocator_;
|
| rtc::Thread* network_thread_;
|
| std::unique_ptr<rtc::PacketSocketFactory> owned_socket_factory_;
|
| @@ -190,6 +204,8 @@ class BasicPortAllocatorSession : public PortAllocatorSession,
|
| std::vector<AllocationSequence*> sequences_;
|
| std::vector<PortData> ports_;
|
| uint32_t candidate_filter_ = CF_ALL;
|
| + // Whether to prune low-priority ports, taken from the port allocator.
|
| + bool prune_turn_ports_;
|
|
|
| friend class AllocationSequence;
|
| };
|
|
|