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) const22bool 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) const51bool 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) const69bool 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) const87bool 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) const105bool 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) const123bool 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) const141bool 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) const159bool 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) const177bool 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)195std::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)204bool 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)233bool 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)250bool 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)267bool 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)284bool 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)300bool 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)316bool 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)333bool 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)350bool 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