summaryrefslogtreecommitdiffstats
path: root/remoting/protocol/libjingle_transport_factory.h
diff options
context:
space:
mode:
authorsergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-12-16 18:08:39 +0000
committersergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-12-16 18:08:39 +0000
commit641ad8b60a66d7f1da23acc417a777b24768af02 (patch)
tree740e39155aa4534b1e599b99a6a0ffe6eae0279a /remoting/protocol/libjingle_transport_factory.h
parent8c83a71cfc4664a2e5643e9ee4bb1bd3ed53eb0e (diff)
downloadchromium_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.h35
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);
};