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