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_PROTOCOL_LIBJINGLE_TRANSPORT_FACTORY_H_ 6#define REMOTING_PROTOCOL_LIBJINGLE_TRANSPORT_FACTORY_H_ 7 8#include <list> 9 10#include "base/callback_forward.h" 11#include "remoting/jingle_glue/network_settings.h" 12#include "remoting/protocol/transport.h" 13 14namespace cricket { 15class HttpPortAllocatorBase; 16class PortAllocator; 17} // namespace cricket 18 19namespace net { 20class URLRequestContextGetter; 21} // namespace net 22 23namespace talk_base { 24class NetworkManager; 25class PacketSocketFactory; 26class SocketAddress; 27} // namespace talk_base 28 29namespace remoting { 30 31class SignalStrategy; 32class JingleInfoRequest; 33 34namespace protocol { 35 36class LibjingleTransportFactory : public TransportFactory { 37 public: 38 // |signal_strategy| must outlive LibjingleTransportFactory. Need to use 39 // cricket::HttpPortAllocatorBase pointer for the |port_allocator|, so that it 40 // is possible to configure |port_allocator| with STUN/Relay addresses. 41 LibjingleTransportFactory( 42 SignalStrategy* signal_strategy, 43 scoped_ptr<cricket::HttpPortAllocatorBase> port_allocator, 44 const NetworkSettings& network_settings); 45 46 virtual ~LibjingleTransportFactory(); 47 48 // TransportFactory interface. 49 virtual void PrepareTokens() OVERRIDE; 50 virtual scoped_ptr<StreamTransport> CreateStreamTransport() OVERRIDE; 51 virtual scoped_ptr<DatagramTransport> CreateDatagramTransport() OVERRIDE; 52 53 private: 54 void EnsureFreshJingleInfo(); 55 void OnJingleInfo(const std::string& relay_token, 56 const std::vector<std::string>& relay_hosts, 57 const std::vector<talk_base::SocketAddress>& stun_hosts); 58 59 SignalStrategy* signal_strategy_; 60 scoped_ptr<cricket::HttpPortAllocatorBase> port_allocator_; 61 NetworkSettings network_settings_; 62 63 base::TimeTicks last_jingle_info_update_time_; 64 scoped_ptr<JingleInfoRequest> jingle_info_request_; 65 66 // When there is an active |jingle_info_request_| stores list of callbacks to 67 // be called once the |jingle_info_request_| is finished. 68 std::list<base::Closure> on_jingle_info_callbacks_; 69 70 DISALLOW_COPY_AND_ASSIGN(LibjingleTransportFactory); 71}; 72 73} // namespace protocol 74} // namespace remoting 75 76#endif // REMOTING_PROTOCOL_LIBJINGLE_TRANSPORT_FACTORY_H_ 77