// 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_event_logger.h" #include "base/macros.h" #include "base/memory/scoped_ptr.h" #include "base/memory/weak_ptr.h" #include "base/strings/stringprintf.h" #include "net/base/ip_endpoint.h" #include "remoting/host/host_status_monitor.h" #include "remoting/host/host_status_observer.h" #include "remoting/protocol/transport.h" // Included here, since the #define for LOG_USER in syslog.h conflicts with the // constants in base/logging.h, and this source file should use the version in // syslog.h. #include namespace remoting { namespace { class HostEventLoggerPosix : public HostEventLogger, public HostStatusObserver { public: HostEventLoggerPosix(base::WeakPtr monitor, const std::string& application_name); ~HostEventLoggerPosix() override; // HostStatusObserver implementation. These methods will be called from the // network thread. void OnClientAuthenticated(const std::string& jid) override; void OnClientDisconnected(const std::string& jid) override; void OnAccessDenied(const std::string& jid) override; void OnClientRouteChange(const std::string& jid, const std::string& channel_name, const protocol::TransportRoute& route) override; void OnStart(const std::string& xmpp_login) override; void OnShutdown() override; private: void Log(const std::string& message); base::WeakPtr monitor_; std::string application_name_; DISALLOW_COPY_AND_ASSIGN(HostEventLoggerPosix); }; } //namespace HostEventLoggerPosix::HostEventLoggerPosix( base::WeakPtr monitor, const std::string& application_name) : monitor_(monitor), application_name_(application_name) { openlog(application_name_.c_str(), 0, LOG_USER); monitor_->AddStatusObserver(this); } HostEventLoggerPosix::~HostEventLoggerPosix() { if (monitor_.get()) monitor_->RemoveStatusObserver(this); closelog(); } void HostEventLoggerPosix::OnClientAuthenticated(const std::string& jid) { Log("Client connected: " + jid); } void HostEventLoggerPosix::OnClientDisconnected(const std::string& jid) { Log("Client disconnected: " + jid); } void HostEventLoggerPosix::OnAccessDenied(const std::string& jid) { Log("Access denied for client: " + jid); } void HostEventLoggerPosix::OnClientRouteChange( const std::string& jid, const std::string& channel_name, const protocol::TransportRoute& route) { Log(base::StringPrintf( "Channel IP for client: %s ip='%s' host_ip='%s' channel='%s' " "connection='%s'", jid.c_str(), route.remote_address.ToString().c_str(), route.local_address.ToString().c_str(), channel_name.c_str(), protocol::TransportRoute::GetTypeString(route.type).c_str())); } void HostEventLoggerPosix::OnShutdown() { // TODO(rmsousa): Fix host shutdown to actually call this, and add a log line. } void HostEventLoggerPosix::OnStart(const std::string& xmpp_login) { Log("Host started for user: " + xmpp_login); } void HostEventLoggerPosix::Log(const std::string& message) { syslog(LOG_USER | LOG_NOTICE, "%s", message.c_str()); } // static scoped_ptr HostEventLogger::Create( base::WeakPtr monitor, const std::string& application_name) { return make_scoped_ptr(new HostEventLoggerPosix(monitor, application_name)); } } // namespace remoting