1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "remoting/host/chromium_port_allocator_factory.h"
6
7#include "base/logging.h"
8#include "net/url_request/url_request_context_getter.h"
9#include "remoting/protocol/chromium_port_allocator.h"
10#include "remoting/protocol/network_settings.h"
11
12namespace remoting {
13
14ChromiumPortAllocatorFactory::ChromiumPortAllocatorFactory(
15    const protocol::NetworkSettings& network_settings,
16    scoped_refptr<net::URLRequestContextGetter> url_request_context_getter)
17    : network_settings_(network_settings),
18      url_request_context_getter_(url_request_context_getter) {
19}
20
21ChromiumPortAllocatorFactory::~ChromiumPortAllocatorFactory() {}
22
23rtc::scoped_refptr<webrtc::PortAllocatorFactoryInterface>
24ChromiumPortAllocatorFactory::Create(
25    const protocol::NetworkSettings& network_settings,
26    scoped_refptr<net::URLRequestContextGetter> url_request_context_getter) {
27  rtc::RefCountedObject<ChromiumPortAllocatorFactory>* allocator_factory =
28      new rtc::RefCountedObject<ChromiumPortAllocatorFactory>(
29          network_settings, url_request_context_getter);
30  return allocator_factory;
31}
32
33cricket::PortAllocator* ChromiumPortAllocatorFactory::CreatePortAllocator(
34    const std::vector<StunConfiguration>& stun_servers,
35    const std::vector<TurnConfiguration>& turn_configurations) {
36  scoped_ptr<protocol::ChromiumPortAllocator> port_allocator(
37      protocol::ChromiumPortAllocator::Create(url_request_context_getter_,
38                                    network_settings_));
39
40  std::vector<rtc::SocketAddress> stun_hosts;
41  typedef std::vector<StunConfiguration>::const_iterator StunIt;
42  for (StunIt stun_it = stun_servers.begin(); stun_it != stun_servers.end();
43       ++stun_it) {
44    stun_hosts.push_back(stun_it->server);
45  }
46  port_allocator->SetStunHosts(stun_hosts);
47
48  // TODO(aiguha): Figure out how to translate |turn_configurations| into
49  // turn hosts so we can set |port_allocator|'s relay hosts.
50
51  return port_allocator.release();
52}
53
54}  // namespace remoting
55
56