summaryrefslogtreecommitdiffstats
path: root/remoting/protocol
diff options
context:
space:
mode:
authorsergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-02 01:07:39 +0000
committersergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-02 01:07:39 +0000
commit804d0728662a68b9023f007d93cb1541c33f1ab6 (patch)
tree1d26ffd43c139568d474fa46e76783d60677a37b /remoting/protocol
parent3d298014717f236f5d5d77124afdb25bca5214c9 (diff)
downloadchromium_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.cc5
-rw-r--r--remoting/protocol/jingle_session_unittest.cc3
-rw-r--r--remoting/protocol/libjingle_transport_factory.cc4
-rw-r--r--remoting/protocol/pepper_transport_factory.cc2
-rw-r--r--remoting/protocol/session_manager.h16
-rw-r--r--remoting/protocol/transport_config.cc2
-rw-r--r--remoting/protocol/transport_config.h16
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;