Index: remoting/protocol/port_allocator_base.cc |
diff --git a/remoting/protocol/port_allocator_base.cc b/remoting/protocol/port_allocator_base.cc |
index a62d528f0d84fbdc5fa9251ccf25b785ef7b65d6..37f4ab9876b48c755a7422e77699c9257ef13246 100644 |
--- a/remoting/protocol/port_allocator_base.cc |
+++ b/remoting/protocol/port_allocator_base.cc |
@@ -7,10 +7,13 @@ |
#include <algorithm> |
#include <map> |
+#include "base/bind.h" |
#include "base/logging.h" |
#include "base/strings/string_number_conversions.h" |
#include "base/strings/string_split.h" |
#include "net/base/escape.h" |
+#include "remoting/protocol/network_settings.h" |
+#include "remoting/protocol/transport_context.h" |
namespace { |
@@ -36,47 +39,65 @@ namespace protocol { |
const int PortAllocatorBase::kNumRetries = 5; |
-PortAllocatorBase::PortAllocatorBase(rtc::NetworkManager* network_manager, |
- rtc::PacketSocketFactory* socket_factory) |
- : BasicPortAllocator(network_manager, socket_factory) {} |
- |
-PortAllocatorBase::~PortAllocatorBase() {} |
- |
-void PortAllocatorBase::SetStunHosts( |
- const std::vector<rtc::SocketAddress>& hosts) { |
- stun_hosts_ = hosts; |
-} |
- |
-void PortAllocatorBase::SetRelayHosts(const std::vector<std::string>& hosts) { |
- relay_hosts_ = hosts; |
+PortAllocatorBase::PortAllocatorBase( |
+ scoped_ptr<rtc::NetworkManager> network_manager, |
+ scoped_ptr<rtc::PacketSocketFactory> socket_factory, |
+ scoped_refptr<TransportContext> transport_context) |
+ : BasicPortAllocator(network_manager.get(), socket_factory.get()), |
+ network_manager_(std::move(network_manager)), |
+ socket_factory_(std::move(socket_factory)), |
+ transport_context_(transport_context) { |
+ // We always use PseudoTcp to provide a reliable channel. It provides poor |
+ // performance when combined with TCP-based transport, so we have to disable |
+ // TCP ports. ENABLE_SHARED_UFRAG flag is specified so that the same username |
+ // fragment is shared between all candidates. |
+ int flags = cricket::PORTALLOCATOR_DISABLE_TCP | |
+ cricket::PORTALLOCATOR_ENABLE_SHARED_UFRAG | |
+ cricket::PORTALLOCATOR_ENABLE_IPV6; |
+ |
+ NetworkSettings network_settings = transport_context_->network_settings(); |
+ |
+ if (!(network_settings.flags & NetworkSettings::NAT_TRAVERSAL_STUN)) |
+ flags |= cricket::PORTALLOCATOR_DISABLE_STUN; |
+ |
+ if (!(network_settings.flags & NetworkSettings::NAT_TRAVERSAL_RELAY)) |
+ flags |= cricket::PORTALLOCATOR_DISABLE_RELAY; |
+ |
+ set_flags(flags); |
+ SetPortRange(network_settings.port_range.min_port, |
+ network_settings.port_range.max_port); |
} |
-void PortAllocatorBase::SetRelayToken(const std::string& relay) { |
- relay_token_ = relay; |
-} |
+PortAllocatorBase::~PortAllocatorBase() {} |
PortAllocatorSessionBase::PortAllocatorSessionBase( |
PortAllocatorBase* allocator, |
const std::string& content_name, |
int component, |
const std::string& ice_ufrag, |
- const std::string& ice_pwd, |
- const std::vector<rtc::SocketAddress>& stun_hosts, |
- const std::vector<std::string>& relay_hosts, |
- const std::string& relay_token) |
+ const std::string& ice_pwd) |
: BasicPortAllocatorSession(allocator, |
content_name, |
component, |
ice_ufrag, |
ice_pwd), |
- relay_hosts_(relay_hosts), |
- stun_hosts_(stun_hosts), |
- relay_token_(relay_token), |
- attempts_(0) {} |
+ weak_factory_(this) {} |
PortAllocatorSessionBase::~PortAllocatorSessionBase() {} |
void PortAllocatorSessionBase::GetPortConfigurations() { |
+ allocator()->transport_context()->GetJingleInfo(base::Bind( |
+ &PortAllocatorSessionBase::OnJingleInfo, weak_factory_.GetWeakPtr())); |
+} |
+ |
+void PortAllocatorSessionBase::OnJingleInfo( |
+ std::vector<rtc::SocketAddress> stun_hosts, |
+ std::vector<std::string> relay_hosts, |
+ std::string relay_token) { |
+ stun_hosts_ = stun_hosts; |
+ relay_hosts_ = relay_hosts; |
+ relay_token_ = relay_token; |
+ |
// Creating relay sessions can take time and is done asynchronously. |
// Creating stun sessions could also take time and could be done aysnc also, |
// but for now is done here and added to the initial config. Note any later |