Commit 804d0728 authored by sergeyu@chromium.org's avatar sergeyu@chromium.org

Set incoming_only flag on the host side when NAT traversal is disabled.

BUG=115145

Review URL: https://chromiumcodereview.appspot.com/9549029

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@124555 0039d316-1c4b-4281-b951-d872f2087c98
parent 3d298014
...@@ -208,8 +208,7 @@ class HostProcess { ...@@ -208,8 +208,7 @@ class HostProcess {
if (!desktop_environment_.get()) if (!desktop_environment_.get())
desktop_environment_.reset(DesktopEnvironment::Create(&context_)); desktop_environment_.reset(DesktopEnvironment::Create(&context_));
protocol::NetworkSettings network_settings; protocol::NetworkSettings network_settings(allow_nat_traversal_);
network_settings.allow_nat_traversal = allow_nat_traversal_;
if (!allow_nat_traversal_) { if (!allow_nat_traversal_) {
network_settings.min_port = kMinPortNumber; network_settings.min_port = kMinPortNumber;
network_settings.max_port = kMaxPortNumber; network_settings.max_port = kMaxPortNumber;
......
...@@ -344,8 +344,10 @@ int main(int argc, char** argv) { ...@@ -344,8 +344,10 @@ int main(int argc, char** argv) {
simple_host.set_protocol_config(config.release()); simple_host.set_protocol_config(config.release());
} }
simple_host.network_settings()->allow_nat_traversal = simple_host.network_settings()->nat_traversal_mode =
!cmd_line->HasSwitch(kDisableNatTraversalSwitchName); cmd_line->HasSwitch(kDisableNatTraversalSwitchName) ?
remoting::protocol::TransportConfig::NAT_TRAVERSAL_DISABLED :
remoting::protocol::TransportConfig::NAT_TRAVERSAL_ENABLED;
if (cmd_line->HasSwitch(kMinPortSwitchName)) { if (cmd_line->HasSwitch(kMinPortSwitchName)) {
std::string min_port_str = std::string min_port_str =
......
...@@ -40,7 +40,7 @@ void JingleSessionManager::Init( ...@@ -40,7 +40,7 @@ void JingleSessionManager::Init(
signal_strategy_ = signal_strategy; signal_strategy_ = signal_strategy;
iq_sender_.reset(new IqSender(signal_strategy_)); iq_sender_.reset(new IqSender(signal_strategy_));
transport_config_.nat_traversal = network_settings.allow_nat_traversal; transport_config_.nat_traversal_mode = network_settings.nat_traversal_mode;
transport_config_.min_port = network_settings.min_port; transport_config_.min_port = network_settings.min_port;
transport_config_.max_port = network_settings.max_port; transport_config_.max_port = network_settings.max_port;
...@@ -107,7 +107,8 @@ void JingleSessionManager::OnSignalStrategyStateChange( ...@@ -107,7 +107,8 @@ void JingleSessionManager::OnSignalStrategyStateChange(
SignalStrategy::State state) { SignalStrategy::State state) {
// If NAT traversal is enabled then we need to request STUN/Relay info. // If NAT traversal is enabled then we need to request STUN/Relay info.
if (state == SignalStrategy::CONNECTED) { if (state == SignalStrategy::CONNECTED) {
if (transport_config_.nat_traversal) { if (transport_config_.nat_traversal_mode ==
TransportConfig::NAT_TRAVERSAL_ENABLED) {
jingle_info_request_.reset(new JingleInfoRequest(signal_strategy_)); jingle_info_request_.reset(new JingleInfoRequest(signal_strategy_));
jingle_info_request_->Send(base::Bind(&JingleSessionManager::OnJingleInfo, jingle_info_request_->Send(base::Bind(&JingleSessionManager::OnJingleInfo,
base::Unretained(this))); base::Unretained(this)));
......
...@@ -148,7 +148,8 @@ class JingleSessionTest : public testing::Test { ...@@ -148,7 +148,8 @@ class JingleSessionTest : public testing::Test {
client_server_.reset(new JingleSessionManager( client_server_.reset(new JingleSessionManager(
scoped_ptr<TransportFactory>(new LibjingleTransportFactory()))); scoped_ptr<TransportFactory>(new LibjingleTransportFactory())));
client_server_->Init(client_signal_strategy_.get(), client_server_->Init(client_signal_strategy_.get(),
&client_server_listener_, NetworkSettings()); &client_server_listener_, NetworkSettings(
TransportConfig::NAT_TRAVERSAL_OUTGOING));
} }
void CloseSessionManager() { void CloseSessionManager() {
......
...@@ -140,7 +140,7 @@ void LibjingleStreamTransport::Connect( ...@@ -140,7 +140,7 @@ void LibjingleStreamTransport::Connect(
// when it is used together with TCP the performance is very bad // when it is used together with TCP the performance is very bad
// so we explicitly disable TCP connections. // so we explicitly disable TCP connections.
int port_allocator_flags = cricket::PORTALLOCATOR_DISABLE_TCP; int port_allocator_flags = cricket::PORTALLOCATOR_DISABLE_TCP;
if (config_.nat_traversal) { if (config_.nat_traversal_mode == TransportConfig::NAT_TRAVERSAL_ENABLED) {
http_port_allocator_ = new cricket::HttpPortAllocator( http_port_allocator_ = new cricket::HttpPortAllocator(
network_manager_, socket_factory_, ""); network_manager_, socket_factory_, "");
port_allocator_.reset(http_port_allocator_); port_allocator_.reset(http_port_allocator_);
...@@ -164,6 +164,8 @@ void LibjingleStreamTransport::Connect( ...@@ -164,6 +164,8 @@ void LibjingleStreamTransport::Connect(
this, &LibjingleStreamTransport::OnCandidateReady); this, &LibjingleStreamTransport::OnCandidateReady);
channel_->SignalRouteChange.connect( channel_->SignalRouteChange.connect(
this, &LibjingleStreamTransport::OnRouteChange); this, &LibjingleStreamTransport::OnRouteChange);
if (config_.nat_traversal_mode == TransportConfig::NAT_TRAVERSAL_DISABLED)
channel_->set_incoming_only(true);
channel_->Connect(); channel_->Connect();
......
...@@ -149,7 +149,7 @@ void PepperStreamTransport::Connect( ...@@ -149,7 +149,7 @@ void PepperStreamTransport::Connect(
LOG(ERROR) << "Failed to set TCP ACK delay."; LOG(ERROR) << "Failed to set TCP ACK delay.";
} }
if (config_.nat_traversal) { if (config_.nat_traversal_mode == TransportConfig::NAT_TRAVERSAL_ENABLED) {
if (transport->SetProperty( if (transport->SetProperty(
PP_TRANSPORTPROPERTY_STUN_SERVER, PP_TRANSPORTPROPERTY_STUN_SERVER,
pp::Var(config_.stun_server)) != PP_OK) { pp::Var(config_.stun_server)) != PP_OK) {
......
...@@ -59,6 +59,7 @@ ...@@ -59,6 +59,7 @@
#include "base/memory/ref_counted.h" #include "base/memory/ref_counted.h"
#include "base/threading/non_thread_safe.h" #include "base/threading/non_thread_safe.h"
#include "remoting/protocol/session.h" #include "remoting/protocol/session.h"
#include "remoting/protocol/transport_config.h"
namespace remoting { namespace remoting {
...@@ -72,18 +73,25 @@ class AuthenticatorFactory; ...@@ -72,18 +73,25 @@ class AuthenticatorFactory;
// TODO(sergeyu): Remove this struct and use TransportConfig instead. // TODO(sergeyu): Remove this struct and use TransportConfig instead.
struct NetworkSettings { struct NetworkSettings {
NetworkSettings() NetworkSettings()
: allow_nat_traversal(false), : nat_traversal_mode(TransportConfig::NAT_TRAVERSAL_DISABLED),
max_port(0) {
}
explicit NetworkSettings(bool allow_nat_traversal)
: nat_traversal_mode(allow_nat_traversal ?
TransportConfig::NAT_TRAVERSAL_ENABLED :
TransportConfig::NAT_TRAVERSAL_DISABLED),
min_port(0), min_port(0),
max_port(0) { max_port(0) {
} }
explicit NetworkSettings(bool allow_nat_traversal_value) explicit NetworkSettings(TransportConfig::NatTraversalMode nat_traversal_mode)
: allow_nat_traversal(allow_nat_traversal_value), : nat_traversal_mode(nat_traversal_mode),
min_port(0), min_port(0),
max_port(0) { max_port(0) {
} }
bool allow_nat_traversal; TransportConfig::NatTraversalMode nat_traversal_mode;
// |min_port| and |max_port| specify range (inclusive) of ports used by // |min_port| and |max_port| specify range (inclusive) of ports used by
// P2P sessions. Any port can be used when both values are set to 0. // P2P sessions. Any port can be used when both values are set to 0.
......
...@@ -8,7 +8,7 @@ namespace remoting { ...@@ -8,7 +8,7 @@ namespace remoting {
namespace protocol { namespace protocol {
TransportConfig::TransportConfig() TransportConfig::TransportConfig()
: nat_traversal(false), : nat_traversal_mode(NAT_TRAVERSAL_DISABLED),
min_port(0), min_port(0),
max_port(0) { max_port(0) {
} }
......
...@@ -14,7 +14,21 @@ struct TransportConfig { ...@@ -14,7 +14,21 @@ struct TransportConfig {
TransportConfig(); TransportConfig();
~TransportConfig(); ~TransportConfig();
bool nat_traversal; enum NatTraversalMode {
// Don't use STUN or relay servers. Accept incoming P2P connection
// attempts, but don't initiate any. This ensures that the peer is
// on the same network. Note that connection will always fail if
// both ends use this mode.
NAT_TRAVERSAL_DISABLED,
// Don't use STUN or relay servers but make outgoing connections.
NAT_TRAVERSAL_OUTGOING,
// Active NAT traversal using STUN and relay servers.
NAT_TRAVERSAL_ENABLED,
};
NatTraversalMode nat_traversal_mode;
std::string stun_server; std::string stun_server;
std::string relay_server; std::string relay_server;
std::string relay_token; std::string relay_token;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment