Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8)

Side by Side Diff: service_manager.cc

Issue 6508016: vpn-manager: Add l2tp/ipsec vpn manager (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/vpn-manager.git@master
Patch Set: tweak Created 9 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2011 The Chromium OS 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 "vpn-manager/service_manager.h"
6
7 #include <stdlib.h>
8
9 #include "base/eintr_wrapper.h"
10 #include "base/file_util.h"
11 #include "base/logging.h"
12 #include "base/string_util.h"
13
14 FilePath ServiceManager::temp_path_;
15
16 const char kTempDirectory[] = "/home/chronos/user/tmp/l2tpipsec";
17
18 ServiceManager::ServiceManager(const std::string& service_name)
19 : is_running_(false), was_stopped_(false), inner_service_(NULL),
petkov 2011/03/04 18:42:56 each initializer should be on a separate line, no?
kmixter1 2011/03/05 02:48:59 Done.
20 outer_service_(NULL), service_name_(service_name) {
21 }
22
23 ServiceManager::~ServiceManager() {
24 }
25
26 void ServiceManager::OnStarted() {
27 is_running_ = true;
petkov 2011/03/04 18:42:56 CHECK(!is_running_ && !was_stopped)?
kmixter1 2011/03/05 02:48:59 Done.
28 if (inner_service_ == NULL)
29 return;
30
31 LOG(INFO) << "Starting inner " << inner_service_->service_name();
32 if (!inner_service_->Start()) {
petkov 2011/03/04 18:42:56 Hmm, so you always start the chain from the outerm
kmixter1 2011/03/05 02:48:59 Yes - start from the outermost and stop from the i
33 // Inner service could not be started, stop this layer.
34 LOG(ERROR) << "Inner service " << inner_service_->service_name()
35 << " failed. Stopping " << service_name();
36 Stop();
37 }
38 }
39
40 void ServiceManager::OnStopped(bool was_error) {
41 is_running_ = false;
petkov 2011/03/04 18:42:56 CHECK(is_running && !was_stopped)?
kmixter1 2011/03/05 02:48:59 It's ok to stop an already stopped service, see ne
42 was_stopped_ = true;
43 if (outer_service_ != NULL) {
44 outer_service_->Stop();
45 }
46 }
47
48 void ServiceManager::Initialize() {
49 if (temp_path_.value().empty()) {
50 temp_path_ = FilePath(kTempDirectory);
51 }
52 FilePath base = temp_path_.DirName();
petkov 2011/03/04 18:42:56 why do you split it into base and the rest? Create
kmixter1 2011/03/05 02:48:59 No kidding? I didn't know it was so kind. See si
53 if (!file_util::DirectoryExists(base)) {
54 CHECK(file_util::CreateDirectory(base))
55 << "Unable to create " << base.value();
56 }
57 if (!file_util::DirectoryExists(temp_path_)) {
58 CHECK(file_util::CreateDirectory(temp_path_))
59 << "Unable to create " << temp_path_.value();
60 }
61 atexit(ServiceManager::DeleteTemp);
62 }
63
64 void ServiceManager::DeleteTemp() {
65 file_util::Delete(temp_path_, true);
66 }
67
68 void ServiceManager::WriteFdToSyslog(int fd, const char* prefix) {
69 char buffer[256];
70 // Note that short reads and reads of over sizeof(buffer) amount of
71 // data are going to split into different syslog lines. Seems ok
petkov 2011/03/04 18:42:56 how is this ensured, by multiple calls to this met
kmixter1 2011/03/05 02:48:59 Right now the code does arbitrarily split lines.
72 // for now.
73 int written = HANDLE_EINTR(read(fd, &buffer, sizeof(buffer) - 1));
74 if (written < 0) {
75 LOG(WARNING) << "Error condition on " << prefix << " pipe";
76 return;
77 }
78 buffer[written] = '\0';
79 std::string trimmed_contents;
80 TrimWhitespaceASCII(buffer, TRIM_TRAILING, &trimmed_contents);
81 std::vector<std::string> lines;
82 SplitString(trimmed_contents, '\n', &lines);
83 for (size_t i = 0; i < lines.size(); ++i)
84 LOG(INFO) << prefix << lines[i];
85 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698