• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2012 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 #include "remoting/host/host_event_logger.h"
6 
7 #include "base/memory/scoped_ptr.h"
8 #include "base/memory/weak_ptr.h"
9 #include "base/strings/stringprintf.h"
10 #include "net/base/ip_endpoint.h"
11 #include "remoting/host/host_status_monitor.h"
12 #include "remoting/host/host_status_observer.h"
13 #include "remoting/protocol/transport.h"
14 
15 // Included here, since the #define for LOG_USER in syslog.h conflicts with the
16 // constants in base/logging.h, and this source file should use the version in
17 // syslog.h.
18 #include <syslog.h>
19 
20 namespace remoting {
21 
22 namespace {
23 
24 class HostEventLoggerPosix : public HostEventLogger, public HostStatusObserver {
25  public:
26   HostEventLoggerPosix(base::WeakPtr<HostStatusMonitor> monitor,
27                        const std::string& application_name);
28 
29   virtual ~HostEventLoggerPosix();
30 
31   // HostStatusObserver implementation.  These methods will be called from the
32   // network thread.
33   virtual void OnClientAuthenticated(const std::string& jid) OVERRIDE;
34   virtual void OnClientDisconnected(const std::string& jid) OVERRIDE;
35   virtual void OnAccessDenied(const std::string& jid) OVERRIDE;
36   virtual void OnClientRouteChange(
37       const std::string& jid,
38       const std::string& channel_name,
39       const protocol::TransportRoute& route) OVERRIDE;
40   virtual void OnStart(const std::string& xmpp_login) OVERRIDE;
41   virtual void OnShutdown() OVERRIDE;
42 
43  private:
44   void Log(const std::string& message);
45 
46   base::WeakPtr<HostStatusMonitor> monitor_;
47   std::string application_name_;
48 
49   DISALLOW_COPY_AND_ASSIGN(HostEventLoggerPosix);
50 };
51 
52 } //namespace
53 
HostEventLoggerPosix(base::WeakPtr<HostStatusMonitor> monitor,const std::string & application_name)54 HostEventLoggerPosix::HostEventLoggerPosix(
55     base::WeakPtr<HostStatusMonitor> monitor,
56     const std::string& application_name)
57     : monitor_(monitor),
58       application_name_(application_name) {
59   openlog(application_name_.c_str(), 0, LOG_USER);
60   monitor_->AddStatusObserver(this);
61 }
62 
~HostEventLoggerPosix()63 HostEventLoggerPosix::~HostEventLoggerPosix() {
64   if (monitor_.get())
65     monitor_->RemoveStatusObserver(this);
66   closelog();
67 }
68 
OnClientAuthenticated(const std::string & jid)69 void HostEventLoggerPosix::OnClientAuthenticated(const std::string& jid) {
70   Log("Client connected: " + jid);
71 }
72 
OnClientDisconnected(const std::string & jid)73 void HostEventLoggerPosix::OnClientDisconnected(const std::string& jid) {
74   Log("Client disconnected: " + jid);
75 }
76 
OnAccessDenied(const std::string & jid)77 void HostEventLoggerPosix::OnAccessDenied(const std::string& jid) {
78   Log("Access denied for client: " + jid);
79 }
80 
OnClientRouteChange(const std::string & jid,const std::string & channel_name,const protocol::TransportRoute & route)81 void HostEventLoggerPosix::OnClientRouteChange(
82     const std::string& jid,
83     const std::string& channel_name,
84     const protocol::TransportRoute& route) {
85   Log(base::StringPrintf(
86       "Channel IP for client: %s ip='%s' host_ip='%s' channel='%s' "
87       "connection='%s'",
88       jid.c_str(), route.remote_address.ToString().c_str(),
89       route.local_address.ToString().c_str(), channel_name.c_str(),
90       protocol::TransportRoute::GetTypeString(route.type).c_str()));
91 }
92 
OnShutdown()93 void HostEventLoggerPosix::OnShutdown() {
94   // TODO(rmsousa): Fix host shutdown to actually call this, and add a log line.
95 }
96 
OnStart(const std::string & xmpp_login)97 void HostEventLoggerPosix::OnStart(const std::string& xmpp_login) {
98   Log("Host started for user: " + xmpp_login);
99 }
100 
Log(const std::string & message)101 void HostEventLoggerPosix::Log(const std::string& message) {
102   syslog(LOG_USER | LOG_NOTICE, "%s", message.c_str());
103 }
104 
105 // static
Create(base::WeakPtr<HostStatusMonitor> monitor,const std::string & application_name)106 scoped_ptr<HostEventLogger> HostEventLogger::Create(
107     base::WeakPtr<HostStatusMonitor> monitor,
108     const std::string& application_name) {
109   return scoped_ptr<HostEventLogger>(
110       new HostEventLoggerPosix(monitor, application_name));
111 }
112 
113 }  // namespace remoting
114