• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2019 The Android Open Source Project
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 #pragma once
18 
19 #include <vector>
20 
21 #include "interface_utils.h"
22 #include "parser.h"
23 #include "service.h"
24 #include "service_list.h"
25 #include "subcontext.h"
26 
27 namespace android {
28 namespace init {
29 
30 class ServiceParser : public SectionParser {
31   public:
ServiceParser(ServiceList * service_list,Subcontext * subcontext,const std::optional<InterfaceInheritanceHierarchyMap> & interface_inheritance_hierarchy)32     ServiceParser(
33             ServiceList* service_list, Subcontext* subcontext,
34             const std::optional<InterfaceInheritanceHierarchyMap>& interface_inheritance_hierarchy)
35         : service_list_(service_list),
36           subcontext_(subcontext),
37           interface_inheritance_hierarchy_(interface_inheritance_hierarchy),
38           service_(nullptr) {}
39     Result<void> ParseSection(std::vector<std::string>&& args, const std::string& filename,
40                               int line) override;
41     Result<void> ParseLineSection(std::vector<std::string>&& args, int line) override;
42     Result<void> EndSection() override;
EndFile()43     void EndFile() override { filename_ = ""; }
44 
45   private:
46     using OptionParser = Result<void> (ServiceParser::*)(std::vector<std::string>&& args);
47     const KeywordMap<ServiceParser::OptionParser>& GetParserMap() const;
48 
49     Result<void> ParseCapabilities(std::vector<std::string>&& args);
50     Result<void> ParseClass(std::vector<std::string>&& args);
51     Result<void> ParseConsole(std::vector<std::string>&& args);
52     Result<void> ParseCritical(std::vector<std::string>&& args);
53     Result<void> ParseDisabled(std::vector<std::string>&& args);
54     Result<void> ParseEnterNamespace(std::vector<std::string>&& args);
55     Result<void> ParseGroup(std::vector<std::string>&& args);
56     Result<void> ParseGentleKill(std::vector<std::string>&& args);
57     Result<void> ParsePriority(std::vector<std::string>&& args);
58     Result<void> ParseInterface(std::vector<std::string>&& args);
59     Result<void> ParseIoprio(std::vector<std::string>&& args);
60     Result<void> ParseKeycodes(std::vector<std::string>&& args);
61     Result<void> ParseOneshot(std::vector<std::string>&& args);
62     Result<void> ParseOnrestart(std::vector<std::string>&& args);
63     Result<void> ParseOomScoreAdjust(std::vector<std::string>&& args);
64     Result<void> ParseOverride(std::vector<std::string>&& args);
65     Result<void> ParseMemcgLimitInBytes(std::vector<std::string>&& args);
66     Result<void> ParseMemcgLimitPercent(std::vector<std::string>&& args);
67     Result<void> ParseMemcgLimitProperty(std::vector<std::string>&& args);
68     Result<void> ParseMemcgSoftLimitInBytes(std::vector<std::string>&& args);
69     Result<void> ParseMemcgSwappiness(std::vector<std::string>&& args);
70     Result<void> ParseNamespace(std::vector<std::string>&& args);
71     Result<void> ParseProcessRlimit(std::vector<std::string>&& args);
72     Result<void> ParseRebootOnFailure(std::vector<std::string>&& args);
73     Result<void> ParseRestartPeriod(std::vector<std::string>&& args);
74     Result<void> ParseSeclabel(std::vector<std::string>&& args);
75     Result<void> ParseSetenv(std::vector<std::string>&& args);
76     Result<void> ParseShutdown(std::vector<std::string>&& args);
77     Result<void> ParseSigstop(std::vector<std::string>&& args);
78     Result<void> ParseSocket(std::vector<std::string>&& args);
79     Result<void> ParseStdioToKmsg(std::vector<std::string>&& args);
80     Result<void> ParseTaskProfiles(std::vector<std::string>&& args);
81     Result<void> ParseTimeoutPeriod(std::vector<std::string>&& args);
82     Result<void> ParseFile(std::vector<std::string>&& args);
83     Result<void> ParseUser(std::vector<std::string>&& args);
84     Result<void> ParseWritepid(std::vector<std::string>&& args);
85     Result<void> ParseUpdatable(std::vector<std::string>&& args);
86 
87     bool IsValidName(const std::string& name) const;
88 
89     ServiceList* service_list_;
90     Subcontext* subcontext_;
91     std::optional<InterfaceInheritanceHierarchyMap> interface_inheritance_hierarchy_;
92     std::unique_ptr<Service> service_;
93     std::string filename_;
94 };
95 
96 }  // namespace init
97 }  // namespace android
98