1 /*
2  * Copyright (C) 2017 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 
18 #include "TransportArch.h"
19 
20 #include "parse_string.h"
21 
22 namespace android {
23 namespace vintf {
24 
empty() const25 bool TransportArch::empty() const {
26     return transport == Transport::EMPTY && arch == Arch::ARCH_EMPTY;
27 }
28 
isValid(std::string * error) const29 bool TransportArch::isValid(std::string* error) const {
30     if (error) {
31         error->clear();
32     }
33 
34     switch (transport) {
35         case Transport::EMPTY: // fallthrough
36         case Transport::HWBINDER:
37             if (arch == Arch::ARCH_EMPTY && !ip.has_value() && !port.has_value()) {
38                 return true;
39             }
40             if (error) {
41                 *error += "Transport " + to_string(transport) +
42                           " requires empty ip and port attributes as well as empty arch attribute";
43             }
44             return false;
45 
46         case Transport::PASSTHROUGH:
47             if (arch != Arch::ARCH_EMPTY && !ip.has_value() && !port.has_value()) {
48                 return true;
49             }
50             if (error) {
51                 *error += "Passthrough HALs requires arch attribute and no ip or port attributes";
52             }
53             return false;
54         case Transport::INET:
55             if (arch == Arch::ARCH_EMPTY && ip.has_value() && port.has_value()) {
56                 return true;
57             }
58             if (error) {
59                 *error += "Transport " + to_string(transport) +
60                           " requires ip and port attributes as well as empty arch attribute";
61             }
62             return false;
63     }
64 }
65 
66 } // namespace vintf
67 } // namespace android
68