OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "remoting/host/setup/daemon_controller_delegate_linux.h" | 5 #include "remoting/host/setup/daemon_controller_delegate_linux.h" |
6 | 6 |
7 #include <unistd.h> | 7 #include <unistd.h> |
8 | 8 |
9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
107 if (!base::WaitForExitCodeWithTimeout(process_handle, exit_code, timeout)) { | 107 if (!base::WaitForExitCodeWithTimeout(process_handle, exit_code, timeout)) { |
108 base::KillProcess(process_handle, 0, false); | 108 base::KillProcess(process_handle, 0, false); |
109 LOG(ERROR) << "Timeout exceeded for command: " | 109 LOG(ERROR) << "Timeout exceeded for command: " |
110 << command_line.GetCommandLineString(); | 110 << command_line.GetCommandLineString(); |
111 return false; | 111 return false; |
112 } | 112 } |
113 | 113 |
114 return true; | 114 return true; |
115 } | 115 } |
116 | 116 |
117 bool RunHostScript(const std::vector<std::string>& args, | 117 bool RunHostScript(const std::vector<std::string>& args, int* exit_code) { |
118 int* exit_code) { | |
119 return RunHostScriptWithTimeout( | 118 return RunHostScriptWithTimeout( |
120 args, base::TimeDelta::FromMilliseconds(kDaemonTimeoutMs), exit_code); | 119 args, base::TimeDelta::FromMilliseconds(kDaemonTimeoutMs), exit_code); |
121 } | 120 } |
122 | 121 |
123 } // namespace | 122 } // namespace |
124 | 123 |
125 DaemonControllerDelegateLinux::DaemonControllerDelegateLinux() { | 124 DaemonControllerDelegateLinux::DaemonControllerDelegateLinux() { |
126 } | 125 } |
127 | 126 |
128 DaemonControllerDelegateLinux::~DaemonControllerDelegateLinux() { | 127 DaemonControllerDelegateLinux::~DaemonControllerDelegateLinux() { |
129 } | 128 } |
130 | 129 |
131 DaemonController::State DaemonControllerDelegateLinux::GetState() { | 130 DaemonController::State DaemonControllerDelegateLinux::GetState() { |
132 std::vector<std::string> args; | 131 base::FilePath script_path; |
133 args.push_back("--check-running"); | 132 if (!GetScriptPath(&script_path)) { |
| 133 return DaemonController::STATE_NOT_IMPLEMENTED; |
| 134 } |
| 135 CommandLine command_line(script_path); |
| 136 command_line.AppendArg("--get-status"); |
| 137 |
| 138 std::string status; |
134 int exit_code = 0; | 139 int exit_code = 0; |
135 if (!RunHostScript(args, &exit_code)) { | 140 bool result = |
| 141 base::GetAppOutputWithExitCode(command_line, &status, &exit_code); |
| 142 if (!result) { |
136 // TODO(jamiewalch): When we have a good story for installing, return | 143 // TODO(jamiewalch): When we have a good story for installing, return |
137 // NOT_INSTALLED rather than NOT_IMPLEMENTED (the former suppresses | 144 // NOT_INSTALLED rather than NOT_IMPLEMENTED (the former suppresses |
138 // the relevant UI in the web-app). | 145 // the relevant UI in the web-app). |
139 return DaemonController::STATE_NOT_IMPLEMENTED; | 146 return DaemonController::STATE_NOT_IMPLEMENTED; |
140 } | 147 } |
141 | 148 |
142 if (exit_code == 0) { | 149 if (exit_code != 0) { |
| 150 LOG(ERROR) << "Failed to run \"" << command_line.GetCommandLineString() |
| 151 << "\". Exit code: " << exit_code; |
| 152 return DaemonController::STATE_UNKNOWN; |
| 153 } |
| 154 |
| 155 TrimWhitespaceASCII(status, TRIM_ALL, &status); |
| 156 |
| 157 if (status == "STARTED") { |
143 return DaemonController::STATE_STARTED; | 158 return DaemonController::STATE_STARTED; |
| 159 } else if (status == "STOPPED") { |
| 160 return DaemonController::STATE_STOPPED; |
| 161 } else if (status == "NOT_IMPLEMENTED") { |
| 162 return DaemonController::STATE_NOT_IMPLEMENTED; |
144 } else { | 163 } else { |
145 return DaemonController::STATE_STOPPED; | 164 LOG(ERROR) << "Unknown status string returned from \"" |
| 165 << command_line.GetCommandLineString() |
| 166 << "\": " << status; |
| 167 return DaemonController::STATE_UNKNOWN; |
146 } | 168 } |
147 } | 169 } |
148 | 170 |
149 scoped_ptr<base::DictionaryValue> DaemonControllerDelegateLinux::GetConfig() { | 171 scoped_ptr<base::DictionaryValue> DaemonControllerDelegateLinux::GetConfig() { |
150 scoped_ptr<base::DictionaryValue> result(new base::DictionaryValue()); | 172 scoped_ptr<base::DictionaryValue> result(new base::DictionaryValue()); |
151 | 173 |
152 if (GetState() != DaemonController::STATE_NOT_IMPLEMENTED) { | 174 if (GetState() != DaemonController::STATE_NOT_IMPLEMENTED) { |
153 JsonHostConfig config(GetConfigPath()); | 175 JsonHostConfig config(GetConfigPath()); |
154 if (config.Read()) { | 176 if (config.Read()) { |
155 std::string value; | 177 std::string value; |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
288 return consent; | 310 return consent; |
289 } | 311 } |
290 | 312 |
291 scoped_refptr<DaemonController> DaemonController::Create() { | 313 scoped_refptr<DaemonController> DaemonController::Create() { |
292 scoped_ptr<DaemonController::Delegate> delegate( | 314 scoped_ptr<DaemonController::Delegate> delegate( |
293 new DaemonControllerDelegateLinux()); | 315 new DaemonControllerDelegateLinux()); |
294 return new DaemonController(delegate.Pass()); | 316 return new DaemonController(delegate.Pass()); |
295 } | 317 } |
296 | 318 |
297 } // namespace remoting | 319 } // namespace remoting |
OLD | NEW |