summaryrefslogtreecommitdiffstats
path: root/remoting/host/host_status_logger.cc
diff options
context:
space:
mode:
authorlambroslambrou@chromium.org <lambroslambrou@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-07-10 00:36:05 +0000
committerlambroslambrou@chromium.org <lambroslambrou@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-07-10 00:36:05 +0000
commit71f76c514df70b9a6ab4d59e9639cce403a7494f (patch)
treef394677d01e6ba95dd83041d392b84fffaec69ce /remoting/host/host_status_logger.cc
parent8e1dd185a013bb71d09d5cb5e930a5fbb45a877a (diff)
downloadchromium_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.cc73
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