OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 #include "remoting/host/host_signaling_manager.h" | 5 #include "remoting/host/host_signaling_manager.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/time/time.h" | 8 #include "base/time/time.h" |
9 #include "net/socket/client_socket_factory.h" | 9 #include "net/socket/client_socket_factory.h" |
10 #include "remoting/base/auto_thread_task_runner.h" | 10 #include "remoting/base/auto_thread_task_runner.h" |
11 #include "remoting/base/logging.h" | 11 #include "remoting/base/logging.h" |
12 #include "remoting/base/url_request_context_getter.h" | 12 #include "remoting/base/url_request_context_getter.h" |
13 #include "remoting/host/chromoting_host_context.h" | 13 #include "remoting/host/chromoting_host_context.h" |
14 #include "remoting/host/dns_blackhole_checker.h" | 14 #include "remoting/host/dns_blackhole_checker.h" |
| 15 #include "remoting/host/gcd_notification_subscriber.h" |
| 16 #include "remoting/host/gcd_state_updater.h" |
15 #include "remoting/host/heartbeat_sender.h" | 17 #include "remoting/host/heartbeat_sender.h" |
16 #include "remoting/host/signaling_connector.h" | 18 #include "remoting/host/signaling_connector.h" |
17 #include "remoting/signaling/xmpp_signal_strategy.h" | 19 #include "remoting/signaling/xmpp_signal_strategy.h" |
18 | 20 |
19 namespace remoting { | 21 namespace remoting { |
20 | 22 |
21 HostSignalingManager::HostSignalingManager( | 23 HostSignalingManager::HostSignalingManager( |
22 scoped_ptr<SignalStrategy> signal_strategy, | 24 scoped_ptr<SignalStrategy> signal_strategy, |
23 scoped_ptr<SignalingConnector> signaling_connector, | 25 scoped_ptr<SignalingConnector> signaling_connector, |
24 scoped_ptr<HeartbeatSender> heartbeat_sender) | 26 scoped_ptr<HeartbeatSender> heartbeat_sender, |
| 27 scoped_ptr<GcdStateUpdater> gcd_state_updater, |
| 28 scoped_ptr<GcdNotificationSubscriber> gcd_subscriber) |
25 : signal_strategy_(signal_strategy.Pass()), | 29 : signal_strategy_(signal_strategy.Pass()), |
26 signaling_connector_(signaling_connector.Pass()), | 30 signaling_connector_(signaling_connector.Pass()), |
27 heartbeat_sender_(heartbeat_sender.Pass()) { | 31 heartbeat_sender_(heartbeat_sender.Pass()), |
| 32 gcd_state_updater_(gcd_state_updater.Pass()), |
| 33 gcd_subscriber_(gcd_subscriber.Pass()) { |
28 } | 34 } |
29 | 35 |
30 scoped_ptr<HostSignalingManager> HostSignalingManager::Create( | 36 scoped_ptr<HostSignalingManager> HostSignalingManager::Create( |
31 Listener* listener, | 37 Listener* listener, |
32 const scoped_refptr<net::URLRequestContextGetter>& | 38 const scoped_refptr<net::URLRequestContextGetter>& |
33 url_request_context_getter, | 39 url_request_context_getter, |
34 const XmppSignalStrategy::XmppServerConfig& xmpp_server_config, | 40 const XmppSignalStrategy::XmppServerConfig& xmpp_server_config, |
35 const std::string& talkgadget_prefix_policy, | 41 const std::string& talkgadget_prefix_policy, |
36 const std::string& host_id, | 42 const std::string& host_id, |
37 const scoped_refptr<const RsaKeyPair>& host_key_pair, | 43 const scoped_refptr<const RsaKeyPair>& host_key_pair, |
38 const std::string& directory_bot_jid, | 44 const std::string& directory_bot_jid, |
39 scoped_ptr<OAuthTokenGetter::OAuthCredentials> oauth_credentials, | 45 OAuthTokenGetter* oauth_token_getter, |
40 bool verify_email) { | 46 GcdRestClient* gcd_rest_client) { |
41 scoped_ptr<XmppSignalStrategy> signal_strategy( | 47 scoped_ptr<XmppSignalStrategy> signal_strategy( |
42 new XmppSignalStrategy(net::ClientSocketFactory::GetDefaultFactory(), | 48 new XmppSignalStrategy(net::ClientSocketFactory::GetDefaultFactory(), |
43 url_request_context_getter, xmpp_server_config)); | 49 url_request_context_getter, xmpp_server_config)); |
44 | 50 |
45 scoped_ptr<DnsBlackholeChecker> dns_blackhole_checker(new DnsBlackholeChecker( | 51 scoped_ptr<DnsBlackholeChecker> dns_blackhole_checker(new DnsBlackholeChecker( |
46 url_request_context_getter, talkgadget_prefix_policy)); | 52 url_request_context_getter, talkgadget_prefix_policy)); |
47 scoped_ptr<OAuthTokenGetter> oauth_token_getter( | |
48 new OAuthTokenGetter(oauth_credentials.Pass(), url_request_context_getter, | |
49 false, verify_email)); | |
50 | 53 |
51 scoped_ptr<SignalingConnector> signaling_connector(new SignalingConnector( | 54 scoped_ptr<SignalingConnector> signaling_connector(new SignalingConnector( |
52 signal_strategy.get(), dns_blackhole_checker.Pass(), | 55 signal_strategy.get(), dns_blackhole_checker.Pass(), oauth_token_getter, |
53 oauth_token_getter.Pass(), | |
54 base::Bind(&Listener::OnAuthFailed, base::Unretained(listener)))); | 56 base::Bind(&Listener::OnAuthFailed, base::Unretained(listener)))); |
55 | 57 |
56 scoped_ptr<HeartbeatSender> heartbeat_sender(new HeartbeatSender( | 58 scoped_ptr<GcdStateUpdater> gcd_state_updater; |
57 base::Bind(&Listener::OnHeartbeatSuccessful, base::Unretained(listener)), | 59 scoped_ptr<GcdNotificationSubscriber> gcd_subscriber; |
58 base::Bind(&Listener::OnUnknownHostIdError, base::Unretained(listener)), | 60 scoped_ptr<HeartbeatSender> heartbeat_sender; |
59 host_id, signal_strategy.get(), host_key_pair, directory_bot_jid)); | 61 |
| 62 if (gcd_rest_client) { |
| 63 gcd_state_updater.reset( |
| 64 new GcdStateUpdater(base::Bind(&Listener::OnHeartbeatSuccessful, |
| 65 base::Unretained(listener)), |
| 66 signal_strategy.get(), gcd_rest_client)); |
| 67 gcd_subscriber.reset(new GcdNotificationSubscriber(signal_strategy.get())); |
| 68 } else { |
| 69 heartbeat_sender.reset(new HeartbeatSender( |
| 70 base::Bind(&Listener::OnHeartbeatSuccessful, |
| 71 base::Unretained(listener)), |
| 72 base::Bind(&Listener::OnUnknownHostIdError, base::Unretained(listener)), |
| 73 host_id, signal_strategy.get(), host_key_pair, directory_bot_jid)); |
| 74 } |
60 | 75 |
61 return scoped_ptr<HostSignalingManager>(new HostSignalingManager( | 76 return scoped_ptr<HostSignalingManager>(new HostSignalingManager( |
62 signal_strategy.Pass(), signaling_connector.Pass(), | 77 signal_strategy.Pass(), signaling_connector.Pass(), |
63 heartbeat_sender.Pass())); | 78 heartbeat_sender.Pass(), gcd_state_updater.Pass(), |
| 79 gcd_subscriber.Pass())); |
64 } | 80 } |
65 | 81 |
66 HostSignalingManager::~HostSignalingManager() { | 82 HostSignalingManager::~HostSignalingManager() { |
67 DCHECK(thread_checker_.CalledOnValidThread()); | 83 DCHECK(thread_checker_.CalledOnValidThread()); |
68 } | 84 } |
69 | 85 |
70 void HostSignalingManager::SendHostOfflineReason( | 86 void HostSignalingManager::SendHostOfflineReason( |
71 const std::string& host_offline_reason, | 87 const std::string& host_offline_reason, |
72 const base::TimeDelta& timeout, | 88 const base::TimeDelta& timeout, |
73 const base::Callback<void(bool success)>& ack_callback) { | 89 const base::Callback<void(bool success)>& ack_callback) { |
74 DCHECK(thread_checker_.CalledOnValidThread()); | 90 DCHECK(thread_checker_.CalledOnValidThread()); |
75 HOST_LOG << "SendHostOfflineReason: sending " << host_offline_reason << "."; | 91 HOST_LOG << "SendHostOfflineReason: sending " << host_offline_reason << "."; |
76 heartbeat_sender_->SetHostOfflineReason(host_offline_reason, timeout, | 92 if (heartbeat_sender_) { |
77 ack_callback); | 93 heartbeat_sender_->SetHostOfflineReason(host_offline_reason, timeout, |
| 94 ack_callback); |
| 95 } |
| 96 if (gcd_state_updater_) { |
| 97 gcd_state_updater_->SetHostOfflineReason(host_offline_reason, timeout, |
| 98 ack_callback); |
| 99 } |
78 } | 100 } |
79 | 101 |
80 } // namespace remoting | 102 } // namespace remoting |
OLD | NEW |