| OLD | NEW |
| (Empty) |
| 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/server_log_entry.h" | |
| 6 | |
| 7 #include "base/logging.h" | |
| 8 #include "base/strings/stringize_macros.h" | |
| 9 #include "base/sys_info.h" | |
| 10 #include "remoting/base/constants.h" | |
| 11 #include "remoting/protocol/session.h" | |
| 12 #include "third_party/libjingle/source/talk/xmllite/xmlelement.h" | |
| 13 | |
| 14 using base::SysInfo; | |
| 15 using buzz::QName; | |
| 16 using buzz::XmlElement; | |
| 17 using remoting::protocol::Session; | |
| 18 | |
| 19 namespace remoting { | |
| 20 | |
| 21 namespace { | |
| 22 const char kLogCommand[] = "log"; | |
| 23 | |
| 24 const char kLogEntry[] = "entry"; | |
| 25 | |
| 26 const char kKeyEventName[] = "event-name"; | |
| 27 const char kValueEventNameSessionState[] = "session-state"; | |
| 28 const char kValueEventNameHeartbeat[] = "heartbeat"; | |
| 29 const char kValueEventNameHostStatus[] = "host-status"; | |
| 30 | |
| 31 const char kKeyRole[] = "role"; | |
| 32 const char kValueRoleHost[] = "host"; | |
| 33 | |
| 34 const char kKeyMode[] = "mode"; | |
| 35 const char kValueModeIt2Me[] = "it2me"; | |
| 36 const char kValueModeMe2Me[] = "me2me"; | |
| 37 | |
| 38 const char kKeySessionState[] = "session-state"; | |
| 39 const char kValueSessionStateConnected[] = "connected"; | |
| 40 const char kValueSessionStateClosed[] = "closed"; | |
| 41 | |
| 42 const char kStatusName[] = "status"; | |
| 43 const char kExitCodeName[] = "exit-code"; | |
| 44 | |
| 45 const char kKeyOsName[] = "os-name"; | |
| 46 | |
| 47 #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_CHROMEOS) | |
| 48 const char kKeyOsVersion[] = "os-version"; | |
| 49 #endif | |
| 50 | |
| 51 const char kKeyHostVersion[] = "host-version"; | |
| 52 | |
| 53 const char kKeyCpu[] = "cpu"; | |
| 54 | |
| 55 const char kKeyConnectionType[] = "connection-type"; | |
| 56 | |
| 57 } // namespace | |
| 58 | |
| 59 ServerLogEntry::ServerLogEntry() { | |
| 60 } | |
| 61 | |
| 62 ServerLogEntry::~ServerLogEntry() { | |
| 63 } | |
| 64 | |
| 65 // static | |
| 66 scoped_ptr<buzz::XmlElement> ServerLogEntry::MakeStanza() { | |
| 67 return scoped_ptr<buzz::XmlElement>( | |
| 68 new XmlElement(QName(kChromotingXmlNamespace, kLogCommand))); | |
| 69 } | |
| 70 | |
| 71 // static | |
| 72 scoped_ptr<ServerLogEntry> ServerLogEntry::MakeForSessionStateChange( | |
| 73 bool connected) { | |
| 74 scoped_ptr<ServerLogEntry> entry(new ServerLogEntry()); | |
| 75 entry->Set(kKeyRole, kValueRoleHost); | |
| 76 entry->Set(kKeyEventName, kValueEventNameSessionState); | |
| 77 entry->Set(kKeySessionState, GetValueSessionState(connected)); | |
| 78 return entry.Pass(); | |
| 79 } | |
| 80 | |
| 81 // static | |
| 82 scoped_ptr<ServerLogEntry> ServerLogEntry::MakeForHeartbeat() { | |
| 83 scoped_ptr<ServerLogEntry> entry(new ServerLogEntry()); | |
| 84 entry->Set(kKeyRole, kValueRoleHost); | |
| 85 entry->Set(kKeyEventName, kValueEventNameHeartbeat); | |
| 86 return entry.Pass(); | |
| 87 } | |
| 88 | |
| 89 // static | |
| 90 scoped_ptr<ServerLogEntry> ServerLogEntry::MakeForHostStatus( | |
| 91 HostStatusSender::HostStatus host_status, HostExitCodes exit_code) { | |
| 92 scoped_ptr<ServerLogEntry> entry(new ServerLogEntry()); | |
| 93 entry->Set(kKeyRole, kValueRoleHost); | |
| 94 entry->Set(kKeyEventName, kValueEventNameHostStatus); | |
| 95 entry->Set(kStatusName, HostStatusSender::HostStatusToString(host_status)); | |
| 96 if (host_status == HostStatusSender::OFFLINE) | |
| 97 entry->Set(kExitCodeName, ExitCodeToString(exit_code)); | |
| 98 return entry.Pass(); | |
| 99 } | |
| 100 | |
| 101 void ServerLogEntry::AddHostFields() { | |
| 102 #if defined(OS_WIN) | |
| 103 Set(kKeyOsName, "Windows"); | |
| 104 #elif defined(OS_MACOSX) | |
| 105 Set(kKeyOsName, "Mac"); | |
| 106 #elif defined(OS_CHROMEOS) | |
| 107 Set(kKeyOsName, "ChromeOS"); | |
| 108 #elif defined(OS_LINUX) | |
| 109 Set(kKeyOsName, "Linux"); | |
| 110 #endif | |
| 111 | |
| 112 // SysInfo::OperatingSystemVersionNumbers is only defined for the following | |
| 113 // OSes: see base/sys_info_unittest.cc. | |
| 114 #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_CHROMEOS) | |
| 115 std::stringstream os_version; | |
| 116 int32 os_major_version = 0; | |
| 117 int32 os_minor_version = 0; | |
| 118 int32 os_bugfix_version = 0; | |
| 119 SysInfo::OperatingSystemVersionNumbers(&os_major_version, &os_minor_version, | |
| 120 &os_bugfix_version); | |
| 121 os_version << os_major_version << "." << os_minor_version << "." | |
| 122 << os_bugfix_version; | |
| 123 Set(kKeyOsVersion, os_version.str()); | |
| 124 #endif | |
| 125 | |
| 126 Set(kKeyHostVersion, STRINGIZE(VERSION)); | |
| 127 Set(kKeyCpu, SysInfo::OperatingSystemArchitecture()); | |
| 128 }; | |
| 129 | |
| 130 void ServerLogEntry::AddModeField(ServerLogEntry::Mode mode) { | |
| 131 Set(kKeyMode, GetValueMode(mode)); | |
| 132 } | |
| 133 | |
| 134 void ServerLogEntry::AddConnectionTypeField( | |
| 135 protocol::TransportRoute::RouteType type) { | |
| 136 Set(kKeyConnectionType, protocol::TransportRoute::GetTypeString(type)); | |
| 137 } | |
| 138 | |
| 139 // static | |
| 140 const char* ServerLogEntry::GetValueMode(ServerLogEntry::Mode mode) { | |
| 141 switch (mode) { | |
| 142 case IT2ME: | |
| 143 return kValueModeIt2Me; | |
| 144 case ME2ME: | |
| 145 return kValueModeMe2Me; | |
| 146 default: | |
| 147 NOTREACHED(); | |
| 148 return NULL; | |
| 149 } | |
| 150 } | |
| 151 | |
| 152 scoped_ptr<XmlElement> ServerLogEntry::ToStanza() const { | |
| 153 scoped_ptr<XmlElement> stanza(new XmlElement(QName( | |
| 154 kChromotingXmlNamespace, kLogEntry))); | |
| 155 ValuesMap::const_iterator iter; | |
| 156 for (iter = values_map_.begin(); iter != values_map_.end(); ++iter) { | |
| 157 stanza->AddAttr(QName(std::string(), iter->first), iter->second); | |
| 158 } | |
| 159 return stanza.Pass(); | |
| 160 } | |
| 161 | |
| 162 // static | |
| 163 const char* ServerLogEntry::GetValueSessionState(bool connected) { | |
| 164 return connected ? kValueSessionStateConnected : kValueSessionStateClosed; | |
| 165 } | |
| 166 | |
| 167 void ServerLogEntry::Set(const std::string& key, const std::string& value) { | |
| 168 values_map_[key] = value; | |
| 169 } | |
| 170 | |
| 171 } // namespace remoting | |
| OLD | NEW |