• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 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 "plugin_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 
25 namespace OHOS {
26 namespace AppExecFwk {
27 namespace {
28 const char* PLUGIN_MODULE_INFO_MODULENAME = "moduleName";
29 const char* PLUGIN_MODULE_INFO_DESCRIPTION = "description";
30 const char* PLUGIN_MODULE_INFO_DESCRIPTION_ID = "descriptionId";
31 const char* PLUGIN_MODULE_INFO_HAP_PATH = "hapPath";
32 const char* PLUGIN_MODULE_INFO_CPU_ABI = "cpuAbi";
33 const char* PLUGIN_MODULE_INFO_NATIVE_LIBRARY_PATH = "nativeLibraryPath";
34 const char* PLUGIN_MODULE_INFO_NATIVE_LIBRARY_FILE_NAMES = "nativeLibraryFileNames";
35 const char* PLUGIN_MODULE_INFO_COMPRESS_NATIVE_LIBS = "compressNativeLibs";
36 const char* PLUGIN_MODULE_INFO_IS_LIB_ISOLATED = "isLibIsolated";
37 const char* PLUGIN_MODULE_INFO_PACKAGE_NAME = "packageName";
38 const char* PLUGIN_MODULE_INFO_COMPILE_MODE = "compileMode";
39 }
40 
ReadFromParcel(Parcel & parcel)41 bool PluginModuleInfo::ReadFromParcel(Parcel &parcel)
42 {
43     compressNativeLibs = parcel.ReadBool();
44     isLibIsolated = parcel.ReadBool();
45     descriptionId = parcel.ReadUint32();
46     moduleName = parcel.ReadString();
47     description = parcel.ReadString();
48     hapPath = parcel.ReadString();
49     cpuAbi = parcel.ReadString();
50     nativeLibraryPath = parcel.ReadString();
51     packageName = parcel.ReadString();
52     compileMode = parcel.ReadString();
53     int32_t nativeLibraryFileNamesSize;
54     READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, nativeLibraryFileNamesSize);
55     CONTAINER_SECURITY_VERIFY(parcel, nativeLibraryFileNamesSize, &nativeLibraryFileNames);
56     for (int32_t i = 0; i < nativeLibraryFileNamesSize; ++i) {
57         nativeLibraryFileNames.emplace_back(parcel.ReadString());
58     }
59     return true;
60 }
61 
Marshalling(Parcel & parcel) const62 bool PluginModuleInfo::Marshalling(Parcel &parcel) const
63 {
64     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, compressNativeLibs);
65     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, isLibIsolated);
66     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Uint32, parcel, descriptionId);
67     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String, parcel, moduleName);
68     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String, parcel, description);
69     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String, parcel, hapPath);
70     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String, parcel, cpuAbi);
71     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String, parcel, nativeLibraryPath);
72     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String, parcel, packageName);
73     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String, parcel, compileMode);
74     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, nativeLibraryFileNames.size());
75     for (auto &fileName : nativeLibraryFileNames) {
76         WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String, parcel, fileName);
77     }
78     return true;
79 }
80 
Unmarshalling(Parcel & parcel)81 PluginModuleInfo *PluginModuleInfo::Unmarshalling(Parcel &parcel)
82 {
83     PluginModuleInfo *info = new (std::nothrow) PluginModuleInfo();
84     if (info && !info->ReadFromParcel(parcel)) {
85         APP_LOGW("read from parcel failed");
86         delete info;
87         info = nullptr;
88     }
89     return info;
90 }
91 
to_json(nlohmann::json & jsonObject,const PluginModuleInfo & pluginModuleInfo)92 void to_json(nlohmann::json &jsonObject, const PluginModuleInfo &pluginModuleInfo)
93 {
94     jsonObject = nlohmann::json {
95         {PLUGIN_MODULE_INFO_MODULENAME, pluginModuleInfo.moduleName},
96         {PLUGIN_MODULE_INFO_DESCRIPTION, pluginModuleInfo.description},
97         {PLUGIN_MODULE_INFO_DESCRIPTION_ID, pluginModuleInfo.descriptionId},
98         {PLUGIN_MODULE_INFO_HAP_PATH, pluginModuleInfo.hapPath},
99         {PLUGIN_MODULE_INFO_CPU_ABI, pluginModuleInfo.cpuAbi},
100         {PLUGIN_MODULE_INFO_NATIVE_LIBRARY_PATH, pluginModuleInfo.nativeLibraryPath},
101         {PLUGIN_MODULE_INFO_NATIVE_LIBRARY_FILE_NAMES, pluginModuleInfo.nativeLibraryFileNames},
102         {PLUGIN_MODULE_INFO_COMPRESS_NATIVE_LIBS, pluginModuleInfo.compressNativeLibs},
103         {PLUGIN_MODULE_INFO_IS_LIB_ISOLATED, pluginModuleInfo.isLibIsolated},
104         {PLUGIN_MODULE_INFO_PACKAGE_NAME, pluginModuleInfo.packageName},
105         {PLUGIN_MODULE_INFO_COMPILE_MODE, pluginModuleInfo.compileMode}
106     };
107 }
108 
from_json(const nlohmann::json & jsonObject,PluginModuleInfo & pluginModuleInfo)109 void from_json(const nlohmann::json &jsonObject, PluginModuleInfo &pluginModuleInfo)
110 {
111     const auto &jsonObjectEnd = jsonObject.end();
112     int32_t parseResult = ERR_OK;
113     BMSJsonUtil::GetStrValueIfFindKey(jsonObject, jsonObjectEnd,
114         PLUGIN_MODULE_INFO_MODULENAME,
115         pluginModuleInfo.moduleName, false, parseResult);
116     BMSJsonUtil::GetStrValueIfFindKey(jsonObject, jsonObjectEnd,
117         PLUGIN_MODULE_INFO_DESCRIPTION,
118         pluginModuleInfo.description, false, parseResult);
119     GetValueIfFindKey<uint32_t>(jsonObject, jsonObjectEnd,
120         PLUGIN_MODULE_INFO_DESCRIPTION_ID,
121         pluginModuleInfo.descriptionId, JsonType::NUMBER, false, parseResult,
122         ArrayType::NOT_ARRAY);
123     BMSJsonUtil::GetStrValueIfFindKey(jsonObject, jsonObjectEnd,
124         PLUGIN_MODULE_INFO_HAP_PATH,
125         pluginModuleInfo.hapPath, false, parseResult);
126     BMSJsonUtil::GetStrValueIfFindKey(jsonObject, jsonObjectEnd,
127         PLUGIN_MODULE_INFO_CPU_ABI,
128         pluginModuleInfo.cpuAbi, false, parseResult);
129     BMSJsonUtil::GetStrValueIfFindKey(jsonObject, jsonObjectEnd,
130         PLUGIN_MODULE_INFO_NATIVE_LIBRARY_PATH,
131         pluginModuleInfo.nativeLibraryPath, false, parseResult);
132     GetValueIfFindKey<std::vector<std::string>>(jsonObject, jsonObjectEnd,
133         PLUGIN_MODULE_INFO_NATIVE_LIBRARY_FILE_NAMES,
134         pluginModuleInfo.nativeLibraryFileNames, JsonType::ARRAY, false, parseResult,
135         ArrayType::STRING);
136     BMSJsonUtil::GetBoolValueIfFindKey(jsonObject, jsonObjectEnd,
137         PLUGIN_MODULE_INFO_COMPRESS_NATIVE_LIBS,
138         pluginModuleInfo.compressNativeLibs, false, parseResult);
139     BMSJsonUtil::GetBoolValueIfFindKey(jsonObject, jsonObjectEnd,
140         PLUGIN_MODULE_INFO_IS_LIB_ISOLATED,
141         pluginModuleInfo.isLibIsolated, false, parseResult);
142     BMSJsonUtil::GetStrValueIfFindKey(jsonObject, jsonObjectEnd,
143         PLUGIN_MODULE_INFO_PACKAGE_NAME,
144         pluginModuleInfo.packageName, false, parseResult);
145     BMSJsonUtil::GetStrValueIfFindKey(jsonObject, jsonObjectEnd,
146         PLUGIN_MODULE_INFO_COMPILE_MODE,
147         pluginModuleInfo.compileMode, false, parseResult);
148     if (parseResult != ERR_OK) {
149         APP_LOGE("read pluginModuleInfo error : %{public}d", parseResult);
150     }
151 }
152 } // AppExecFwk
153 } // OHOS
154