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