- add sources.
[platform/framework/web/crosswalk.git] / src / remoting / host / host_event_logger_posix.cc
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
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
63 HostEventLoggerPosix::~HostEventLoggerPosix() {
64   if (monitor_.get())
65     monitor_->RemoveStatusObserver(this);
66   closelog();
67 }
68
69 void HostEventLoggerPosix::OnClientAuthenticated(const std::string& jid) {
70   Log("Client connected: " + jid);
71 }
72
73 void HostEventLoggerPosix::OnClientDisconnected(const std::string& jid) {
74   Log("Client disconnected: " + jid);
75 }
76
77 void HostEventLoggerPosix::OnAccessDenied(const std::string& jid) {
78   Log("Access denied for client: " + jid);
79 }
80
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
93 void HostEventLoggerPosix::OnShutdown() {
94   // TODO(rmsousa): Fix host shutdown to actually call this, and add a log line.
95 }
96
97 void HostEventLoggerPosix::OnStart(const std::string& xmpp_login) {
98   Log("Host started for user: " + xmpp_login);
99 }
100
101 void HostEventLoggerPosix::Log(const std::string& message) {
102   syslog(LOG_USER | LOG_NOTICE, "%s", message.c_str());
103 }
104
105 // static
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