| // Copyright (c) 2012 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 "content/renderer/p2p/port_allocator.h" |
| |
| namespace content { |
| |
| P2PPortAllocator::Config::Config() |
| : disable_tcp_transport(false) { |
| } |
| |
| P2PPortAllocator::Config::~Config() { |
| } |
| |
| P2PPortAllocator::Config::RelayServerConfig::RelayServerConfig() |
| : port(0) { |
| } |
| |
| P2PPortAllocator::Config::RelayServerConfig::~RelayServerConfig() { |
| } |
| |
| P2PPortAllocator::P2PPortAllocator( |
| P2PSocketDispatcher* socket_dispatcher, |
| rtc::NetworkManager* network_manager, |
| rtc::PacketSocketFactory* socket_factory, |
| const Config& config) |
| : cricket::BasicPortAllocator(network_manager, socket_factory), |
| socket_dispatcher_(socket_dispatcher), |
| config_(config) { |
| uint32 flags = 0; |
| if (config_.disable_tcp_transport) |
| flags |= cricket::PORTALLOCATOR_DISABLE_TCP; |
| set_flags(flags); |
| set_allow_tcp_listen(false); |
| } |
| |
| P2PPortAllocator::~P2PPortAllocator() { |
| } |
| |
| cricket::PortAllocatorSession* P2PPortAllocator::CreateSessionInternal( |
| const std::string& content_name, |
| int component, |
| const std::string& ice_username_fragment, |
| const std::string& ice_password) { |
| return new P2PPortAllocatorSession( |
| this, content_name, component, ice_username_fragment, ice_password); |
| } |
| |
| P2PPortAllocatorSession::P2PPortAllocatorSession( |
| P2PPortAllocator* allocator, |
| const std::string& content_name, |
| int component, |
| const std::string& ice_username_fragment, |
| const std::string& ice_password) |
| : cricket::BasicPortAllocatorSession(allocator, |
| content_name, |
| component, |
| ice_username_fragment, |
| ice_password), |
| allocator_(allocator) { |
| } |
| |
| P2PPortAllocatorSession::~P2PPortAllocatorSession() { |
| } |
| |
| void P2PPortAllocatorSession::GetPortConfigurations() { |
| const P2PPortAllocator::Config& config = allocator_->config_; |
| cricket::PortConfiguration* port_config = new cricket::PortConfiguration( |
| config.stun_servers, std::string(), std::string()); |
| |
| for (size_t i = 0; i < config.relays.size(); ++i) { |
| cricket::RelayCredentials credentials(config.relays[i].username, |
| config.relays[i].password); |
| cricket::RelayServerConfig relay_server(cricket::RELAY_TURN); |
| cricket::ProtocolType protocol; |
| if (!cricket::StringToProto(config.relays[i].transport_type.c_str(), |
| &protocol)) { |
| DLOG(WARNING) << "Ignoring TURN server " |
| << config.relays[i].server_address << ". " |
| << "Reason= Incorrect " |
| << config.relays[i].transport_type |
| << " transport parameter."; |
| continue; |
| } |
| |
| relay_server.ports.push_back(cricket::ProtocolAddress( |
| rtc::SocketAddress(config.relays[i].server_address, |
| config.relays[i].port), |
| protocol, |
| config.relays[i].secure)); |
| relay_server.credentials = credentials; |
| port_config->AddRelay(relay_server); |
| } |
| ConfigReady(port_config); |
| } |
| |
| } // namespace content |