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/protocol/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 rtc { 24class NetworkManager; 25class PacketSocketFactory; 26class SocketAddress; 27} // namespace rtc 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<Transport> CreateTransport() OVERRIDE; 51 52 private: 53 void EnsureFreshJingleInfo(); 54 void OnJingleInfo(const std::string& relay_token, 55 const std::vector<std::string>& relay_hosts, 56 const std::vector<rtc::SocketAddress>& stun_hosts); 57 58 SignalStrategy* signal_strategy_; 59 scoped_ptr<cricket::HttpPortAllocatorBase> port_allocator_; 60 NetworkSettings network_settings_; 61 62 base::TimeTicks last_jingle_info_update_time_; 63 scoped_ptr<JingleInfoRequest> jingle_info_request_; 64 65 // When there is an active |jingle_info_request_| stores list of callbacks to 66 // be called once the |jingle_info_request_| is finished. 67 std::list<base::Closure> on_jingle_info_callbacks_; 68 69 DISALLOW_COPY_AND_ASSIGN(LibjingleTransportFactory); 70}; 71 72} // namespace protocol 73} // namespace remoting 74 75#endif // REMOTING_PROTOCOL_LIBJINGLE_TRANSPORT_FACTORY_H_ 76