Index: remoting/host/chromoting_host.cc |
diff --git a/remoting/host/chromoting_host.cc b/remoting/host/chromoting_host.cc |
index 2e300d28091e7169f170b5096c1d7f62627b809c..64753316151cc98fa26cacd86457aea950dc9b57 100644 |
--- a/remoting/host/chromoting_host.cc |
+++ b/remoting/host/chromoting_host.cc |
@@ -25,6 +25,9 @@ |
#include "remoting/protocol/jingle_session_manager.h" |
#include "remoting/protocol/libjingle_transport_factory.h" |
#include "remoting/protocol/session_config.h" |
+#include "third_party/libjingle/source/talk/base/basicpacketsocketfactory.h" |
+#include "third_party/libjingle/source/talk/base/network.h" |
+#include "third_party/libjingle/source/talk/p2p/client/httpportallocator.h" |
using remoting::protocol::ConnectionToClient; |
using remoting::protocol::InputStub; |
@@ -65,7 +68,7 @@ ChromotingHost::ChromotingHost( |
ChromotingHostContext* context, |
SignalStrategy* signal_strategy, |
DesktopEnvironment* environment, |
- const protocol::NetworkSettings& network_settings) |
+ const NetworkSettings& network_settings) |
: context_(context), |
desktop_environment_(environment), |
network_settings_(network_settings), |
@@ -97,12 +100,48 @@ void ChromotingHost::Start() { |
return; |
state_ = kStarted; |
- // Create and start session manager. |
+ // Create port allocator. |
+ // TODO(sergeyu): Replace the code below with HostPortAllocator when |
+ // it is implemented. |
+ scoped_ptr<talk_base::NetworkManager> network_manager( |
+ new talk_base::BasicNetworkManager()); |
+ scoped_ptr<talk_base::PacketSocketFactory> socket_factory( |
+ new talk_base::BasicPacketSocketFactory()); |
+ scoped_ptr<cricket::PortAllocator> port_allocator; |
+ |
+ // 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. |
+ int port_allocator_flags = cricket::PORTALLOCATOR_DISABLE_TCP; |
+ if (network_settings_.nat_traversal_mode == |
+ NetworkSettings::NAT_TRAVERSAL_ENABLED) { |
+ port_allocator.reset(new cricket::HttpPortAllocator( |
+ network_manager.get(), socket_factory.get(), "")); |
+ } else { |
+ port_allocator_flags |= cricket::PORTALLOCATOR_DISABLE_STUN | |
+ cricket::PORTALLOCATOR_DISABLE_RELAY; |
+ port_allocator.reset( |
+ new cricket::BasicPortAllocator(network_manager.get(), |
+ socket_factory.get())); |
+ } |
+ port_allocator->set_flags(port_allocator_flags); |
+ port_allocator->SetPortRange(network_settings_.min_port, |
+ network_settings_.max_port); |
+ |
+ bool incoming_only = network_settings_.nat_traversal_mode == |
+ NetworkSettings::NAT_TRAVERSAL_DISABLED; |
+ |
scoped_ptr<protocol::TransportFactory> transport_factory( |
- new protocol::LibjingleTransportFactory()); |
- session_manager_.reset( |
- new protocol::JingleSessionManager(transport_factory.Pass())); |
- session_manager_->Init(signal_strategy_, this, network_settings_); |
+ new protocol::LibjingleTransportFactory( |
+ network_manager.Pass(), socket_factory.Pass(), |
+ port_allocator.Pass(), incoming_only)); |
+ |
+ // Create and start session manager. |
+ bool fetch_stun_relay_info = network_settings_.nat_traversal_mode == |
+ NetworkSettings::NAT_TRAVERSAL_ENABLED; |
+ session_manager_.reset(new protocol::JingleSessionManager( |
+ transport_factory.Pass(), fetch_stun_relay_info)); |
+ session_manager_->Init(signal_strategy_, this); |
} |
// This method is called when we need to destroy the host process. |