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

Unified Diff: webrtc/p2p/client/basicportallocator.cc

Issue 1361183004: When doing DisableEquivalentPhases, exclude those AllocationSequences (Closed) Base URL: https://chromium.googlesource.com/external/webrtc@master
Patch Set: Created 5 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/p2p/client/basicportallocator.h ('k') | webrtc/p2p/client/portallocator_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/p2p/client/basicportallocator.cc
diff --git a/webrtc/p2p/client/basicportallocator.cc b/webrtc/p2p/client/basicportallocator.cc
index 982025279d7322102add345e7c897145599233bb..11d0cef84741309a660f6aee10e7143016a20470 100644
--- a/webrtc/p2p/client/basicportallocator.cc
+++ b/webrtc/p2p/client/basicportallocator.cc
@@ -298,28 +298,35 @@ void BasicPortAllocatorSession::OnAllocate() {
allocation_started_ = true;
}
-// For each network, see if we have a sequence that covers it already. If not,
-// create a new sequence to create the appropriate ports.
-void BasicPortAllocatorSession::DoAllocate() {
- bool done_signal_needed = false;
- std::vector<rtc::Network*> networks;
-
+void BasicPortAllocatorSession::GetNetworks(
+ std::vector<rtc::Network*>* networks) {
+ networks->clear();
+ rtc::NetworkManager* network_manager = allocator_->network_manager();
+ ASSERT(network_manager != nullptr);
// If the network permission state is BLOCKED, we just act as if the flag has
// been passed in.
- if (allocator_->network_manager()->enumeration_permission() ==
+ if (network_manager->enumeration_permission() ==
rtc::NetworkManager::ENUMERATION_BLOCKED) {
set_flags(flags() | PORTALLOCATOR_DISABLE_ADAPTER_ENUMERATION);
}
-
// If the adapter enumeration is disabled, we'll just bind to any address
// instead of specific NIC. This is to ensure the same routing for http
// traffic by OS is also used here to avoid any local or public IP leakage
// during stun process.
if (flags() & PORTALLOCATOR_DISABLE_ADAPTER_ENUMERATION) {
- allocator_->network_manager()->GetAnyAddressNetworks(&networks);
+ network_manager->GetAnyAddressNetworks(networks);
} else {
- allocator_->network_manager()->GetNetworks(&networks);
+ network_manager->GetNetworks(networks);
}
+}
+
+// For each network, see if we have a sequence that covers it already. If not,
+// create a new sequence to create the appropriate ports.
+void BasicPortAllocatorSession::DoAllocate() {
+ bool done_signal_needed = false;
+ std::vector<rtc::Network*> networks;
+ GetNetworks(&networks);
+
if (networks.empty()) {
LOG(LS_WARNING) << "Machine has no networks; no ports will be allocated";
done_signal_needed = true;
@@ -377,6 +384,18 @@ void BasicPortAllocatorSession::DoAllocate() {
}
void BasicPortAllocatorSession::OnNetworksChanged() {
+ std::vector<rtc::Network*> networks;
+ GetNetworks(&networks);
+ for (AllocationSequence* sequence : sequences_) {
+ // Remove the network from the allocation sequence if it is not in
+ // |networks|.
+ if (!sequence->network_removed() &&
+ std::find(networks.begin(), networks.end(), sequence->network()) ==
+ networks.end()) {
+ sequence->OnNetworkRemoved();
+ }
+ }
+
network_manager_started_ = true;
if (allocation_started_)
DoAllocate();
@@ -711,12 +730,24 @@ void AllocationSequence::Clear() {
turn_ports_.clear();
}
+void AllocationSequence::OnNetworkRemoved() {
+ // Stop the allocation sequence if its network is gone.
+ Stop();
+ network_removed_ = true;
+}
+
AllocationSequence::~AllocationSequence() {
session_->network_thread()->Clear(this);
}
void AllocationSequence::DisableEquivalentPhases(rtc::Network* network,
PortConfiguration* config, uint32* flags) {
+ if (network_removed_) {
+ // If the network of this allocation sequence has ever gone away,
+ // it won't be equivalent to the new network.
+ return;
+ }
+
if (!((network == network_) && (ip_ == network->GetBestIP()))) {
// Different network setup; nothing is equivalent.
return;
« no previous file with comments | « webrtc/p2p/client/basicportallocator.h ('k') | webrtc/p2p/client/portallocator_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698