| Index: remoting/host/heartbeat_sender.cc
|
| diff --git a/remoting/host/heartbeat_sender.cc b/remoting/host/heartbeat_sender.cc
|
| index 2a7d8ac0ad0159442c605ff93c5ecb108c182a24..4c883684bbd36f698cfaa79d5afaef7e0052ac6d 100644
|
| --- a/remoting/host/heartbeat_sender.cc
|
| +++ b/remoting/host/heartbeat_sender.cc
|
| @@ -34,68 +34,61 @@ const char kSetIntervalTag[] = "set-interval";
|
| const int64 kDefaultHeartbeatIntervalMs = 5 * 60 * 1000; // 5 minutes.
|
| }
|
|
|
| -HeartbeatSender::HeartbeatSender(base::MessageLoopProxy* message_loop,
|
| - MutableHostConfig* config)
|
| -
|
| +HeartbeatSender::HeartbeatSender()
|
| : state_(CREATED),
|
| - message_loop_(message_loop),
|
| - config_(config),
|
| + signal_strategy_(NULL),
|
| interval_ms_(kDefaultHeartbeatIntervalMs) {
|
| - DCHECK(config_);
|
| }
|
|
|
| HeartbeatSender::~HeartbeatSender() {
|
| - DCHECK(state_ == CREATED || state_ == INITIALIZED || state_ == STOPPED);
|
| + if (signal_strategy_)
|
| + signal_strategy_->RemoveListener(this);
|
| }
|
|
|
| -bool HeartbeatSender::Init() {
|
| +bool HeartbeatSender::Init(SignalStrategy* signal_strategy,
|
| + MutableHostConfig* config) {
|
| DCHECK(state_ == CREATED);
|
|
|
| - if (!config_->GetString(kHostIdConfigPath, &host_id_)) {
|
| + if (!config->GetString(kHostIdConfigPath, &host_id_)) {
|
| LOG(ERROR) << "host_id is not defined in the config.";
|
| return false;
|
| }
|
|
|
| - if (!key_pair_.Load(config_)) {
|
| + if (!key_pair_.Load(config)) {
|
| return false;
|
| }
|
|
|
| - state_ = INITIALIZED;
|
| -
|
| - return true;
|
| -}
|
| -
|
| -void HeartbeatSender::OnSignallingConnected(SignalStrategy* signal_strategy) {
|
| - DCHECK(message_loop_->BelongsToCurrentThread());
|
| - DCHECK(state_ == INITIALIZED || state_ == STOPPED);
|
| - state_ = STARTED;
|
| + DCHECK(signal_strategy);
|
| + signal_strategy_ = signal_strategy;
|
| + signal_strategy_->AddListener(this);
|
|
|
| - full_jid_ = signal_strategy->GetLocalJid();
|
| + state_ = INITIALIZED;
|
|
|
| - iq_sender_.reset(new IqSender(signal_strategy));
|
| + // Update the state if the |signal_strategy_| is already connected.
|
| + OnSignalStrategyStateChange(signal_strategy_->GetState());
|
|
|
| - DoSendStanza();
|
| - timer_.Start(FROM_HERE, base::TimeDelta::FromMilliseconds(interval_ms_), this,
|
| - &HeartbeatSender::DoSendStanza);
|
| + return true;
|
| }
|
|
|
| -void HeartbeatSender::OnSignallingDisconnected() {
|
| - DCHECK(message_loop_->BelongsToCurrentThread());
|
| - state_ = STOPPED;
|
| - request_.reset();
|
| - iq_sender_.reset();
|
| - timer_.Stop();
|
| +void HeartbeatSender::OnSignalStrategyStateChange(SignalStrategy::State state) {
|
| + if (state == SignalStrategy::CONNECTED) {
|
| + DCHECK(state_ == INITIALIZED || state_ == STOPPED);
|
| + state_ = STARTED;
|
| +
|
| + iq_sender_.reset(new IqSender(signal_strategy_));
|
| +
|
| + DoSendStanza();
|
| + timer_.Start(FROM_HERE, base::TimeDelta::FromMilliseconds(interval_ms_),
|
| + this, &HeartbeatSender::DoSendStanza);
|
| + } else if (state == SignalStrategy::DISCONNECTED) {
|
| + state_ = STOPPED;
|
| + request_.reset();
|
| + iq_sender_.reset();
|
| + timer_.Stop();
|
| + }
|
| }
|
|
|
| -// Ignore any notifications other than signalling
|
| -// connected/disconnected events.
|
| -void HeartbeatSender::OnAccessDenied() { }
|
| -void HeartbeatSender::OnClientAuthenticated(const std::string& jid) { }
|
| -void HeartbeatSender::OnClientDisconnected(const std::string& jid) { }
|
| -void HeartbeatSender::OnShutdown() { }
|
| -
|
| void HeartbeatSender::DoSendStanza() {
|
| - DCHECK(message_loop_->BelongsToCurrentThread());
|
| DCHECK_EQ(state_, STARTED);
|
|
|
| VLOG(1) << "Sending heartbeat stanza to " << kChromotingBotJid;
|
| @@ -106,8 +99,6 @@ void HeartbeatSender::DoSendStanza() {
|
| }
|
|
|
| void HeartbeatSender::ProcessResponse(const XmlElement* response) {
|
| - DCHECK(message_loop_->BelongsToCurrentThread());
|
| -
|
| std::string type = response->Attr(buzz::QN_TYPE);
|
| if (type == buzz::STR_ERROR) {
|
| LOG(ERROR) << "Received error in response to heartbeat: "
|
| @@ -167,7 +158,7 @@ XmlElement* HeartbeatSender::CreateSignature() {
|
| signature_tag->AddAttr(
|
| QName(kChromotingXmlNamespace, kSignatureTimeAttr), time_str);
|
|
|
| - std::string message = full_jid_ + ' ' + time_str;
|
| + std::string message = signal_strategy_->GetLocalJid() + ' ' + time_str;
|
| std::string signature(key_pair_.GetSignature(message));
|
| signature_tag->AddText(signature);
|
|
|
|
|