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.
5 #include "remoting/host/host_event_logger.h"
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"
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
24 class HostEventLoggerPosix
: public HostEventLogger
, public HostStatusObserver
{
26 HostEventLoggerPosix(base::WeakPtr
<HostStatusMonitor
> monitor
,
27 const std::string
& application_name
);
29 virtual ~HostEventLoggerPosix();
31 // HostStatusObserver implementation. These methods will be called from the
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
;
44 void Log(const std::string
& message
);
46 base::WeakPtr
<HostStatusMonitor
> monitor_
;
47 std::string application_name_
;
49 DISALLOW_COPY_AND_ASSIGN(HostEventLoggerPosix
);
54 HostEventLoggerPosix::HostEventLoggerPosix(
55 base::WeakPtr
<HostStatusMonitor
> monitor
,
56 const std::string
& application_name
)
58 application_name_(application_name
) {
59 openlog(application_name_
.c_str(), 0, LOG_USER
);
60 monitor_
->AddStatusObserver(this);
63 HostEventLoggerPosix::~HostEventLoggerPosix() {
65 monitor_
->RemoveStatusObserver(this);
69 void HostEventLoggerPosix::OnClientAuthenticated(const std::string
& jid
) {
70 Log("Client connected: " + jid
);
73 void HostEventLoggerPosix::OnClientDisconnected(const std::string
& jid
) {
74 Log("Client disconnected: " + jid
);
77 void HostEventLoggerPosix::OnAccessDenied(const std::string
& jid
) {
78 Log("Access denied for client: " + jid
);
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' "
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()));
93 void HostEventLoggerPosix::OnShutdown() {
94 // TODO(rmsousa): Fix host shutdown to actually call this, and add a log line.
97 void HostEventLoggerPosix::OnStart(const std::string
& xmpp_login
) {
98 Log("Host started for user: " + xmpp_login
);
101 void HostEventLoggerPosix::Log(const std::string
& message
) {
102 syslog(LOG_USER
| LOG_NOTICE
, "%s", message
.c_str());
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
));
113 } // namespace remoting