diff options
author | lambroslambrou@chromium.org <lambroslambrou@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-07-10 00:36:05 +0000 |
---|---|---|
committer | lambroslambrou@chromium.org <lambroslambrou@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-07-10 00:36:05 +0000 |
commit | 71f76c514df70b9a6ab4d59e9639cce403a7494f (patch) | |
tree | f394677d01e6ba95dd83041d392b84fffaec69ce /remoting/host/host_status_logger.cc | |
parent | 8e1dd185a013bb71d09d5cb5e930a5fbb45a877a (diff) | |
download | chromium_src-71f76c514df70b9a6ab4d59e9639cce403a7494f.zip chromium_src-71f76c514df70b9a6ab4d59e9639cce403a7494f.tar.gz chromium_src-71f76c514df70b9a6ab4d59e9639cce403a7494f.tar.bz2 |
Pull out common code from client and host versions of LogToServer
Also added unittests for client code.
TEST=unittests
Review URL: https://codereview.chromium.org/320403002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@282193 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'remoting/host/host_status_logger.cc')
-rw-r--r-- | remoting/host/host_status_logger.cc | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/remoting/host/host_status_logger.cc b/remoting/host/host_status_logger.cc new file mode 100644 index 0000000..1910bd3 --- /dev/null +++ b/remoting/host/host_status_logger.cc @@ -0,0 +1,73 @@ +// Copyright 2014 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. + +#include "remoting/host/host_status_logger.h" + +#include "base/bind.h" +#include "base/message_loop/message_loop_proxy.h" +#include "remoting/base/constants.h" +#include "remoting/host/host_status_monitor.h" +#include "remoting/host/server_log_entry_host.h" +#include "remoting/jingle_glue/server_log_entry.h" +#include "remoting/protocol/transport.h" + +namespace remoting { + +HostStatusLogger::HostStatusLogger(base::WeakPtr<HostStatusMonitor> monitor, + ServerLogEntry::Mode mode, + SignalStrategy* signal_strategy, + const std::string& directory_bot_jid) + : log_to_server_(mode, signal_strategy, directory_bot_jid), + monitor_(monitor) { + monitor_->AddStatusObserver(this); +} + +HostStatusLogger::~HostStatusLogger() { + if (monitor_.get()) + monitor_->RemoveStatusObserver(this); +} + +void HostStatusLogger::LogSessionStateChange(const std::string& jid, + bool connected) { + DCHECK(CalledOnValidThread()); + + scoped_ptr<ServerLogEntry> entry( + MakeLogEntryForSessionStateChange(connected)); + AddHostFieldsToLogEntry(entry.get()); + entry->AddModeField(log_to_server_.mode()); + + if (connected) { + DCHECK_EQ(connection_route_type_.count(jid), 1u); + AddConnectionTypeToLogEntry(entry.get(), connection_route_type_[jid]); + } + log_to_server_.Log(*entry.get()); +} + +void HostStatusLogger::OnClientConnected(const std::string& jid) { + DCHECK(CalledOnValidThread()); + LogSessionStateChange(jid, true); +} + +void HostStatusLogger::OnClientDisconnected(const std::string& jid) { + DCHECK(CalledOnValidThread()); + LogSessionStateChange(jid, false); + connection_route_type_.erase(jid); +} + +void HostStatusLogger::OnClientRouteChange( + const std::string& jid, + const std::string& channel_name, + const protocol::TransportRoute& route) { + // Store connection type for the video channel. It is logged later + // when client authentication is finished. + if (channel_name == kVideoChannelName) { + connection_route_type_[jid] = route.type; + } +} + +void HostStatusLogger::SetSignalingStateForTest(SignalStrategy::State state) { + log_to_server_.OnSignalStrategyStateChange(state); +} + +} // namespace remoting |