Index: remoting/host/host_status_logger.cc |
diff --git a/remoting/host/host_status_logger.cc b/remoting/host/host_status_logger.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..2219f9f865b6826c4c3d24be6e3fa1ed7a58e02b |
--- /dev/null |
+++ b/remoting/host/host_status_logger.cc |
@@ -0,0 +1,73 @@ |
+// 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. |
+ |
+#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 |