diff options
author | sergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-02 01:07:39 +0000 |
---|---|---|
committer | sergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-02 01:07:39 +0000 |
commit | 804d0728662a68b9023f007d93cb1541c33f1ab6 (patch) | |
tree | 1d26ffd43c139568d474fa46e76783d60677a37b /remoting/protocol | |
parent | 3d298014717f236f5d5d77124afdb25bca5214c9 (diff) | |
download | chromium_src-804d0728662a68b9023f007d93cb1541c33f1ab6.zip chromium_src-804d0728662a68b9023f007d93cb1541c33f1ab6.tar.gz chromium_src-804d0728662a68b9023f007d93cb1541c33f1ab6.tar.bz2 |
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
Diffstat (limited to 'remoting/protocol')
-rw-r--r-- | remoting/protocol/jingle_session_manager.cc | 5 | ||||
-rw-r--r-- | remoting/protocol/jingle_session_unittest.cc | 3 | ||||
-rw-r--r-- | remoting/protocol/libjingle_transport_factory.cc | 4 | ||||
-rw-r--r-- | remoting/protocol/pepper_transport_factory.cc | 2 | ||||
-rw-r--r-- | remoting/protocol/session_manager.h | 16 | ||||
-rw-r--r-- | remoting/protocol/transport_config.cc | 2 | ||||
-rw-r--r-- | remoting/protocol/transport_config.h | 16 |
7 files changed, 37 insertions, 11 deletions
diff --git a/remoting/protocol/jingle_session_manager.cc b/remoting/protocol/jingle_session_manager.cc index 1735954..f457d68 100644 --- a/remoting/protocol/jingle_session_manager.cc +++ b/remoting/protocol/jingle_session_manager.cc @@ -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))); diff --git a/remoting/protocol/jingle_session_unittest.cc b/remoting/protocol/jingle_session_unittest.cc index a8b9797..ee46868 100644 --- a/remoting/protocol/jingle_session_unittest.cc +++ b/remoting/protocol/jingle_session_unittest.cc @@ -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() { diff --git a/remoting/protocol/libjingle_transport_factory.cc b/remoting/protocol/libjingle_transport_factory.cc index 3dbedf7..75f0452 100644 --- a/remoting/protocol/libjingle_transport_factory.cc +++ b/remoting/protocol/libjingle_transport_factory.cc @@ -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(); diff --git a/remoting/protocol/pepper_transport_factory.cc b/remoting/protocol/pepper_transport_factory.cc index 5f63712..5d380cf 100644 --- a/remoting/protocol/pepper_transport_factory.cc +++ b/remoting/protocol/pepper_transport_factory.cc @@ -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) { diff --git a/remoting/protocol/session_manager.h b/remoting/protocol/session_manager.h index 1f6323e..cac11f0 100644 --- a/remoting/protocol/session_manager.h +++ b/remoting/protocol/session_manager.h @@ -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. diff --git a/remoting/protocol/transport_config.cc b/remoting/protocol/transport_config.cc index 50787e9..bed4741 100644 --- a/remoting/protocol/transport_config.cc +++ b/remoting/protocol/transport_config.cc @@ -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) { } diff --git a/remoting/protocol/transport_config.h b/remoting/protocol/transport_config.h index 7599bf6..8b1089a 100644 --- a/remoting/protocol/transport_config.h +++ b/remoting/protocol/transport_config.h @@ -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; |