1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef REMOTING_HOST_HOST_STATUS_LOGGER_H_ 6 #define REMOTING_HOST_HOST_STATUS_LOGGER_H_ 7 8 #include <map> 9 10 #include "base/memory/weak_ptr.h" 11 #include "base/threading/non_thread_safe.h" 12 #include "remoting/host/host_status_observer.h" 13 #include "remoting/protocol/transport.h" 14 #include "remoting/signaling/log_to_server.h" 15 16 namespace remoting { 17 18 class HostStatusMonitor; 19 20 // HostStatusLogger sends host log entries to a server. 21 // The contents of the log entries are described in server_log_entry_host.cc. 22 // They do not contain any personally identifiable information. 23 class HostStatusLogger : public HostStatusObserver, 24 public base::NonThreadSafe { 25 public: 26 HostStatusLogger(base::WeakPtr<HostStatusMonitor> monitor, 27 ServerLogEntry::Mode mode, 28 SignalStrategy* signal_strategy, 29 const std::string& directory_bot_jid); 30 virtual ~HostStatusLogger(); 31 32 // Logs a session state change. Currently, this is either 33 // connection or disconnection. 34 void LogSessionStateChange(const std::string& jid, bool connected); 35 36 // HostStatusObserver interface. 37 virtual void OnClientConnected(const std::string& jid) OVERRIDE; 38 virtual void OnClientDisconnected(const std::string& jid) OVERRIDE; 39 virtual void OnClientRouteChange( 40 const std::string& jid, 41 const std::string& channel_name, 42 const protocol::TransportRoute& route) OVERRIDE; 43 44 // Allows test code to fake SignalStrategy state change events. 45 void SetSignalingStateForTest(SignalStrategy::State state); 46 47 private: 48 LogToServer log_to_server_; 49 50 base::WeakPtr<HostStatusMonitor> monitor_; 51 52 // A map from client JID to the route type of that client's connection to 53 // this host. 54 std::map<std::string, protocol::TransportRoute::RouteType> 55 connection_route_type_; 56 57 DISALLOW_COPY_AND_ASSIGN(HostStatusLogger); 58 }; 59 60 } // namespace remoting 61 62 #endif // REMOTING_HOST_HOST_STATUS_LOGGER_H_ 63