diff options
author | sergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-12-16 18:08:39 +0000 |
---|---|---|
committer | sergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-12-16 18:08:39 +0000 |
commit | 641ad8b60a66d7f1da23acc417a777b24768af02 (patch) | |
tree | 740e39155aa4534b1e599b99a6a0ffe6eae0279a /remoting/protocol/libjingle_transport_factory.h | |
parent | 8c83a71cfc4664a2e5643e9ee4bb1bd3ed53eb0e (diff) | |
download | chromium_src-641ad8b60a66d7f1da23acc417a777b24768af02.zip chromium_src-641ad8b60a66d7f1da23acc417a777b24768af02.tar.gz chromium_src-641ad8b60a66d7f1da23acc417a777b24768af02.tar.bz2 |
Fix LibjingleTransportFactory to refresh STUN/Relay.
Previously chromoting host would get relay info only when started. Relay
token expires within several hours, which means relay session creation would
always fail from the host running for longer than several hours, and that
makes connection impossible in some configurations. Moved code that
gets Jingle info to LibjingleTransportFactory and it's responsible for
refreshing relay token every hour.
BUG=318897
R=rmsousa@chromium.org
Review URL: https://codereview.chromium.org/98173006
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@240926 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'remoting/protocol/libjingle_transport_factory.h')
-rw-r--r-- | remoting/protocol/libjingle_transport_factory.h | 35 |
1 files changed, 27 insertions, 8 deletions
diff --git a/remoting/protocol/libjingle_transport_factory.h b/remoting/protocol/libjingle_transport_factory.h index dfa0ab1..637410c 100644 --- a/remoting/protocol/libjingle_transport_factory.h +++ b/remoting/protocol/libjingle_transport_factory.h @@ -5,6 +5,10 @@ #ifndef REMOTING_PROTOCOL_LIBJINGLE_TRANSPORT_FACTORY_H_ #define REMOTING_PROTOCOL_LIBJINGLE_TRANSPORT_FACTORY_H_ +#include <list> + +#include "base/callback_forward.h" +#include "remoting/jingle_glue/network_settings.h" #include "remoting/protocol/transport.h" namespace cricket { @@ -19,34 +23,49 @@ class URLRequestContextGetter; namespace talk_base { class NetworkManager; class PacketSocketFactory; +class SocketAddress; } // namespace talk_base namespace remoting { -struct NetworkSettings; +class SignalStrategy; +class JingleInfoRequest; namespace protocol { class LibjingleTransportFactory : public TransportFactory { public: - // Need to use cricket::HttpPortAllocatorBase pointer for the - // |port_allocator|, so that it is possible to configure - // |port_allocator| with STUN/Relay addresses. - // TODO(sergeyu): Reconsider this design. + // |signal_strategy| must outlive LibjingleTransportFactory. Need to use + // cricket::HttpPortAllocatorBase pointer for the |port_allocator|, so that it + // is possible to configure |port_allocator| with STUN/Relay addresses. LibjingleTransportFactory( + SignalStrategy* signal_strategy, scoped_ptr<cricket::HttpPortAllocatorBase> port_allocator, - bool incoming_only); + const NetworkSettings& network_settings); virtual ~LibjingleTransportFactory(); // TransportFactory interface. - virtual void SetTransportConfig(const TransportConfig& config) OVERRIDE; + virtual void PrepareTokens() OVERRIDE; virtual scoped_ptr<StreamTransport> CreateStreamTransport() OVERRIDE; virtual scoped_ptr<DatagramTransport> CreateDatagramTransport() OVERRIDE; private: + void EnsureFreshJingleInfo(); + void OnJingleInfo(const std::string& relay_token, + const std::vector<std::string>& relay_hosts, + const std::vector<talk_base::SocketAddress>& stun_hosts); + + SignalStrategy* signal_strategy_; scoped_ptr<cricket::HttpPortAllocatorBase> port_allocator_; - bool incoming_only_; + NetworkSettings network_settings_; + + base::TimeTicks last_jingle_info_update_time_; + scoped_ptr<JingleInfoRequest> jingle_info_request_; + + // When there is an active |jingle_info_request_| stores list of callbacks to + // be called once the |jingle_info_request_| is finished. + std::list<base::Closure> on_jingle_info_callbacks_; DISALLOW_COPY_AND_ASSIGN(LibjingleTransportFactory); }; |