1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file. 4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "remoting/host/host_status_logger.h" 6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/bind.h" 8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/message_loop/message_loop_proxy.h" 9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "remoting/base/constants.h" 10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "remoting/host/host_status_monitor.h" 11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "remoting/host/server_log_entry_host.h" 12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "remoting/protocol/transport.h" 13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "remoting/signaling/server_log_entry.h" 14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 15116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace remoting { 16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 17116680a4aac90f2aa7413d9095a592090648e557Ben MurdochHostStatusLogger::HostStatusLogger(base::WeakPtr<HostStatusMonitor> monitor, 18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ServerLogEntry::Mode mode, 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SignalStrategy* signal_strategy, 20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::string& directory_bot_jid) 21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch : log_to_server_(mode, signal_strategy, directory_bot_jid), 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch monitor_(monitor) { 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch monitor_->AddStatusObserver(this); 24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 26116680a4aac90f2aa7413d9095a592090648e557Ben MurdochHostStatusLogger::~HostStatusLogger() { 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (monitor_.get()) 28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch monitor_->RemoveStatusObserver(this); 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid HostStatusLogger::LogSessionStateChange(const std::string& jid, 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool connected) { 33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DCHECK(CalledOnValidThread()); 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<ServerLogEntry> entry( 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch MakeLogEntryForSessionStateChange(connected)); 37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch AddHostFieldsToLogEntry(entry.get()); 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch entry->AddModeField(log_to_server_.mode()); 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (connected) { 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DCHECK_EQ(connection_route_type_.count(jid), 1u); 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch AddConnectionTypeToLogEntry(entry.get(), connection_route_type_[jid]); 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch log_to_server_.Log(*entry.get()); 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid HostStatusLogger::OnClientConnected(const std::string& jid) { 48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DCHECK(CalledOnValidThread()); 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch LogSessionStateChange(jid, true); 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 52116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid HostStatusLogger::OnClientDisconnected(const std::string& jid) { 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DCHECK(CalledOnValidThread()); 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch LogSessionStateChange(jid, false); 55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch connection_route_type_.erase(jid); 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 58116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid HostStatusLogger::OnClientRouteChange( 59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::string& jid, 60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::string& channel_name, 61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const protocol::TransportRoute& route) { 62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Store connection type for the video channel. It is logged later 63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // when client authentication is finished. 64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (channel_name == kVideoChannelName) { 65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch connection_route_type_[jid] = route.type; 66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 69116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid HostStatusLogger::SetSignalingStateForTest(SignalStrategy::State state) { 70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch log_to_server_.OnSignalStrategyStateChange(state); 71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} // namespace remoting 74