| Index: remoting/protocol/port_allocator_base.cc
|
| diff --git a/remoting/protocol/port_allocator_base.cc b/remoting/protocol/port_allocator_base.cc
|
| deleted file mode 100644
|
| index acc26c75cf76546dc943046380f5578bae598fc7..0000000000000000000000000000000000000000
|
| --- a/remoting/protocol/port_allocator_base.cc
|
| +++ /dev/null
|
| @@ -1,188 +0,0 @@
|
| -// Copyright 2016 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "remoting/protocol/port_allocator_base.h"
|
| -
|
| -#include <algorithm>
|
| -#include <map>
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/logging.h"
|
| -#include "base/strings/string_number_conversions.h"
|
| -#include "base/strings/string_split.h"
|
| -#include "net/base/escape.h"
|
| -#include "remoting/protocol/network_settings.h"
|
| -#include "remoting/protocol/transport_context.h"
|
| -
|
| -namespace {
|
| -
|
| -typedef std::map<std::string, std::string> StringMap;
|
| -
|
| -// Parses the lines in the result of the HTTP request that are of the form
|
| -// 'a=b' and returns them in a map.
|
| -StringMap ParseMap(const std::string& string) {
|
| - StringMap map;
|
| - base::StringPairs pairs;
|
| - base::SplitStringIntoKeyValuePairs(string, '=', '\n', &pairs);
|
| -
|
| - for (auto& pair : pairs) {
|
| - map[pair.first] = pair.second;
|
| - }
|
| - return map;
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -namespace remoting {
|
| -namespace protocol {
|
| -
|
| -const int PortAllocatorBase::kNumRetries = 5;
|
| -
|
| -PortAllocatorBase::PortAllocatorBase(
|
| - scoped_ptr<rtc::NetworkManager> network_manager,
|
| - scoped_ptr<rtc::PacketSocketFactory> socket_factory,
|
| - scoped_refptr<TransportContext> transport_context)
|
| - : BasicPortAllocator(network_manager.get(), socket_factory.get()),
|
| - network_manager_(std::move(network_manager)),
|
| - socket_factory_(std::move(socket_factory)),
|
| - transport_context_(transport_context) {
|
| - // 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. ENABLE_SHARED_UFRAG flag is specified so that the same username
|
| - // fragment is shared between all candidates.
|
| - int flags = cricket::PORTALLOCATOR_DISABLE_TCP |
|
| - cricket::PORTALLOCATOR_ENABLE_SHARED_UFRAG |
|
| - cricket::PORTALLOCATOR_ENABLE_IPV6;
|
| -
|
| - NetworkSettings network_settings = transport_context_->network_settings();
|
| -
|
| - if (!(network_settings.flags & NetworkSettings::NAT_TRAVERSAL_STUN))
|
| - flags |= cricket::PORTALLOCATOR_DISABLE_STUN;
|
| -
|
| - if (!(network_settings.flags & NetworkSettings::NAT_TRAVERSAL_RELAY))
|
| - flags |= cricket::PORTALLOCATOR_DISABLE_RELAY;
|
| -
|
| - set_flags(flags);
|
| - SetPortRange(network_settings.port_range.min_port,
|
| - network_settings.port_range.max_port);
|
| -}
|
| -
|
| -PortAllocatorBase::~PortAllocatorBase() {}
|
| -
|
| -PortAllocatorSessionBase::PortAllocatorSessionBase(
|
| - PortAllocatorBase* allocator,
|
| - const std::string& content_name,
|
| - int component,
|
| - const std::string& ice_ufrag,
|
| - const std::string& ice_pwd)
|
| - : BasicPortAllocatorSession(allocator,
|
| - content_name,
|
| - component,
|
| - ice_ufrag,
|
| - ice_pwd),
|
| - transport_context_(allocator->transport_context()),
|
| - weak_factory_(this) {}
|
| -
|
| -PortAllocatorSessionBase::~PortAllocatorSessionBase() {}
|
| -
|
| -void PortAllocatorSessionBase::GetPortConfigurations() {
|
| - transport_context_->GetJingleInfo(base::Bind(
|
| - &PortAllocatorSessionBase::OnJingleInfo, weak_factory_.GetWeakPtr()));
|
| -}
|
| -
|
| -void PortAllocatorSessionBase::OnJingleInfo(
|
| - std::vector<rtc::SocketAddress> stun_hosts,
|
| - std::vector<std::string> relay_hosts,
|
| - std::string relay_token) {
|
| - stun_hosts_ = stun_hosts;
|
| - relay_hosts_ = relay_hosts;
|
| - relay_token_ = relay_token;
|
| -
|
| - // Creating relay sessions can take time and is done asynchronously.
|
| - // Creating stun sessions could also take time and could be done aysnc also,
|
| - // but for now is done here and added to the initial config. Note any later
|
| - // configs will have unresolved stun ips and will be discarded by the
|
| - // AllocationSequence.
|
| - cricket::ServerAddresses hosts;
|
| - for (const auto& host : stun_hosts_) {
|
| - hosts.insert(host);
|
| - }
|
| -
|
| - cricket::PortConfiguration* config =
|
| - new cricket::PortConfiguration(hosts, username(), password());
|
| - ConfigReady(config);
|
| - TryCreateRelaySession();
|
| -}
|
| -
|
| -void PortAllocatorSessionBase::TryCreateRelaySession() {
|
| - if (flags() & cricket::PORTALLOCATOR_DISABLE_RELAY)
|
| - return;
|
| -
|
| - if (attempts_ == PortAllocatorBase::kNumRetries) {
|
| - LOG(ERROR) << "PortAllocator: maximum number of requests reached; "
|
| - << "giving up on relay.";
|
| - return;
|
| - }
|
| -
|
| - if (relay_hosts_.empty()) {
|
| - LOG(ERROR) << "PortAllocator: no relay hosts configured.";
|
| - return;
|
| - }
|
| -
|
| - if (relay_token_.empty()){
|
| - LOG(WARNING) << "No relay auth token found.";
|
| - return;
|
| - }
|
| -
|
| - // Choose the next host to try.
|
| - std::string host = relay_hosts_[attempts_ % relay_hosts_.size()];
|
| - attempts_++;
|
| - SendSessionRequest(host);
|
| -}
|
| -
|
| -std::string PortAllocatorSessionBase::GetSessionRequestUrl() {
|
| - ASSERT(!username().empty());
|
| - ASSERT(!password().empty());
|
| - return "/create_session?username=" +
|
| - net::EscapeUrlEncodedData(username(), false) + "&password=" +
|
| - net::EscapeUrlEncodedData(password(), false);
|
| -}
|
| -
|
| -void PortAllocatorSessionBase::ReceiveSessionResponse(
|
| - const std::string& response) {
|
| - StringMap map = ParseMap(response);
|
| -
|
| - if (!username().empty() && map["username"] != username()) {
|
| - LOG(WARNING) << "Received unexpected username value from relay server.";
|
| - }
|
| - if (!password().empty() && map["password"] != password()) {
|
| - LOG(WARNING) << "Received unexpected password value from relay server.";
|
| - }
|
| -
|
| - cricket::ServerAddresses hosts;
|
| - for (const auto& host : stun_hosts_) {
|
| - hosts.insert(host);
|
| - }
|
| -
|
| - cricket::PortConfiguration* config =
|
| - new cricket::PortConfiguration(hosts, map["username"], map["password"]);
|
| -
|
| - std::string relay_ip = map["relay.ip"];
|
| - std::string relay_port = map["relay.udp_port"];
|
| - unsigned relay_port_int;
|
| -
|
| - if (!relay_ip.empty() && !relay_port.empty() &&
|
| - base::StringToUint(relay_port, &relay_port_int)) {
|
| - cricket::RelayServerConfig relay_config(cricket::RELAY_GTURN);
|
| - rtc::SocketAddress address(relay_ip, relay_port_int);
|
| - relay_config.ports.push_back(
|
| - cricket::ProtocolAddress(address, cricket::PROTO_UDP));
|
| - config->AddRelay(relay_config);
|
| - }
|
| -
|
| - ConfigReady(config);
|
| -}
|
| -
|
| -} // namespace protocol
|
| -} // namespace remoting
|
|
|