OSDN Git Service

DO NOT MERGE SDP: Fix the param_len recalculation
[android-x86/system-bt.git] / service / settings.cpp
1 //
2 //  Copyright (C) 2015 Google, Inc.
3 //
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
19 #include <base/base_switches.h>
20 #include <base/command_line.h>
21 #include <base/logging.h>
22
23 #include "service/switches.h"
24
25 namespace bluetooth {
26
27 Settings::Settings()
28     : initialized_(false) {
29 }
30
31 Settings::~Settings() {
32 }
33
34 bool Settings::Init() {
35   CHECK(!initialized_);
36   auto command_line = base::CommandLine::ForCurrentProcess();
37   const auto& switches = command_line->GetSwitches();
38
39   for (const auto& iter : switches) {
40     if (iter.first == switches::kCreateIPCSocketPath) {
41       // kCreateIPCSocketPath: An optional argument that initializes an IPC
42       // socket path for IPC.
43       base::FilePath path(iter.second);
44       if (path.empty() || path.EndsWithSeparator()) {
45         LOG(ERROR) << "Invalid IPC create socket path";
46         return false;
47       }
48
49       create_ipc_socket_path_ = path;
50     } else if (iter.first == switches::kAndroidIPCSocketSuffix) {
51       // kAndroidIPCSocketSuffix: An optional argument used to express
52       // a socket that Android init created for us. We bind to this.
53       const std::string& suffix = iter.second;
54       if (suffix.empty()) {
55         LOG(ERROR) << "Invalid Android socket suffix";
56         return false;
57       }
58
59       android_ipc_socket_suffix_ = suffix;
60     }
61     // Check for libbase logging switches. These get processed by
62     // logging::InitLogging directly.
63     else if (iter.first != ::switches::kV) {
64       LOG(ERROR) << "Unexpected command-line switches found: " << iter.first;
65       return false;
66     }
67   }
68
69   // Two IPC methods/paths were provided.
70   if (!android_ipc_socket_suffix_.empty() &&
71       !create_ipc_socket_path_.empty()) {
72     LOG(ERROR) << "Too many IPC methods provided";
73     return false;
74   }
75
76   // The daemon has no arguments
77   if (command_line->GetArgs().size()) {
78     LOG(ERROR) << "Unexpected command-line arguments found";
79     return false;
80   }
81
82   initialized_ = true;
83   return true;
84 }
85
86 }  // namespace bluetooth