| Index: webrtc/p2p/client/basicportallocator.h
|
| diff --git a/webrtc/p2p/client/basicportallocator.h b/webrtc/p2p/client/basicportallocator.h
|
| index 6a719c73bdd65e270ac67db1bef9545cbf733147..8ea66c431e76d560a6299c2831d77a1a83dfeb06 100644
|
| --- a/webrtc/p2p/client/basicportallocator.h
|
| +++ b/webrtc/p2p/client/basicportallocator.h
|
| @@ -88,6 +88,7 @@ class BasicPortAllocatorSession : public PortAllocatorSession,
|
| rtc::Thread* network_thread() { return network_thread_; }
|
| rtc::PacketSocketFactory* socket_factory() { return socket_factory_; }
|
|
|
| + void SetCandidateFilter(uint32_t filter) override;
|
| void StartGettingPorts() override;
|
| void StopGettingPorts() override;
|
| void ClearGettingPorts() override;
|
| @@ -113,36 +114,40 @@ class BasicPortAllocatorSession : public PortAllocatorSession,
|
| private:
|
| class PortData {
|
| public:
|
| - PortData() : port_(NULL), sequence_(NULL), state_(STATE_INIT) {}
|
| + PortData() {}
|
| PortData(Port* port, AllocationSequence* seq)
|
| - : port_(port), sequence_(seq), state_(STATE_INIT) {
|
| - }
|
| + : port_(port), sequence_(seq) {}
|
|
|
| Port* port() const { return port_; }
|
| AllocationSequence* sequence() const { return sequence_; }
|
| - bool ready() const { return state_ == STATE_READY; }
|
| + bool has_pairable_candidate() const { return has_pairable_candidate_; }
|
| bool complete() const { return state_ == STATE_COMPLETE; }
|
| bool error() const { return state_ == STATE_ERROR; }
|
|
|
| - void set_ready() { ASSERT(state_ == STATE_INIT); state_ = STATE_READY; }
|
| + void set_has_pairable_candidate(bool has_pairable_candidate) {
|
| + if (has_pairable_candidate) {
|
| + ASSERT(state_ == STATE_INPROGRESS);
|
| + }
|
| + has_pairable_candidate_ = has_pairable_candidate;
|
| + }
|
| void set_complete() {
|
| state_ = STATE_COMPLETE;
|
| }
|
| void set_error() {
|
| - ASSERT(state_ == STATE_INIT || state_ == STATE_READY);
|
| + ASSERT(state_ == STATE_INPROGRESS);
|
| state_ = STATE_ERROR;
|
| }
|
|
|
| private:
|
| enum State {
|
| - STATE_INIT, // No candidates allocated yet.
|
| - STATE_READY, // At least one candidate is ready for process.
|
| - STATE_COMPLETE, // All candidates allocated and ready for process.
|
| - STATE_ERROR // Error in gathering candidates.
|
| + STATE_INPROGRESS, // Still gathering candidates.
|
| + STATE_COMPLETE, // All candidates allocated and ready for process.
|
| + STATE_ERROR // Error in gathering candidates.
|
| };
|
| - Port* port_;
|
| - AllocationSequence* sequence_;
|
| - State state_;
|
| + Port* port_ = nullptr;
|
| + AllocationSequence* sequence_ = nullptr;
|
| + State state_ = STATE_INPROGRESS;
|
| + bool has_pairable_candidate_ = false;
|
| };
|
|
|
| void OnConfigReady(PortConfiguration* config);
|
| @@ -168,6 +173,10 @@ class BasicPortAllocatorSession : public PortAllocatorSession,
|
| void GetNetworks(std::vector<rtc::Network*>* networks);
|
|
|
| bool CheckCandidateFilter(const Candidate& c) const;
|
| + bool CandidatePairable(const Candidate& c, const Port* port) const;
|
| + // Clear the related address according to the flags and candidate filter
|
| + // in order to avoid leaking any information.
|
| + Candidate SanitizeRelatedAddress(const Candidate& c) const;
|
|
|
| BasicPortAllocator* allocator_;
|
| rtc::Thread* network_thread_;
|
| @@ -180,6 +189,7 @@ class BasicPortAllocatorSession : public PortAllocatorSession,
|
| std::vector<PortConfiguration*> configs_;
|
| std::vector<AllocationSequence*> sequences_;
|
| std::vector<PortData> ports_;
|
| + uint32_t candidate_filter_ = CF_ALL;
|
|
|
| friend class AllocationSequence;
|
| };
|
|
|