1 /*
2 * Copyright (c) 2023-2024 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 <dlfcn.h>
17 #include "telephony_ext_wrapper.h"
18 #include "telephony_log_wrapper.h"
19
20 namespace OHOS {
21 namespace Telephony {
22 namespace {
23 const std::string TELEPHONY_EXT_WRAPPER_PATH = "libtelephony_ext_service.z.so";
24 const std::string TELEPHONY_VSIM_WRAPPER_PATH = "libtel_vsim_symbol.z.so";
25 const std::string TELEPHONY_DYNAMIC_LOAD_WRAPPER_PATH = "libtel_dynamic_load_service.z.so";
26 } // namespace
27
TelephonyExtWrapper()28 TelephonyExtWrapper::TelephonyExtWrapper() {}
~TelephonyExtWrapper()29 TelephonyExtWrapper::~TelephonyExtWrapper()
30 {
31 TELEPHONY_LOGD("TelephonyExtWrapper::~TelephonyExtWrapper() start");
32 if (telephonyExtWrapperHandle_ != nullptr) {
33 dlclose(telephonyExtWrapperHandle_);
34 telephonyExtWrapperHandle_ = nullptr;
35 }
36 if (telephonyVSimWrapperHandle_ != nullptr) {
37 dlclose(telephonyVSimWrapperHandle_);
38 telephonyVSimWrapperHandle_ = nullptr;
39 }
40 if (telephonyDynamicLoadWrapperHandle_ != nullptr) {
41 dlclose(telephonyDynamicLoadWrapperHandle_);
42 telephonyDynamicLoadWrapperHandle_ = nullptr;
43 }
44 }
45
InitTelephonyExtWrapper()46 void TelephonyExtWrapper::InitTelephonyExtWrapper()
47 {
48 TELEPHONY_LOGD("TelephonyExtWrapper::InitTelephonyExtWrapper() start");
49 InitTelephonyExtWrapperForDynamicLoad();
50 telephonyExtWrapperHandle_ = dlopen(TELEPHONY_EXT_WRAPPER_PATH.c_str(), RTLD_NOW);
51 if (telephonyExtWrapperHandle_ == nullptr) {
52 TELEPHONY_LOGE("libtelephony_ext_service.z.so was not loaded, error: %{public}s", dlerror());
53 return;
54 }
55 InitTelephonyExtWrapperForSim();
56 InitTelephonyExtWrapperForNetWork();
57 InitTelephonyExtWrapperForVoiceMail();
58 InitTelephonyExtWrapperForCust();
59 InitTelephonyExtWrapperForVSim();
60 InitTelephonyExtWrapperForOpkeyVersion();
61 InitTelephonyExtWrapperForOpnameVersion();
62 TELEPHONY_LOGI("telephony ext wrapper init success");
63 }
64
InitTelephonyExtWrapperForNetWork()65 void TelephonyExtWrapper::InitTelephonyExtWrapperForNetWork()
66 {
67 checkOpcVersionIsUpdate_ = (CHECK_OPC_VERSION_IS_UPDATE)dlsym(telephonyExtWrapperHandle_,
68 "CheckOpcVersionIsUpdate");
69 updateOpcVersion_ = (UPDATE_OPC_VERSION)dlsym(telephonyExtWrapperHandle_, "UpdateOpcVersion");
70 getCellInfoList_ = (GET_CELL_INFO_LIST)dlsym(telephonyExtWrapperHandle_, "GetCellInfoListExt");
71 getRadioTechExt_ = (GET_RADIO_TECH_EXT)dlsym(telephonyExtWrapperHandle_, "GetRadioTechExt");
72 getNrOptionModeExt_ = (GET_NR_OPTION_MODE_EXT)dlsym(telephonyExtWrapperHandle_, "GetNrOptionModeExt");
73 getNrOptionModeExtend_ = (GET_NR_OPTION_MODE_EXTEND)dlsym(telephonyExtWrapperHandle_, "GetNrOptionModeExtend");
74 getPreferredNetworkExt_ = (GET_PREFERRED_NETWORK_EXT)dlsym(telephonyExtWrapperHandle_, "GetPreferredNetworkExt");
75 isChipsetNetworkExtSupported_ = (IS_CHIPSET_NETWORK_EXT_SUPPORTED)dlsym(telephonyExtWrapperHandle_,
76 "IsChipsetNetworkExtSupported");
77 isNrSupportedNative_ = (IS_NR_SUPPORTED_NATIVE)dlsym(telephonyExtWrapperHandle_, "IsNrSupportedNativeExt");
78 getSignalInfoListExt_ = (GET_SIGNAL_INFO_LIST_EXT)dlsym(telephonyExtWrapperHandle_, "GetSignalInfoListExt");
79 getNetworkCapabilityExt_ = (GET_NETWORK_CAPABILITY_EXT)dlsym(telephonyExtWrapperHandle_, "GetNetworkCapabilityExt");
80 onGetNetworkSearchInformationExt_ = (ON_GET_NETWORK_SEARCH_INFORMATION_EXT)dlsym(telephonyExtWrapperHandle_,
81 "OnGetNetworkSearchInformationExt");
82 getNetworkStatusExt_ = (GET_NETWORK_STATUS_EXT)dlsym(telephonyExtWrapperHandle_, "GetNetworkStatusExt");
83 if (checkOpcVersionIsUpdate_ == nullptr || updateOpcVersion_ == nullptr || getCellInfoList_ == nullptr ||
84 getRadioTechExt_ == nullptr || getNrOptionModeExt_ == nullptr || getSignalInfoListExt_ == nullptr ||
85 getNetworkCapabilityExt_ == nullptr || onGetNetworkSearchInformationExt_ == nullptr ||
86 getNetworkStatusExt_ == nullptr || isNrSupportedNative_ == nullptr ||
87 getNrOptionModeExtend_ == nullptr || getPreferredNetworkExt_ == nullptr ||
88 isChipsetNetworkExtSupported_ == nullptr) {
89 TELEPHONY_LOGE("telephony ext wrapper symbol failed, error: %{public}s", dlerror());
90 }
91 updateCountryCodeExt_ = (UPDATE_COUNTRY_CODE_EXT)dlsym(telephonyExtWrapperHandle_, "UpdateCountryCodeExt");
92 updateTimeZoneOffsetExt_ =
93 (UPDATE_TIME_ZONE_OFFSET_EXT)dlsym(telephonyExtWrapperHandle_, "UpdateTimeZoneOffsetExt");
94 if (updateCountryCodeExt_ == nullptr || updateTimeZoneOffsetExt_ == nullptr) {
95 TELEPHONY_LOGE("telephony ext wrapper symbol failed, error: %{public}s", dlerror());
96 }
97
98 sortSignalInfoListExt_ = (SORT_SIGNAL_INFO_LIST_EXT)dlsym(telephonyExtWrapperHandle_, "SortSignalInfoListExt");
99 if (sortSignalInfoListExt_ == nullptr) {
100 TELEPHONY_LOGE("telephony ext wrapper symbol failed, error: %{public}s", dlerror());
101 }
102 updateNsaStateExt_ = (UPDATE_NSA_STATE_EXT)dlsym(telephonyExtWrapperHandle_, "UpdateNsaStateExt");
103 if (updateNsaStateExt_ == nullptr) {
104 TELEPHONY_LOGE("telephony ext wrapper symbol failed, error: %{public}s", dlerror());
105 }
106 processSignalInfos_ = (PROCESS_SIGNAL_INFOS)dlsym(telephonyExtWrapperHandle_, "ProcessSignalInfosExt");
107 if (processSignalInfos_ == nullptr) {
108 TELEPHONY_LOGE("telephony ext wrapper symbol failed, error: %{public}s", dlerror());
109 }
110 processStateChangeExt_ = (PROCESS_STATE_CHANGE_EXT)dlsym(telephonyExtWrapperHandle_, "ProcessStateChangeExt");
111 if (processStateChangeExt_ == nullptr) {
112 TELEPHONY_LOGE("telephony ext wrapper symbol failed, error: %{public}s", dlerror());
113 }
114 InitTelephonyExtWrapperForNetWork1();
115 }
116
InitTelephonyExtWrapperForNetWork1()117 void TelephonyExtWrapper::InitTelephonyExtWrapperForNetWork1()
118 {
119 processOperatorName_ = (PROCESS_OPERATOR_NAME)dlsym(telephonyExtWrapperHandle_, "ProcessOperatorNameExt");
120 if (processOperatorName_ == nullptr) {
121 TELEPHONY_LOGE("telephony ext wrapper symbol failed, error: %{public}s", dlerror());
122 }
123 setNrOptionModeExt_ = (SET_NR_OPTION_MODE_EXT)dlsym(telephonyExtWrapperHandle_, "SetNrOptionModeExt");
124 if (setNrOptionModeExt_ == nullptr) {
125 TELEPHONY_LOGE("telephony ext wrapper symbol failed, error: %{public}s", dlerror());
126 }
127 updatePlmnExt_ = (UpdatePlmnExt)dlsym(telephonyExtWrapperHandle_, "UpdatePlmnExt");
128 isInModem2Optimization_ = (IsInModem2Optimization)dlsym(telephonyExtWrapperHandle_, "IsInModem2Optimization");
129 if (updatePlmnExt_ == nullptr || isInModem2Optimization_ == nullptr) {
130 TELEPHONY_LOGE("telephony ext wrapper symbol failed, error: %{public}s", dlerror());
131 }
132 }
133
InitTelephonyExtWrapperForVoiceMail()134 void TelephonyExtWrapper::InitTelephonyExtWrapperForVoiceMail()
135 {
136 getVoiceMailIccidParameter_ = (GET_VOICE_MAIL_ICCID_PARAMETER)dlsym(telephonyExtWrapperHandle_,
137 "GetVoiceMailIccidParameter");
138 setVoiceMailIccidParameter_ = (SET_VOICE_MAIL_ICCID_PARAMETER)dlsym(telephonyExtWrapperHandle_,
139 "SetVoiceMailIccidParameter");
140 initVoiceMailManagerExt_ = (INIT_VOICE_MAIL_MANAGER_EXT)dlsym(telephonyExtWrapperHandle_,
141 "InitVoiceMailManagerExt");
142 deinitVoiceMailManagerExt_ = (DEINIT_VOICE_MAIL_MANAGER_EXT)dlsym(telephonyExtWrapperHandle_,
143 "DeinitVoiceMailManagerExt");
144 resetVoiceMailLoadedFlagExt_ = (RESET_VOICE_MAIL_LOADED_FLAG_EXT)dlsym(telephonyExtWrapperHandle_,
145 "ResetVoiceMailLoadedFlagExt");
146 setVoiceMailOnSimExt_ = (SET_VOICE_MAIL_ON_SIM_EXT)dlsym(telephonyExtWrapperHandle_,
147 "SetVoiceMailOnSimExt");
148 getVoiceMailFixedExt_ = (GET_VOICE_MAIL_FIXED_EXT)dlsym(telephonyExtWrapperHandle_,
149 "GetVoiceMailFixedExt");
150 getVoiceMailNumberExt_ = (GET_VOICE_MAIL_NUMBER_EXT)dlsym(telephonyExtWrapperHandle_,
151 "GetVoiceMailNumberExt");
152 getVoiceMailTagExt_ = (GET_VOICE_MAIL_TAG_EXT)dlsym(telephonyExtWrapperHandle_,
153 "GetVoiceMailTagExt");
154 resetVoiceMailManagerExt_ = (RESET_VOICE_MAIL_MANAGER_EXT)dlsym(telephonyExtWrapperHandle_,
155 "ResetVoiceMailManagerExt");
156 getNetworkStatusExt_ = (GET_NETWORK_STATUS_EXT)dlsym(telephonyExtWrapperHandle_, "GetNetworkStatusExt");
157 if (getVoiceMailIccidParameter_ == nullptr || setVoiceMailIccidParameter_ == nullptr ||
158 initVoiceMailManagerExt_ == nullptr || deinitVoiceMailManagerExt_ == nullptr ||
159 resetVoiceMailLoadedFlagExt_ == nullptr || setVoiceMailOnSimExt_ == nullptr ||
160 getVoiceMailFixedExt_ == nullptr || getVoiceMailNumberExt_ == nullptr ||
161 getVoiceMailTagExt_ == nullptr || resetVoiceMailManagerExt_ == nullptr ||
162 getNetworkStatusExt_ == nullptr) {
163 TELEPHONY_LOGE("telephony ext wrapper symbol failed, error: %{public}s", dlerror());
164 return;
165 }
166 }
167
InitTelephonyExtWrapperForCust()168 void TelephonyExtWrapper::InitTelephonyExtWrapperForCust()
169 {
170 updateNetworkStateExt_ = (UPDATE_NETWORK_STATE_EXT)dlsym(telephonyExtWrapperHandle_, "UpdateNetworkStateExt");
171 if (updateNetworkStateExt_ == nullptr) {
172 TELEPHONY_LOGE("telephony ext wrapper symbol failed, error: %{public}s", dlerror());
173 }
174 publishSpnInfoChangedExt_ = (PUBLISH_SPN_INFO_CHANGED_EXT)dlsym(telephonyExtWrapperHandle_,
175 "PublishSpnInfoChangedExt");
176 if (publishSpnInfoChangedExt_ == nullptr) {
177 TELEPHONY_LOGE("telephony ext wrapper symbol failed, error: %{public}s", dlerror());
178 }
179 updateOperatorNameParamsExt_ = (UPDATE_OPERATOR_NAME_PARAMS)dlsym(telephonyExtWrapperHandle_,
180 "UpdateOperatorNameParamsExt");
181 if (updateOperatorNameParamsExt_ == nullptr) {
182 TELEPHONY_LOGE("telephony ext wrapper symbol failed, error: %{public}s", dlerror());
183 }
184 InitTelephonyExtWrapperForApnCust();
185 }
186
InitTelephonyExtWrapperForVSim()187 void TelephonyExtWrapper::InitTelephonyExtWrapperForVSim()
188 {
189 TELEPHONY_LOGI("[VSIM] telephony ext wrapper init begin");
190 telephonyVSimWrapperHandle_ = dlopen(TELEPHONY_VSIM_WRAPPER_PATH.c_str(), RTLD_NOW);
191 if (telephonyVSimWrapperHandle_ == nullptr) {
192 TELEPHONY_LOGE("libtel_vsim_symbol.z.so was not loaded, error: %{public}s", dlerror());
193 return;
194 }
195 isVSimInStatus_ = (IS_VSIM_IN_STATUS) dlsym(telephonyVSimWrapperHandle_, "IsVSimInStatus");
196 getVSimSlotId_ = (GET_VSIM_SLOT_ID) dlsym(telephonyVSimWrapperHandle_, "GetVSimSlotId");
197 onAllFilesFetchedExt_ = (ON_ALL_FILES_FETCHED_EXT) dlsym(telephonyVSimWrapperHandle_, "OnAllFilesFetchedExt");
198 putVSimExtraInfo_ = (PUT_VSIM_EXTRA_INFO) dlsym(telephonyVSimWrapperHandle_, "PutVSimExtraInfo");
199 changeSpnAndRuleExt_ = (CHANGE_SPN_AND_RULE_EXT) dlsym(telephonyVSimWrapperHandle_, "ChangeSpnAndRuleExt");
200 getVSimCardState_ = (GET_VSIM_CARD_STATE) dlsym(telephonyVSimWrapperHandle_, "GetVSimCardState");
201 getSimIdExt_ = (GET_SIM_ID_EXT) dlsym(telephonyVSimWrapperHandle_, "GetSimIdExt");
202 getSlotIdExt_ = (GET_SLOT_ID_EXT) dlsym(telephonyVSimWrapperHandle_, "GetSlotIdExt");
203 isHandleVSim_ = (IS_HANDLE_VSIM) dlsym(telephonyVSimWrapperHandle_, "IsHandleVSim");
204 isVSimEnabled_ = (IS_VSIM_ENABLED) dlsym(telephonyVSimWrapperHandle_, "IsVSimEnabled");
205 updateSubState_ = (UPDATE_SUB_STATE) dlsym(telephonyVSimWrapperHandle_, "UpdateSubState");
206 isInEnaDisableVSim_ = (IS_IN_ENABLE_DISABLE_VSIM) dlsym(telephonyVSimWrapperHandle_, "IsInEnableDisableVSim");
207
208 bool hasFuncNull = (isVSimInStatus_ == nullptr || getVSimSlotId_ == nullptr || onAllFilesFetchedExt_ == nullptr ||
209 putVSimExtraInfo_ == nullptr || changeSpnAndRuleExt_ == nullptr || getVSimCardState_ == nullptr ||
210 getSimIdExt_ == nullptr || getSlotIdExt_ == nullptr || isHandleVSim_ == nullptr || isVSimEnabled_ == nullptr ||
211 updateSubState_ == nullptr || isInEnaDisableVSim_ == nullptr);
212 if (hasFuncNull) {
213 TELEPHONY_LOGE("[VSIM] telephony ext wrapper symbol failed, error: %{public}s", dlerror());
214 return;
215 }
216 TELEPHONY_LOGI("[VSIM] telephony ext wrapper init success");
217 }
218
InitTelephonyExtWrapperForApnCust()219 void TelephonyExtWrapper::InitTelephonyExtWrapperForApnCust()
220 {
221 isAllowedInsertApn_ = (IS_ALLOWED_INSERT_APN)dlsym(telephonyExtWrapperHandle_, "IsAllowedInsertApn");
222 getTargetOpkey_ = (GET_TARGET_OPKEY)dlsym(telephonyExtWrapperHandle_, "GetTargetOpkey");
223 if (isAllowedInsertApn_ == nullptr || getTargetOpkey_ == nullptr) {
224 TELEPHONY_LOGE("telephony ext wrapper symbol failed, error: %{public}s", dlerror());
225 }
226 }
227
InitTelephonyExtWrapperForSim()228 void TelephonyExtWrapper::InitTelephonyExtWrapperForSim()
229 {
230 TELEPHONY_LOGI("[SIM] telephony ext wrapper init begin");
231 createIccFileExt_ = (CREATE_ICC_FILE_EXT)dlsym(telephonyExtWrapperHandle_, "CreateIccFileExt");
232 getRoamingBrokerNumeric_ = (GET_ROAMINGBROKER_NUMERIC)dlsym(telephonyExtWrapperHandle_, "GetRoamingBrokerNumeric");
233 getRoamingBrokerImsi_ = (GET_ROAMINGBROKER_IMSI)dlsym(telephonyExtWrapperHandle_, "GetRoamingBrokerImsi");
234 sendEvent_ = (SEND_EVENT)dlsym(telephonyExtWrapperHandle_, "SendEvent");
235 initBip_ = (INIT_BIP)dlsym(telephonyExtWrapperHandle_, "InitBip");
236 updateHotPlugCardState_ = (UpdateHotplugCardState)dlsym(telephonyExtWrapperHandle_, "UpdateHotPlugCardState");
237 cacheAssetPinForUpgrade_ = (CacheAssetPinForUpgrade)dlsym(telephonyExtWrapperHandle_, "CacheAssetPinForUpgrade");
238 bool hasFuncNull = (createIccFileExt_ == nullptr || getRoamingBrokerNumeric_ == nullptr || initBip_ == nullptr ||
239 getRoamingBrokerImsi_ == nullptr || sendEvent_ == nullptr ||
240 updateHotPlugCardState_ == nullptr || cacheAssetPinForUpgrade_ == nullptr);
241 if (hasFuncNull) {
242 TELEPHONY_LOGE("[SIM]telephony ext wrapper symbol failed, error: %{public}s", dlerror());
243 }
244 }
245
InitTelephonyExtWrapperForOpkeyVersion()246 void TelephonyExtWrapper::InitTelephonyExtWrapperForOpkeyVersion()
247 {
248 getOpkeyVersion_ = (GET_OPKEY_VERSION)dlsym(telephonyExtWrapperHandle_, "GetOpkeyVersion");
249 if (getOpkeyVersion_ == nullptr) {
250 TELEPHONY_LOGE("[OpkeyVersion]telephony ext wrapper symbol failed, error: %{public}s", dlerror());
251 return;
252 }
253 }
254
InitTelephonyExtWrapperForOpnameVersion()255 void TelephonyExtWrapper::InitTelephonyExtWrapperForOpnameVersion()
256 {
257 getOpnameVersion_ = (GetOpnameVersion)dlsym(telephonyExtWrapperHandle_, "GetOpnameVersion");
258 if (getOpnameVersion_ == nullptr) {
259 TELEPHONY_LOGE("[OpnameVersion]telephony ext wrapper symbol failed, error: %{public}s", dlerror());
260 return;
261 }
262 }
263
InitTelephonyExtWrapperForDynamicLoad()264 void TelephonyExtWrapper::InitTelephonyExtWrapperForDynamicLoad()
265 {
266 TELEPHONY_LOGI("[DynamicLoad]telephony ext wrapper dynamic load init begin");
267 telephonyDynamicLoadWrapperHandle_ = dlopen(TELEPHONY_DYNAMIC_LOAD_WRAPPER_PATH.c_str(), RTLD_NOW);
268 if (telephonyDynamicLoadWrapperHandle_ == nullptr) {
269 TELEPHONY_LOGE("[DynamicLoad] libtel_dynamic_load_service.z.so was not loaded, error: %{public}s", dlerror());
270 return;
271 }
272 dynamicLoadInit_ = (DynamicLoadInit)dlsym(telephonyDynamicLoadWrapperHandle_, "InitDynamicLoadHandler");
273 if (dynamicLoadInit_ == nullptr) {
274 TELEPHONY_LOGE("[DynamicLoad] telephony ext wrapper symbol failed, error: %{public}s", dlerror());
275 return;
276 }
277 dynamicLoadInit_();
278 TELEPHONY_LOGI("[DynamicLoad]telephony ext wrapper dynamic load init success");
279 }
280
DeInitTelephonyExtWrapper()281 void TelephonyExtWrapper::DeInitTelephonyExtWrapper()
282 {
283 if (telephonyDynamicLoadWrapperHandle_ == nullptr) {
284 return;
285 }
286 dynamicLoadDeInit_ = (DynamicLoadInit)dlsym(telephonyDynamicLoadWrapperHandle_, "DeInitDynamicLoadHandler");
287 if (dynamicLoadDeInit_ == nullptr) {
288 TELEPHONY_LOGE("[DynamicLoad] telephony ext wrapper symbol failed, error: %{public}s", dlerror());
289 return;
290 }
291 dynamicLoadDeInit_();
292 TELEPHONY_LOGI("DeInitTelephonyExtWrapper success");
293 }
294 } // namespace Telephony
295 } // namespace OHOS
296