| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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/heartbeat_sender.h" | 5 #include "remoting/host/heartbeat_sender.h" |
| 6 | 6 |
| 7 #include <math.h> | 7 #include <math.h> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/callback_helpers.h" |
| 10 #include "base/rand_util.h" | 11 #include "base/rand_util.h" |
| 11 #include "base/strings/string_number_conversions.h" | 12 #include "base/strings/string_number_conversions.h" |
| 12 #include "base/strings/stringize_macros.h" | 13 #include "base/strings/stringize_macros.h" |
| 13 #include "base/thread_task_runner_handle.h" | 14 #include "base/thread_task_runner_handle.h" |
| 14 #include "base/time/time.h" | 15 #include "base/time/time.h" |
| 15 #include "remoting/base/constants.h" | 16 #include "remoting/base/constants.h" |
| 16 #include "remoting/base/logging.h" | 17 #include "remoting/base/logging.h" |
| 17 #include "remoting/host/server_log_entry_host.h" | 18 #include "remoting/host/server_log_entry_host.h" |
| 18 #include "remoting/signaling/iq_sender.h" | 19 #include "remoting/signaling/iq_sender.h" |
| 19 #include "remoting/signaling/server_log_entry.h" | 20 #include "remoting/signaling/server_log_entry.h" |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 98 } | 99 } |
| 99 | 100 |
| 100 bool HeartbeatSender::OnSignalStrategyIncomingStanza( | 101 bool HeartbeatSender::OnSignalStrategyIncomingStanza( |
| 101 const buzz::XmlElement* stanza) { | 102 const buzz::XmlElement* stanza) { |
| 102 return false; | 103 return false; |
| 103 } | 104 } |
| 104 | 105 |
| 105 void HeartbeatSender::OnHostOfflineReasonTimeout() { | 106 void HeartbeatSender::OnHostOfflineReasonTimeout() { |
| 106 DCHECK(!host_offline_reason_ack_callback_.is_null()); | 107 DCHECK(!host_offline_reason_ack_callback_.is_null()); |
| 107 | 108 |
| 108 base::Callback<void(bool)> local_callback = host_offline_reason_ack_callback_; | 109 base::ResetAndReturn(&host_offline_reason_ack_callback_).Run(false); |
| 109 host_offline_reason_ack_callback_.Reset(); | |
| 110 local_callback.Run(false); | |
| 111 } | 110 } |
| 112 | 111 |
| 113 void HeartbeatSender::OnHostOfflineReasonAck() { | 112 void HeartbeatSender::OnHostOfflineReasonAck() { |
| 114 if (host_offline_reason_ack_callback_.is_null()) { | 113 if (host_offline_reason_ack_callback_.is_null()) { |
| 115 DCHECK(!host_offline_reason_timeout_timer_.IsRunning()); | 114 DCHECK(!host_offline_reason_timeout_timer_.IsRunning()); |
| 116 return; | 115 return; |
| 117 } | 116 } |
| 118 | 117 |
| 119 DCHECK(host_offline_reason_timeout_timer_.IsRunning()); | 118 DCHECK(host_offline_reason_timeout_timer_.IsRunning()); |
| 120 host_offline_reason_timeout_timer_.Stop(); | 119 host_offline_reason_timeout_timer_.Stop(); |
| 121 | 120 |
| 122 // Run the ACK callback under a clean stack via PostTask() (because the | 121 // Run the ACK callback under a clean stack via PostTask() (because the |
| 123 // callback can end up deleting |this| HeartbeatSender [i.e. when used from | 122 // callback can end up deleting |this| HeartbeatSender [i.e. when used from |
| 124 // HostSignalingManager]). | 123 // HostSignalingManager]). |
| 125 base::Closure fully_bound_ack_callback = | 124 base::ThreadTaskRunnerHandle::Get()->PostTask( |
| 126 base::Bind(host_offline_reason_ack_callback_, true); | 125 FROM_HERE, |
| 127 host_offline_reason_ack_callback_.Reset(); | 126 base::Bind(base::ResetAndReturn(&host_offline_reason_ack_callback_), |
| 128 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, | 127 true)); |
| 129 fully_bound_ack_callback); | |
| 130 } | 128 } |
| 131 | 129 |
| 132 void HeartbeatSender::SetHostOfflineReason( | 130 void HeartbeatSender::SetHostOfflineReason( |
| 133 const std::string& host_offline_reason, | 131 const std::string& host_offline_reason, |
| 134 const base::TimeDelta& timeout, | 132 const base::TimeDelta& timeout, |
| 135 const base::Callback<void(bool success)>& ack_callback) { | 133 const base::Callback<void(bool success)>& ack_callback) { |
| 136 DCHECK(thread_checker_.CalledOnValidThread()); | 134 DCHECK(thread_checker_.CalledOnValidThread()); |
| 137 DCHECK(host_offline_reason_ack_callback_.is_null()); | 135 DCHECK(host_offline_reason_ack_callback_.is_null()); |
| 138 host_offline_reason_ = host_offline_reason; | 136 host_offline_reason_ = host_offline_reason; |
| 139 host_offline_reason_ack_callback_ = ack_callback; | 137 host_offline_reason_ack_callback_ = ack_callback; |
| (...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 335 | 333 |
| 336 std::string message = signal_strategy_->GetLocalJid() + ' ' + | 334 std::string message = signal_strategy_->GetLocalJid() + ' ' + |
| 337 base::IntToString(sequence_id_); | 335 base::IntToString(sequence_id_); |
| 338 std::string signature(host_key_pair_->SignMessage(message)); | 336 std::string signature(host_key_pair_->SignMessage(message)); |
| 339 signature_tag->AddText(signature); | 337 signature_tag->AddText(signature); |
| 340 | 338 |
| 341 return signature_tag.Pass(); | 339 return signature_tag.Pass(); |
| 342 } | 340 } |
| 343 | 341 |
| 344 } // namespace remoting | 342 } // namespace remoting |
| OLD | NEW |