• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "operator_config_types.h"
17 
18 #include "telephony_log_wrapper.h"
19 
20 namespace OHOS {
21 namespace Telephony {
Marshalling(Parcel & parcel) const22 bool OperatorConfig::Marshalling(Parcel &parcel) const
23 {
24     if (!MarshallingU16StringMap(parcel)) {
25         return false;
26     }
27     if (!MarshallingBoolMap(parcel)) {
28         return false;
29     }
30     if (!MarshallingStringMap(parcel)) {
31         return false;
32     }
33     if (!MarshallingStringArrayMap(parcel)) {
34         return false;
35     }
36     if (!MarshallingIntMap(parcel)) {
37         return false;
38     }
39     if (!MarshallingIntArrayMap(parcel)) {
40         return false;
41     }
42     if (!MarshallingLongMap(parcel)) {
43         return false;
44     }
45     if (!MarshallingLongArrayMap(parcel)) {
46         return false;
47     }
48     return true;
49 };
50 
MarshallingU16StringMap(Parcel & parcel) const51 bool OperatorConfig::MarshallingU16StringMap(Parcel &parcel) const
52 {
53     if (!parcel.WriteInt32(configValue.size())) {
54         return false;
55     }
56     auto valueIt = configValue.begin();
57     while (valueIt != configValue.end()) {
58         if (!parcel.WriteString16(valueIt->first)) {
59             return false;
60         }
61         if (!parcel.WriteString16(valueIt->second)) {
62             return false;
63         }
64         valueIt++;
65     }
66     return true;
67 }
68 
MarshallingStringMap(Parcel & parcel) const69 bool OperatorConfig::MarshallingStringMap(Parcel &parcel) const
70 {
71     if (!parcel.WriteInt32(stringValue.size())) {
72         return false;
73     }
74     auto valueIt = stringValue.begin();
75     while (valueIt != stringValue.end()) {
76         if (!parcel.WriteString(valueIt->first)) {
77             return false;
78         }
79         if (!parcel.WriteString(valueIt->second)) {
80             return false;
81         }
82         valueIt++;
83     }
84     return true;
85 }
86 
MarshallingBoolMap(Parcel & parcel) const87 bool OperatorConfig::MarshallingBoolMap(Parcel &parcel) const
88 {
89     if (!parcel.WriteInt32(boolValue.size())) {
90         return false;
91     }
92     auto valueIt = boolValue.begin();
93     while (valueIt != boolValue.end()) {
94         if (!parcel.WriteString(valueIt->first)) {
95             return false;
96         }
97         if (!parcel.WriteBool(valueIt->second)) {
98             return false;
99         }
100         valueIt++;
101     }
102     return true;
103 }
104 
MarshallingIntMap(Parcel & parcel) const105 bool OperatorConfig::MarshallingIntMap(Parcel &parcel) const
106 {
107     if (!parcel.WriteInt32(intValue.size())) {
108         return false;
109     }
110     auto valueIt = intValue.begin();
111     while (valueIt != intValue.end()) {
112         if (!parcel.WriteString(valueIt->first)) {
113             return false;
114         }
115         if (!parcel.WriteInt32(valueIt->second)) {
116             return false;
117         }
118         valueIt++;
119     }
120     return true;
121 }
122 
MarshallingLongMap(Parcel & parcel) const123 bool OperatorConfig::MarshallingLongMap(Parcel &parcel) const
124 {
125     if (!parcel.WriteInt32(longValue.size())) {
126         return false;
127     }
128     auto valueIt = longValue.begin();
129     while (valueIt != longValue.end()) {
130         if (!parcel.WriteString(valueIt->first)) {
131             return false;
132         }
133         if (!parcel.WriteInt64(valueIt->second)) {
134             return false;
135         }
136         valueIt++;
137     }
138     return true;
139 }
140 
MarshallingStringArrayMap(Parcel & parcel) const141 bool OperatorConfig::MarshallingStringArrayMap(Parcel &parcel) const
142 {
143     if (!parcel.WriteInt32(stringArrayValue.size())) {
144         return false;
145     }
146     auto valueIt = stringArrayValue.begin();
147     while (valueIt != stringArrayValue.end()) {
148         if (!parcel.WriteString(valueIt->first)) {
149             return false;
150         }
151         if (!parcel.WriteStringVector(valueIt->second)) {
152             return false;
153         }
154         valueIt++;
155     }
156     return true;
157 }
158 
MarshallingIntArrayMap(Parcel & parcel) const159 bool OperatorConfig::MarshallingIntArrayMap(Parcel &parcel) const
160 {
161     if (!parcel.WriteInt32(intArrayValue.size())) {
162         return false;
163     }
164     auto valueIt = intArrayValue.begin();
165     while (valueIt != intArrayValue.end()) {
166         if (!parcel.WriteString(valueIt->first)) {
167             return false;
168         }
169         if (!parcel.WriteInt32Vector(valueIt->second)) {
170             return false;
171         }
172         valueIt++;
173     }
174     return true;
175 }
176 
MarshallingLongArrayMap(Parcel & parcel) const177 bool OperatorConfig::MarshallingLongArrayMap(Parcel &parcel) const
178 {
179     if (!parcel.WriteInt32(longArrayValue.size())) {
180         return false;
181     }
182     auto valueIt = longArrayValue.begin();
183     while (valueIt != longArrayValue.end()) {
184         if (!parcel.WriteString(valueIt->first)) {
185             return false;
186         }
187         if (!parcel.WriteInt64Vector(valueIt->second)) {
188             return false;
189         }
190         valueIt++;
191     }
192     return true;
193 }
194 
UnMarshalling(Parcel & parcel)195 std::shared_ptr<OperatorConfig> OperatorConfig::UnMarshalling(Parcel &parcel)
196 {
197     std::shared_ptr<OperatorConfig> param = std::make_shared<OperatorConfig>();
198     if (param == nullptr || !param->ReadFromParcel(parcel)) {
199         param = nullptr;
200     }
201     return param;
202 };
203 
ReadFromParcel(Parcel & parcel)204 bool OperatorConfig::ReadFromParcel(Parcel &parcel)
205 {
206     if (!ReadFromU16StringMap(parcel)) {
207         return false;
208     }
209     if (!ReadFromBoolMap(parcel)) {
210         return false;
211     }
212     if (!ReadFromStringMap(parcel)) {
213         return false;
214     }
215     if (!ReadFromStringArrayMap(parcel)) {
216         return false;
217     }
218     if (!ReadFromIntMap(parcel)) {
219         return false;
220     }
221     if (!ReadFromIntArrayMap(parcel)) {
222         return false;
223     }
224     if (!ReadFromLongMap(parcel)) {
225         return false;
226     }
227     if (!ReadFromLongArrayMap(parcel)) {
228         return false;
229     }
230     return true;
231 };
232 
ReadFromU16StringMap(Parcel & parcel)233 bool OperatorConfig::ReadFromU16StringMap(Parcel &parcel)
234 {
235     configValue.clear();
236     int32_t valueSize = parcel.ReadInt32();
237     if (valueSize > MAX_CONFIG_SIZE) {
238         return false;
239     }
240     int32_t k = 0;
241     while (k < valueSize) {
242         std::u16string first = parcel.ReadString16();
243         std::u16string second = parcel.ReadString16();
244         configValue.emplace(std::pair<std::u16string, std::u16string>(first, second));
245         k++;
246     }
247     return true;
248 }
249 
ReadFromStringMap(Parcel & parcel)250 bool OperatorConfig::ReadFromStringMap(Parcel &parcel)
251 {
252     stringValue.clear();
253     int32_t valueSize = parcel.ReadInt32();
254     if (valueSize > MAX_CONFIG_SIZE) {
255         return false;
256     }
257     int32_t k = 0;
258     while (k < valueSize) {
259         std::string first = parcel.ReadString();
260         std::string second = parcel.ReadString();
261         stringValue.emplace(std::pair<std::string, std::string>(first, second));
262         k++;
263     }
264     return true;
265 }
266 
ReadFromIntMap(Parcel & parcel)267 bool OperatorConfig::ReadFromIntMap(Parcel &parcel)
268 {
269     intValue.clear();
270     int32_t valueSize = parcel.ReadInt32();
271     if (valueSize > MAX_CONFIG_SIZE) {
272         return false;
273     }
274     int32_t k = 0;
275     while (k < valueSize) {
276         std::string first = parcel.ReadString();
277         int32_t second = parcel.ReadInt32();
278         intValue[first] = second;
279         k++;
280     }
281     return true;
282 }
283 
ReadFromBoolMap(Parcel & parcel)284 bool OperatorConfig::ReadFromBoolMap(Parcel &parcel)
285 {
286     boolValue.clear();
287     int32_t valueSize = parcel.ReadInt32();
288     if (valueSize > MAX_CONFIG_SIZE) {
289         return false;
290     }
291     int32_t k = 0;
292     while (k < valueSize) {
293         std::string first = parcel.ReadString();
294         bool second = parcel.ReadBool();
295         boolValue[first] = second;
296         k++;
297     }
298     return true;
299 }
ReadFromLongMap(Parcel & parcel)300 bool OperatorConfig::ReadFromLongMap(Parcel &parcel)
301 {
302     longValue.clear();
303     int32_t valueSize = parcel.ReadInt32();
304     if (valueSize > MAX_CONFIG_SIZE) {
305         return false;
306     }
307     int32_t k = 0;
308     while (k < valueSize) {
309         std::string first = parcel.ReadString();
310         int64_t second = parcel.ReadInt64();
311         longValue[first] = second;
312         k++;
313     }
314     return true;
315 }
ReadFromStringArrayMap(Parcel & parcel)316 bool OperatorConfig::ReadFromStringArrayMap(Parcel &parcel)
317 {
318     stringArrayValue.clear();
319     int32_t valueSize = parcel.ReadInt32();
320     if (valueSize > MAX_CONFIG_SIZE) {
321         return false;
322     }
323     int32_t k = 0;
324     while (k < valueSize) {
325         std::string first = parcel.ReadString();
326         std::vector<std::string> vec;
327         parcel.ReadStringVector(&vec);
328         stringArrayValue[first] = vec;
329         k++;
330     }
331     return true;
332 }
ReadFromIntArrayMap(Parcel & parcel)333 bool OperatorConfig::ReadFromIntArrayMap(Parcel &parcel)
334 {
335     intArrayValue.clear();
336     int32_t valueSize = parcel.ReadInt32();
337     if (valueSize > MAX_CONFIG_SIZE) {
338         return false;
339     }
340     int32_t k = 0;
341     while (k < valueSize) {
342         std::string first = parcel.ReadString();
343         std::vector<int32_t> vec;
344         parcel.ReadInt32Vector(&vec);
345         intArrayValue[first] = vec;
346         k++;
347     }
348     return true;
349 }
ReadFromLongArrayMap(Parcel & parcel)350 bool OperatorConfig::ReadFromLongArrayMap(Parcel &parcel)
351 {
352     longArrayValue.clear();
353     int32_t valueSize = parcel.ReadInt32();
354     if (valueSize > MAX_CONFIG_SIZE) {
355         return false;
356     }
357     int32_t k = 0;
358     while (k < valueSize) {
359         std::string first = parcel.ReadString();
360         std::vector<int64_t> vec;
361         parcel.ReadInt64Vector(&vec);
362         longArrayValue[first] = vec;
363         k++;
364     }
365     return true;
366 }
367 } // namespace Telephony
368 } // namespace OHOS
369