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 {
if (!desktop_environment_.get())
desktop_environment_.reset(DesktopEnvironment::Create(&context_));
protocol::NetworkSettings network_settings;
network_settings.allow_nat_traversal = allow_nat_traversal_;
protocol::NetworkSettings network_settings(allow_nat_traversal_);
if (!allow_nat_traversal_) {
network_settings.min_port = kMinPortNumber;
network_settings.max_port = kMaxPortNumber;
......
......@@ -344,8 +344,10 @@ int main(int argc, char** argv) {
simple_host.set_protocol_config(config.release());
}
simple_host.network_settings()->allow_nat_traversal =
!cmd_line->HasSwitch(kDisableNatTraversalSwitchName);
simple_host.network_settings()->nat_traversal_mode =
cmd_line->HasSwitch(kDisableNatTraversalSwitchName) ?
remoting::protocol::TransportConfig::NAT_TRAVERSAL_DISABLED :
remoting::protocol::TransportConfig::NAT_TRAVERSAL_ENABLED;
if (cmd_line->HasSwitch(kMinPortSwitchName)) {
std::string min_port_str =
......
......@@ -40,7 +40,7 @@ void JingleSessionManager::Init(
signal_strategy_ = 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_.max_port = network_settings.max_port;
......@@ -107,7 +107,8 @@ void JingleSessionManager::OnSignalStrategyStateChange(
SignalStrategy::State state) {
// If NAT traversal is enabled then we need to request STUN/Relay info.
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_->Send(base::Bind(&JingleSessionManager::OnJingleInfo,
base::Unretained(this)));
......
......@@ -148,7 +148,8 @@ class JingleSessionTest : public testing::Test {
client_server_.reset(new JingleSessionManager(
scoped_ptr<TransportFactory>(new LibjingleTransportFactory())));
client_server_->Init(client_signal_strategy_.get(),
&client_server_listener_, NetworkSettings());
&client_server_listener_, NetworkSettings(
TransportConfig::NAT_TRAVERSAL_OUTGOING));
}
void CloseSessionManager() {
......
......@@ -140,7 +140,7 @@ void LibjingleStreamTransport::Connect(
// when it is used together with TCP the performance is very bad
// so we explicitly disable TCP connections.
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(
network_manager_, socket_factory_, "");
port_allocator_.reset(http_port_allocator_);
......@@ -164,6 +164,8 @@ void LibjingleStreamTransport::Connect(
this, &LibjingleStreamTransport::OnCandidateReady);
channel_->SignalRouteChange.connect(
this, &LibjingleStreamTransport::OnRouteChange);
if (config_.nat_traversal_mode == TransportConfig::NAT_TRAVERSAL_DISABLED)
channel_->set_incoming_only(true);
channel_->Connect();
......
......@@ -149,7 +149,7 @@ void PepperStreamTransport::Connect(
LOG(ERROR) << "Failed to set TCP ACK delay.";
}
if (config_.nat_traversal) {
if (config_.nat_traversal_mode == TransportConfig::NAT_TRAVERSAL_ENABLED) {
if (transport->SetProperty(
PP_TRANSPORTPROPERTY_STUN_SERVER,
pp::Var(config_.stun_server)) != PP_OK) {
......
......@@ -59,6 +59,7 @@
#include "base/memory/ref_counted.h"
#include "base/threading/non_thread_safe.h"
#include "remoting/protocol/session.h"
#include "remoting/protocol/transport_config.h"
namespace remoting {
......@@ -72,18 +73,25 @@ class AuthenticatorFactory;
// TODO(sergeyu): Remove this struct and use TransportConfig instead.
struct 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),
max_port(0) {
}
explicit NetworkSettings(bool allow_nat_traversal_value)
: allow_nat_traversal(allow_nat_traversal_value),
explicit NetworkSettings(TransportConfig::NatTraversalMode nat_traversal_mode)
: nat_traversal_mode(nat_traversal_mode),
min_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
// P2P sessions. Any port can be used when both values are set to 0.
......
......@@ -8,7 +8,7 @@ namespace remoting {
namespace protocol {
TransportConfig::TransportConfig()
: nat_traversal(false),
: nat_traversal_mode(NAT_TRAVERSAL_DISABLED),
min_port(0),
max_port(0) {
}
......
......@@ -14,7 +14,21 @@ struct 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 relay_server;
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