1 /*
2 * Copyright (c) 2023 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 "shared_module_info.h"
17
18 #include "app_log_wrapper.h"
19 #include "json_util.h"
20 #include "nlohmann/json.hpp"
21 #include "parcel_macro.h"
22 #include "string_ex.h"
23
24 namespace OHOS {
25 namespace AppExecFwk {
26 namespace {
27 const char* SHARED_MODULE_INFO_NAME = "name";
28 const char* SHARED_MODULE_INFO_VERSION_CODE = "versionCode";
29 const char* SHARED_MODULE_INFO_VERSION_NAME = "versionName";
30 const char* SHARED_MODULE_INFO_DESCRIPTION = "description";
31 const char* SHARED_MODULE_INFO_DESCRIPTION_ID = "descriptionId";
32 const char* SHARED_MODULE_INFO_COMPRESS_NATIVE_LIBS = "compressNativeLibs";
33 const char* SHARED_MODULE_INFO_HAP_PATH = "hapPath";
34 const char* SHARED_MODULE_INFO_CPU_ABI = "cpuAbi";
35 const char* SHARED_MODULE_INFO_NATIVE_LIBRARY_PATH = "nativeLibraryPath";
36 const char* SHARED_MODULE_INFO_NATIVE_LIBRARY_FILE_NAMES = "nativeLibraryFileNames";
37 }
38
ReadFromParcel(Parcel & parcel)39 bool SharedModuleInfo::ReadFromParcel(Parcel &parcel)
40 {
41 name = Str16ToStr8(parcel.ReadString16());
42 versionCode = parcel.ReadUint32();
43 versionName = Str16ToStr8(parcel.ReadString16());
44 description = Str16ToStr8(parcel.ReadString16());
45 descriptionId = parcel.ReadUint32();
46 compressNativeLibs = parcel.ReadBool();
47 hapPath = Str16ToStr8(parcel.ReadString16());
48 cpuAbi = Str16ToStr8(parcel.ReadString16());
49 nativeLibraryPath = Str16ToStr8(parcel.ReadString16());
50 int32_t nativeLibraryFileNamesSize;
51 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, nativeLibraryFileNamesSize);
52 CONTAINER_SECURITY_VERIFY(parcel, nativeLibraryFileNamesSize, &nativeLibraryFileNames);
53 for (int32_t i = 0; i < nativeLibraryFileNamesSize; ++i) {
54 nativeLibraryFileNames.emplace_back(Str16ToStr8(parcel.ReadString16()));
55 }
56 return true;
57 }
58
Marshalling(Parcel & parcel) const59 bool SharedModuleInfo::Marshalling(Parcel &parcel) const
60 {
61 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(name));
62 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Uint32, parcel, versionCode);
63 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(versionName));
64 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(description));
65 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Uint32, parcel, descriptionId);
66 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, compressNativeLibs);
67 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(hapPath));
68 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(cpuAbi));
69 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(nativeLibraryPath));
70 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, nativeLibraryFileNames.size());
71 for (auto &fileName : nativeLibraryFileNames) {
72 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(fileName));
73 }
74 return true;
75 }
76
Unmarshalling(Parcel & parcel)77 SharedModuleInfo *SharedModuleInfo::Unmarshalling(Parcel &parcel)
78 {
79 SharedModuleInfo *info = new (std::nothrow) SharedModuleInfo();
80 if (info && !info->ReadFromParcel(parcel)) {
81 APP_LOGW("read from parcel failed");
82 delete info;
83 info = nullptr;
84 }
85 return info;
86 }
87
to_json(nlohmann::json & jsonObject,const SharedModuleInfo & sharedModuleInfo)88 void to_json(nlohmann::json &jsonObject, const SharedModuleInfo &sharedModuleInfo)
89 {
90 jsonObject = nlohmann::json {
91 {SHARED_MODULE_INFO_NAME, sharedModuleInfo.name},
92 {SHARED_MODULE_INFO_VERSION_CODE, sharedModuleInfo.versionCode},
93 {SHARED_MODULE_INFO_VERSION_NAME, sharedModuleInfo.versionName},
94 {SHARED_MODULE_INFO_DESCRIPTION, sharedModuleInfo.description},
95 {SHARED_MODULE_INFO_DESCRIPTION_ID, sharedModuleInfo.descriptionId},
96 {SHARED_MODULE_INFO_COMPRESS_NATIVE_LIBS, sharedModuleInfo.compressNativeLibs},
97 {SHARED_MODULE_INFO_HAP_PATH, sharedModuleInfo.hapPath},
98 {SHARED_MODULE_INFO_CPU_ABI, sharedModuleInfo.cpuAbi},
99 {SHARED_MODULE_INFO_NATIVE_LIBRARY_PATH, sharedModuleInfo.nativeLibraryPath},
100 {SHARED_MODULE_INFO_NATIVE_LIBRARY_FILE_NAMES, sharedModuleInfo.nativeLibraryFileNames}
101 };
102 }
103
from_json(const nlohmann::json & jsonObject,SharedModuleInfo & sharedModuleInfo)104 void from_json(const nlohmann::json &jsonObject, SharedModuleInfo &sharedModuleInfo)
105 {
106 const auto &jsonObjectEnd = jsonObject.end();
107 int32_t parseResult = ERR_OK;
108 GetValueIfFindKey<std::string>(jsonObject, jsonObjectEnd,
109 SHARED_MODULE_INFO_NAME,
110 sharedModuleInfo.name, JsonType::STRING, false, parseResult,
111 ArrayType::NOT_ARRAY);
112 GetValueIfFindKey<uint32_t>(jsonObject, jsonObjectEnd,
113 SHARED_MODULE_INFO_VERSION_CODE,
114 sharedModuleInfo.versionCode, JsonType::NUMBER, false, parseResult,
115 ArrayType::NOT_ARRAY);
116 GetValueIfFindKey<std::string>(jsonObject, jsonObjectEnd,
117 SHARED_MODULE_INFO_VERSION_NAME,
118 sharedModuleInfo.versionName, JsonType::STRING, false, parseResult,
119 ArrayType::NOT_ARRAY);
120 GetValueIfFindKey<std::string>(jsonObject, jsonObjectEnd,
121 SHARED_MODULE_INFO_DESCRIPTION,
122 sharedModuleInfo.description, JsonType::STRING, false, parseResult,
123 ArrayType::NOT_ARRAY);
124 GetValueIfFindKey<uint32_t>(jsonObject, jsonObjectEnd,
125 SHARED_MODULE_INFO_DESCRIPTION_ID,
126 sharedModuleInfo.descriptionId, JsonType::NUMBER, false, parseResult,
127 ArrayType::NOT_ARRAY);
128 GetValueIfFindKey<bool>(jsonObject, jsonObjectEnd,
129 SHARED_MODULE_INFO_COMPRESS_NATIVE_LIBS,
130 sharedModuleInfo.compressNativeLibs, JsonType::BOOLEAN,
131 false, parseResult, ArrayType::NOT_ARRAY);
132 GetValueIfFindKey<std::string>(jsonObject, jsonObjectEnd,
133 SHARED_MODULE_INFO_HAP_PATH,
134 sharedModuleInfo.hapPath, JsonType::STRING, false, parseResult,
135 ArrayType::NOT_ARRAY);
136 GetValueIfFindKey<std::string>(jsonObject, jsonObjectEnd,
137 SHARED_MODULE_INFO_CPU_ABI,
138 sharedModuleInfo.cpuAbi, JsonType::STRING, false, parseResult,
139 ArrayType::NOT_ARRAY);
140 GetValueIfFindKey<std::string>(jsonObject, jsonObjectEnd,
141 SHARED_MODULE_INFO_NATIVE_LIBRARY_PATH,
142 sharedModuleInfo.nativeLibraryPath, JsonType::STRING, false, parseResult,
143 ArrayType::NOT_ARRAY);
144 GetValueIfFindKey<std::vector<std::string>>(jsonObject, jsonObjectEnd,
145 SHARED_MODULE_INFO_NATIVE_LIBRARY_FILE_NAMES,
146 sharedModuleInfo.nativeLibraryFileNames, JsonType::ARRAY, false, parseResult,
147 ArrayType::STRING);
148 if (parseResult != ERR_OK) {
149 APP_LOGE("read SharedModuleInfo error : %{public}d", parseResult);
150 }
151 }
152 } // AppExecFwk
153 } // OHOS