15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// found in the LICENSE file. 45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "remoting/host/chromium_port_allocator_factory.h" 65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/logging.h" 85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "net/url_request/url_request_context_getter.h" 95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "remoting/protocol/chromium_port_allocator.h" 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "remoting/protocol/network_settings.h" 115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace remoting { 135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)ChromiumPortAllocatorFactory::ChromiumPortAllocatorFactory( 155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const protocol::NetworkSettings& network_settings, 165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_refptr<net::URLRequestContextGetter> url_request_context_getter) 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) : network_settings_(network_settings), 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) url_request_context_getter_(url_request_context_getter) { 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)ChromiumPortAllocatorFactory::~ChromiumPortAllocatorFactory() {} 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)rtc::scoped_refptr<webrtc::PortAllocatorFactoryInterface> 245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)ChromiumPortAllocatorFactory::Create( 255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const protocol::NetworkSettings& network_settings, 265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_refptr<net::URLRequestContextGetter> url_request_context_getter) { 275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) rtc::RefCountedObject<ChromiumPortAllocatorFactory>* allocator_factory = 285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) new rtc::RefCountedObject<ChromiumPortAllocatorFactory>( 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) network_settings, url_request_context_getter); 305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return allocator_factory; 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)cricket::PortAllocator* ChromiumPortAllocatorFactory::CreatePortAllocator( 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const std::vector<StunConfiguration>& stun_servers, 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const std::vector<TurnConfiguration>& turn_configurations) { 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_ptr<protocol::ChromiumPortAllocator> port_allocator( 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) protocol::ChromiumPortAllocator::Create(url_request_context_getter_, 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) network_settings_)); 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::vector<rtc::SocketAddress> stun_hosts; 415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) typedef std::vector<StunConfiguration>::const_iterator StunIt; 425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (StunIt stun_it = stun_servers.begin(); stun_it != stun_servers.end(); 435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ++stun_it) { 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) stun_hosts.push_back(stun_it->server); 455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) port_allocator->SetStunHosts(stun_hosts); 475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // TODO(aiguha): Figure out how to translate |turn_configurations| into 495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // turn hosts so we can set |port_allocator|'s relay hosts. 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return port_allocator.release(); 525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} // namespace remoting 555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 56