diff options
author | sergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-01-04 01:10:11 +0000 |
---|---|---|
committer | sergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-01-04 01:10:11 +0000 |
commit | 988dfc3c6ce0ee36d607a957c2447fa45488c745 (patch) | |
tree | 03ae5fcdfeda3fd64376545372beea4b8e644aab /remoting/host/heartbeat_sender.cc | |
parent | 7362b51c76a0b6c0f7ed21382333ef4aed1b4a88 (diff) | |
download | chromium_src-988dfc3c6ce0ee36d607a957c2447fa45488c745.zip chromium_src-988dfc3c6ce0ee36d607a957c2447fa45488c745.tar.gz chromium_src-988dfc3c6ce0ee36d607a957c2447fa45488c745.tar.bz2 |
Move signaling connection creation out of ChromotingHost.
Also removed signaling-related events from ChromotingHostObserver interface
and changes host observers to listen for notifications from SignalStrategy
directly.
BUG=107276
Review URL: http://codereview.chromium.org/9004050
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@116256 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'remoting/host/heartbeat_sender.cc')
-rw-r--r-- | remoting/host/heartbeat_sender.cc | 75 |
1 files changed, 33 insertions, 42 deletions
diff --git a/remoting/host/heartbeat_sender.cc b/remoting/host/heartbeat_sender.cc index 2a7d8ac0..27ac108 100644 --- a/remoting/host/heartbeat_sender.cc +++ b/remoting/host/heartbeat_sender.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -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); |