• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
13 namespace 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.
24 class 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<talk_base::NetworkManager> network_manager,
41       scoped_ptr<talk_base::PacketSocketFactory> socket_factory);
42 
43   pp::InstanceHandle instance_;
44   scoped_ptr<talk_base::NetworkManager> network_manager_;
45   scoped_ptr<talk_base::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