1// Copyright (c) 2012 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#ifndef REMOTING_CLIENT_PLUGIN_PEPPER_PORT_ALLOCATOR_H_
6#define REMOTING_CLIENT_PLUGIN_PEPPER_PORT_ALLOCATOR_H_
7
8#include "base/compiler_specific.h"
9#include "base/memory/scoped_ptr.h"
10#include "ppapi/cpp/instance_handle.h"
11#include "third_party/libjingle/source/talk/p2p/client/httpportallocator.h"
12
13namespace remoting {
14
15// An implementation of cricket::PortAllocator for libjingle that is
16// used by the client plugin. There are two differences from
17// cricket::HttpPortAllocator:
18//   * PepperPortAllocator uses Pepper URLLoader API when creating
19//     relay sessions.
20//   * PepperPortAllocator resolves STUN DNS names and passes IP
21//     addresses to BasicPortAllocator (it uses HostResolverPrivate API
22//     for that). This is needed because libjingle's DNS resolution
23//     code doesn't work in sandbox.
24class PepperPortAllocator : public cricket::HttpPortAllocatorBase {
25 public:
26  static scoped_ptr<PepperPortAllocator> Create(
27      const pp::InstanceHandle& instance);
28  virtual ~PepperPortAllocator();
29
30  // cricket::HttpPortAllocatorBase overrides.
31  virtual cricket::PortAllocatorSession* CreateSessionInternal(
32      const std::string& content_name,
33      int component,
34      const std::string& ice_username_fragment,
35      const std::string& ice_password) OVERRIDE;
36
37 private:
38  PepperPortAllocator(
39      const pp::InstanceHandle& instance,
40      scoped_ptr<rtc::NetworkManager> network_manager,
41      scoped_ptr<rtc::PacketSocketFactory> socket_factory);
42
43  pp::InstanceHandle instance_;
44  scoped_ptr<rtc::NetworkManager> network_manager_;
45  scoped_ptr<rtc::PacketSocketFactory> socket_factory_;
46
47  DISALLOW_COPY_AND_ASSIGN(PepperPortAllocator);
48};
49
50}  // namespace remoting
51
52#endif  // REMOTING_CLIENT_PLUGIN_PEPPER_PORT_ALLOCATOR_H_
53