| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef REMOTING_PROTOCOL_TRANSPORT_CONTEXT_H_ | 5 #ifndef REMOTING_PROTOCOL_TRANSPORT_CONTEXT_H_ |
| 6 #define REMOTING_PROTOCOL_TRANSPORT_CONTEXT_H_ | 6 #define REMOTING_PROTOCOL_TRANSPORT_CONTEXT_H_ |
| 7 | 7 |
| 8 #include <list> | 8 #include <list> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <vector> | 10 #include <vector> |
| 11 | 11 |
| 12 #include "base/macros.h" | 12 #include "base/macros.h" |
| 13 #include "base/memory/ref_counted.h" | 13 #include "base/memory/ref_counted.h" |
| 14 #include "base/memory/scoped_ptr.h" | 14 #include "base/memory/scoped_ptr.h" |
| 15 #include "remoting/protocol/network_settings.h" | 15 #include "remoting/protocol/network_settings.h" |
| 16 #include "remoting/protocol/transport.h" | 16 #include "remoting/protocol/transport.h" |
| 17 #include "remoting/signaling/jingle_info_request.h" | 17 #include "remoting/signaling/jingle_info_request.h" |
| 18 | 18 |
| 19 namespace cricket { | |
| 20 class PortAllocator; | |
| 21 } // namespace cricket | |
| 22 | 19 |
| 23 namespace remoting { | 20 namespace remoting { |
| 24 | 21 |
| 25 class SignalStrategy; | 22 class SignalStrategy; |
| 23 class UrlRequestFactory; |
| 26 | 24 |
| 27 namespace protocol { | 25 namespace protocol { |
| 28 | 26 |
| 29 class PortAllocatorFactory; | 27 class PortAllocatorFactory; |
| 30 | 28 |
| 31 // TransportContext is responsible for storing all parameters required for | 29 // TransportContext is responsible for storing all parameters required for |
| 32 // P2P transport initialization. It's also responsible for making JingleInfo | 30 // P2P transport initialization. It's also responsible for making JingleInfo |
| 33 // request. | 31 // request. |
| 34 class TransportContext : public base::RefCountedThreadSafe<TransportContext> { | 32 class TransportContext : public base::RefCountedThreadSafe<TransportContext> { |
| 35 public: | 33 public: |
| 36 typedef base::Callback<void(std::vector<rtc::SocketAddress> stun_hosts, | 34 typedef base::Callback<void(std::vector<rtc::SocketAddress> stun_hosts, |
| 37 std::vector<std::string> relay_hosts, | 35 std::vector<std::string> relay_hosts, |
| 38 std::string relay_token)> GetJingleInfoCallback; | 36 std::string relay_token)> GetJingleInfoCallback; |
| 39 | 37 |
| 40 static scoped_refptr<TransportContext> ForTests(TransportRole role); | 38 static scoped_refptr<TransportContext> ForTests(TransportRole role); |
| 41 | 39 |
| 42 TransportContext(SignalStrategy* signal_strategy, | 40 TransportContext(SignalStrategy* signal_strategy, |
| 43 scoped_ptr<PortAllocatorFactory> port_allocator_factory, | 41 scoped_ptr<PortAllocatorFactory> port_allocator_factory, |
| 42 scoped_ptr<UrlRequestFactory> url_request_factory, |
| 44 const NetworkSettings& network_settings, | 43 const NetworkSettings& network_settings, |
| 45 TransportRole role); | 44 TransportRole role); |
| 46 | 45 |
| 47 // Prepares fresh JingleInfo. It may be called while connection is being | 46 // Prepares fresh JingleInfo. It may be called while connection is being |
| 48 // negotiated to minimize the chance that the following GetJingleInfo() will | 47 // negotiated to minimize the chance that the following GetJingleInfo() will |
| 49 // be blocking. | 48 // be blocking. |
| 50 void Prepare(); | 49 void Prepare(); |
| 51 | 50 |
| 52 // Requests fresh STUN and TURN information. | 51 // Requests fresh STUN and TURN information. |
| 53 void GetJingleInfo(const GetJingleInfoCallback& callback); | 52 void GetJingleInfo(const GetJingleInfoCallback& callback); |
| 54 | 53 |
| 55 PortAllocatorFactory* port_allocator_factory() { | 54 PortAllocatorFactory* port_allocator_factory() { |
| 56 return port_allocator_factory_.get(); | 55 return port_allocator_factory_.get(); |
| 57 } | 56 } |
| 57 UrlRequestFactory* url_request_factory() { |
| 58 return url_request_factory_.get(); |
| 59 } |
| 58 const NetworkSettings& network_settings() const { return network_settings_; } | 60 const NetworkSettings& network_settings() const { return network_settings_; } |
| 59 TransportRole role() const { return role_; } | 61 TransportRole role() const { return role_; } |
| 60 | 62 |
| 61 private: | 63 private: |
| 62 friend class base::RefCountedThreadSafe<TransportContext>; | 64 friend class base::RefCountedThreadSafe<TransportContext>; |
| 63 | 65 |
| 64 ~TransportContext(); | 66 ~TransportContext(); |
| 65 | 67 |
| 66 void EnsureFreshJingleInfo(); | 68 void EnsureFreshJingleInfo(); |
| 67 void OnJingleInfo(const std::string& relay_token, | 69 void OnJingleInfo(const std::string& relay_token, |
| 68 const std::vector<std::string>& relay_hosts, | 70 const std::vector<std::string>& relay_hosts, |
| 69 const std::vector<rtc::SocketAddress>& stun_hosts); | 71 const std::vector<rtc::SocketAddress>& stun_hosts); |
| 70 | 72 |
| 71 SignalStrategy* signal_strategy_; | 73 SignalStrategy* signal_strategy_; |
| 72 scoped_ptr<PortAllocatorFactory> port_allocator_factory_; | 74 scoped_ptr<PortAllocatorFactory> port_allocator_factory_; |
| 75 scoped_ptr<UrlRequestFactory> url_request_factory_; |
| 73 NetworkSettings network_settings_; | 76 NetworkSettings network_settings_; |
| 74 TransportRole role_; | 77 TransportRole role_; |
| 75 | 78 |
| 76 base::TimeTicks last_jingle_info_update_time_; | 79 base::TimeTicks last_jingle_info_update_time_; |
| 77 scoped_ptr<JingleInfoRequest> jingle_info_request_; | 80 scoped_ptr<JingleInfoRequest> jingle_info_request_; |
| 78 | 81 |
| 79 std::vector<rtc::SocketAddress> stun_hosts_; | 82 std::vector<rtc::SocketAddress> stun_hosts_; |
| 80 std::vector<std::string> relay_hosts_; | 83 std::vector<std::string> relay_hosts_; |
| 81 std::string relay_token_; | 84 std::string relay_token_; |
| 82 | 85 |
| 83 // When there is an active |jingle_info_request_| stores list of callbacks to | 86 // When there is an active |jingle_info_request_| stores list of callbacks to |
| 84 // be called once the request is finished. | 87 // be called once the request is finished. |
| 85 std::list<GetJingleInfoCallback> pending_jingle_info_callbacks_; | 88 std::list<GetJingleInfoCallback> pending_jingle_info_callbacks_; |
| 86 | 89 |
| 87 DISALLOW_COPY_AND_ASSIGN(TransportContext); | 90 DISALLOW_COPY_AND_ASSIGN(TransportContext); |
| 88 }; | 91 }; |
| 89 | 92 |
| 90 } // namespace protocol | 93 } // namespace protocol |
| 91 } // namespace remoting | 94 } // namespace remoting |
| 92 | 95 |
| 93 #endif // REMOTING_PROTOCOL_TRANSPORT_CONTEXT_H_ | 96 #endif // REMOTING_PROTOCOL_TRANSPORT_CONTEXT_H_ |
| OLD | NEW |