| 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/message_loop/message_loop_proxy.h" | 10 #include "base/message_loop/message_loop_proxy.h" |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 43 const char kExpectedSequenceIdTag[] = "expected-sequence-id"; | 43 const char kExpectedSequenceIdTag[] = "expected-sequence-id"; |
| 44 | 44 |
| 45 const int64 kDefaultHeartbeatIntervalMs = 5 * 60 * 1000; // 5 minutes. | 45 const int64 kDefaultHeartbeatIntervalMs = 5 * 60 * 1000; // 5 minutes. |
| 46 const int64 kResendDelayMs = 10 * 1000; // 10 seconds. | 46 const int64 kResendDelayMs = 10 * 1000; // 10 seconds. |
| 47 const int64 kResendDelayOnHostNotFoundMs = 10 * 1000; // 10 seconds. | 47 const int64 kResendDelayOnHostNotFoundMs = 10 * 1000; // 10 seconds. |
| 48 const int kMaxResendOnHostNotFoundCount = 12; // 2 minutes (12 x 10 seconds). | 48 const int kMaxResendOnHostNotFoundCount = 12; // 2 minutes (12 x 10 seconds). |
| 49 | 49 |
| 50 } // namespace | 50 } // namespace |
| 51 | 51 |
| 52 HeartbeatSender::HeartbeatSender( | 52 HeartbeatSender::HeartbeatSender( |
| 53 Listener* listener, | 53 const base::Closure& on_heartbeat_successful_callback, |
| 54 const base::Closure& on_unknown_host_id_error, |
| 54 const std::string& host_id, | 55 const std::string& host_id, |
| 55 SignalStrategy* signal_strategy, | 56 SignalStrategy* signal_strategy, |
| 56 scoped_refptr<RsaKeyPair> key_pair, | 57 scoped_refptr<RsaKeyPair> key_pair, |
| 57 const std::string& directory_bot_jid) | 58 const std::string& directory_bot_jid) |
| 58 : listener_(listener), | 59 : on_heartbeat_successful_callback_(on_heartbeat_successful_callback), |
| 60 on_unknown_host_id_error_(on_unknown_host_id_error), |
| 59 host_id_(host_id), | 61 host_id_(host_id), |
| 60 signal_strategy_(signal_strategy), | 62 signal_strategy_(signal_strategy), |
| 61 key_pair_(key_pair), | 63 key_pair_(key_pair), |
| 62 directory_bot_jid_(directory_bot_jid), | 64 directory_bot_jid_(directory_bot_jid), |
| 63 interval_ms_(kDefaultHeartbeatIntervalMs), | 65 interval_ms_(kDefaultHeartbeatIntervalMs), |
| 64 sequence_id_(0), | 66 sequence_id_(0), |
| 65 sequence_id_was_set_(false), | 67 sequence_id_was_set_(false), |
| 66 sequence_id_recent_set_num_(0), | 68 sequence_id_recent_set_num_(0), |
| 67 heartbeat_succeeded_(false), | 69 heartbeat_succeeded_(false), |
| 68 failed_startup_heartbeat_count_(0) { | 70 failed_startup_heartbeat_count_(0) { |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 160 failed_startup_heartbeat_count_++; | 162 failed_startup_heartbeat_count_++; |
| 161 if (!heartbeat_succeeded_ && (failed_startup_heartbeat_count_ <= | 163 if (!heartbeat_succeeded_ && (failed_startup_heartbeat_count_ <= |
| 162 kMaxResendOnHostNotFoundCount)) { | 164 kMaxResendOnHostNotFoundCount)) { |
| 163 timer_resend_.Start(FROM_HERE, | 165 timer_resend_.Start(FROM_HERE, |
| 164 base::TimeDelta::FromMilliseconds( | 166 base::TimeDelta::FromMilliseconds( |
| 165 kResendDelayOnHostNotFoundMs), | 167 kResendDelayOnHostNotFoundMs), |
| 166 this, | 168 this, |
| 167 &HeartbeatSender::ResendStanza); | 169 &HeartbeatSender::ResendStanza); |
| 168 return; | 170 return; |
| 169 } | 171 } |
| 170 listener_->OnUnknownHostIdError(); | 172 on_unknown_host_id_error_.Run(); |
| 171 return; | 173 return; |
| 172 } | 174 } |
| 173 } | 175 } |
| 174 | 176 |
| 175 LOG(ERROR) << "Received error in response to heartbeat: " | 177 LOG(ERROR) << "Received error in response to heartbeat: " |
| 176 << response->Str(); | 178 << response->Str(); |
| 177 return; | 179 return; |
| 178 } | 180 } |
| 179 | 181 |
| 180 // This method must only be called for error or result stanzas. | 182 // This method must only be called for error or result stanzas. |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 215 sequence_id_recent_set_num_++; | 217 sequence_id_recent_set_num_++; |
| 216 did_set_sequence_id = true; | 218 did_set_sequence_id = true; |
| 217 } | 219 } |
| 218 } | 220 } |
| 219 if (!did_set_sequence_id) { | 221 if (!did_set_sequence_id) { |
| 220 // It seems the bot accepted our signature and our message. | 222 // It seems the bot accepted our signature and our message. |
| 221 sequence_id_recent_set_num_ = 0; | 223 sequence_id_recent_set_num_ = 0; |
| 222 | 224 |
| 223 // Notify listener of the first successful heartbeat. | 225 // Notify listener of the first successful heartbeat. |
| 224 if (!heartbeat_succeeded_) { | 226 if (!heartbeat_succeeded_) { |
| 225 listener_->OnHeartbeatSuccessful(); | 227 on_heartbeat_successful_callback_.Run(); |
| 226 } | 228 } |
| 227 heartbeat_succeeded_ = true; | 229 heartbeat_succeeded_ = true; |
| 228 | 230 |
| 229 // Notify caller of SetHostOfflineReason that we got an ack. | 231 // Notify caller of SetHostOfflineReason that we got an ack. |
| 230 if (is_offline_heartbeat_response) { | 232 if (is_offline_heartbeat_response) { |
| 231 if (!host_offline_reason_ack_callback_.is_null()) { | 233 if (!host_offline_reason_ack_callback_.is_null()) { |
| 232 base::MessageLoop::current()->PostTask( | 234 base::MessageLoop::current()->PostTask( |
| 233 FROM_HERE, | 235 FROM_HERE, |
| 234 host_offline_reason_ack_callback_); | 236 host_offline_reason_ack_callback_); |
| 235 host_offline_reason_ack_callback_.Reset(); | 237 host_offline_reason_ack_callback_.Reset(); |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 308 | 310 |
| 309 std::string message = signal_strategy_->GetLocalJid() + ' ' + | 311 std::string message = signal_strategy_->GetLocalJid() + ' ' + |
| 310 base::IntToString(sequence_id_); | 312 base::IntToString(sequence_id_); |
| 311 std::string signature(key_pair_->SignMessage(message)); | 313 std::string signature(key_pair_->SignMessage(message)); |
| 312 signature_tag->AddText(signature); | 314 signature_tag->AddText(signature); |
| 313 | 315 |
| 314 return signature_tag.Pass(); | 316 return signature_tag.Pass(); |
| 315 } | 317 } |
| 316 | 318 |
| 317 } // namespace remoting | 319 } // namespace remoting |
| OLD | NEW |