blob: af67fbe9707cbd9c6eddb5102b301740b5d017ba [file] [log] [blame]
Arman Uguray065d0f72015-07-16 18:12:13 -07001//
Jakub Pawlowski5b790fe2017-09-18 09:00:20 -07002// Copyright 2015 Google, Inc.
Arman Uguray065d0f72015-07-16 18:12:13 -07003//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at:
7//
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15//
16
17#include "service/settings.h"
18
Arman Uguray503baaa2015-08-20 11:49:00 -070019#include <base/base_switches.h>
Arman Uguray065d0f72015-07-16 18:12:13 -070020#include <base/command_line.h>
Arman Uguray065d0f72015-07-16 18:12:13 -070021#include <base/logging.h>
22
23#include "service/switches.h"
24
25namespace bluetooth {
26
Bailey Forreste8e6c6b2017-06-07 14:50:08 -070027Settings::Settings() : initialized_(false), enable_on_start_(false) {}
Arman Uguray065d0f72015-07-16 18:12:13 -070028
Myles Watson911d1ae2016-11-28 16:44:40 -080029Settings::~Settings() {}
Arman Uguray065d0f72015-07-16 18:12:13 -070030
31bool Settings::Init() {
32 CHECK(!initialized_);
33 auto command_line = base::CommandLine::ForCurrentProcess();
Arman Ugurayfe65fb72015-07-24 19:14:42 -070034 const auto& switches = command_line->GetSwitches();
Arman Uguray065d0f72015-07-16 18:12:13 -070035
Arman Ugurayfe65fb72015-07-24 19:14:42 -070036 for (const auto& iter : switches) {
Ian Coolidgec6760d82015-07-30 20:51:47 -070037 if (iter.first == switches::kCreateIPCSocketPath) {
38 // kCreateIPCSocketPath: An optional argument that initializes an IPC
39 // socket path for IPC.
Arman Ugurayfe65fb72015-07-24 19:14:42 -070040 base::FilePath path(iter.second);
41 if (path.empty() || path.EndsWithSeparator()) {
Ian Coolidgec6760d82015-07-30 20:51:47 -070042 LOG(ERROR) << "Invalid IPC create socket path";
Arman Ugurayfe65fb72015-07-24 19:14:42 -070043 return false;
44 }
Arman Uguray065d0f72015-07-16 18:12:13 -070045
Ian Coolidgec6760d82015-07-30 20:51:47 -070046 create_ipc_socket_path_ = path;
47 } else if (iter.first == switches::kAndroidIPCSocketSuffix) {
48 // kAndroidIPCSocketSuffix: An optional argument used to express
49 // a socket that Android init created for us. We bind to this.
50 const std::string& suffix = iter.second;
51 if (suffix.empty()) {
52 LOG(ERROR) << "Invalid Android socket suffix";
53 return false;
54 }
55
56 android_ipc_socket_suffix_ = suffix;
Bailey Forreste8e6c6b2017-06-07 14:50:08 -070057 } else if (iter.first == switches::kEnableOnStart) {
58 if (iter.second == "true") {
59 enable_on_start_ = true;
60 } else if (iter.second == "false") {
61 enable_on_start_ = false;
62 } else {
63 LOG(ERROR) << "Invalid value for " << switches::kEnableOnStart << ": "
64 << iter.second << ". Expect 'true' or 'false'";
65 return false;
66 }
Arman Uguray503baaa2015-08-20 11:49:00 -070067 }
68 // Check for libbase logging switches. These get processed by
69 // logging::InitLogging directly.
70 else if (iter.first != ::switches::kV) {
Arman Uguray8531fc32015-11-17 19:29:31 -080071 LOG(ERROR) << "Unexpected command-line switches found: " << iter.first;
Arman Ugurayfe65fb72015-07-24 19:14:42 -070072 return false;
73 }
Arman Uguray065d0f72015-07-16 18:12:13 -070074 }
75
Ian Coolidgec6760d82015-07-30 20:51:47 -070076 // Two IPC methods/paths were provided.
Myles Watson911d1ae2016-11-28 16:44:40 -080077 if (!android_ipc_socket_suffix_.empty() && !create_ipc_socket_path_.empty()) {
Ian Coolidgec6760d82015-07-30 20:51:47 -070078 LOG(ERROR) << "Too many IPC methods provided";
79 return false;
80 }
81
Arman Uguray065d0f72015-07-16 18:12:13 -070082 // The daemon has no arguments
83 if (command_line->GetArgs().size()) {
84 LOG(ERROR) << "Unexpected command-line arguments found";
85 return false;
86 }
87
Arman Uguray065d0f72015-07-16 18:12:13 -070088 initialized_ = true;
89 return true;
90}
91
92} // namespace bluetooth