Home | History | Annotate | Download | only in protocol
      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 
     14 namespace cricket {
     15 class HttpPortAllocatorBase;
     16 class PortAllocator;
     17 }  // namespace cricket
     18 
     19 namespace net {
     20 class URLRequestContextGetter;
     21 }  // namespace net
     22 
     23 namespace talk_base {
     24 class NetworkManager;
     25 class PacketSocketFactory;
     26 class SocketAddress;
     27 }  // namespace talk_base
     28 
     29 namespace remoting {
     30 
     31 class SignalStrategy;
     32 class JingleInfoRequest;
     33 
     34 namespace protocol {
     35 
     36 class 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