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 }
128
InitTelephonyExtWrapperForVoiceMail()129 void TelephonyExtWrapper::InitTelephonyExtWrapperForVoiceMail()
130 {
131 getVoiceMailIccidParameter_ = (GET_VOICE_MAIL_ICCID_PARAMETER)dlsym(telephonyExtWrapperHandle_,
132 "GetVoiceMailIccidParameter");
133 setVoiceMailIccidParameter_ = (SET_VOICE_MAIL_ICCID_PARAMETER)dlsym(telephonyExtWrapperHandle_,
134 "SetVoiceMailIccidParameter");
135 initVoiceMailManagerExt_ = (INIT_VOICE_MAIL_MANAGER_EXT)dlsym(telephonyExtWrapperHandle_,
136 "InitVoiceMailManagerExt");
137 deinitVoiceMailManagerExt_ = (DEINIT_VOICE_MAIL_MANAGER_EXT)dlsym(telephonyExtWrapperHandle_,
138 "DeinitVoiceMailManagerExt");
139 resetVoiceMailLoadedFlagExt_ = (RESET_VOICE_MAIL_LOADED_FLAG_EXT)dlsym(telephonyExtWrapperHandle_,
140 "ResetVoiceMailLoadedFlagExt");
141 setVoiceMailOnSimExt_ = (SET_VOICE_MAIL_ON_SIM_EXT)dlsym(telephonyExtWrapperHandle_,
142 "SetVoiceMailOnSimExt");
143 getVoiceMailFixedExt_ = (GET_VOICE_MAIL_FIXED_EXT)dlsym(telephonyExtWrapperHandle_,
144 "GetVoiceMailFixedExt");
145 getVoiceMailNumberExt_ = (GET_VOICE_MAIL_NUMBER_EXT)dlsym(telephonyExtWrapperHandle_,
146 "GetVoiceMailNumberExt");
147 getVoiceMailTagExt_ = (GET_VOICE_MAIL_TAG_EXT)dlsym(telephonyExtWrapperHandle_,
148 "GetVoiceMailTagExt");
149 resetVoiceMailManagerExt_ = (RESET_VOICE_MAIL_MANAGER_EXT)dlsym(telephonyExtWrapperHandle_,
150 "ResetVoiceMailManagerExt");
151 getNetworkStatusExt_ = (GET_NETWORK_STATUS_EXT)dlsym(telephonyExtWrapperHandle_, "GetNetworkStatusExt");
152 if (getVoiceMailIccidParameter_ == nullptr || setVoiceMailIccidParameter_ == nullptr ||
153 initVoiceMailManagerExt_ == nullptr || deinitVoiceMailManagerExt_ == nullptr ||
154 resetVoiceMailLoadedFlagExt_ == nullptr || setVoiceMailOnSimExt_ == nullptr ||
155 getVoiceMailFixedExt_ == nullptr || getVoiceMailNumberExt_ == nullptr ||
156 getVoiceMailTagExt_ == nullptr || resetVoiceMailManagerExt_ == nullptr ||
157 getNetworkStatusExt_ == nullptr) {
158 TELEPHONY_LOGE("telephony ext wrapper symbol failed, error: %{public}s", dlerror());
159 return;
160 }
161 }
162
InitTelephonyExtWrapperForCust()163 void TelephonyExtWrapper::InitTelephonyExtWrapperForCust()
164 {
165 updateNetworkStateExt_ = (UPDATE_NETWORK_STATE_EXT)dlsym(telephonyExtWrapperHandle_, "UpdateNetworkStateExt");
166 if (updateNetworkStateExt_ == nullptr) {
167 TELEPHONY_LOGE("telephony ext wrapper symbol failed, error: %{public}s", dlerror());
168 }
169 publishSpnInfoChangedExt_ = (PUBLISH_SPN_INFO_CHANGED_EXT)dlsym(telephonyExtWrapperHandle_,
170 "PublishSpnInfoChangedExt");
171 if (publishSpnInfoChangedExt_ == nullptr) {
172 TELEPHONY_LOGE("telephony ext wrapper symbol failed, error: %{public}s", dlerror());
173 }
174 updateOperatorNameParamsExt_ = (UPDATE_OPERATOR_NAME_PARAMS)dlsym(telephonyExtWrapperHandle_,
175 "UpdateOperatorNameParamsExt");
176 if (updateOperatorNameParamsExt_ == nullptr) {
177 TELEPHONY_LOGE("telephony ext wrapper symbol failed, error: %{public}s", dlerror());
178 }
179 InitTelephonyExtWrapperForApnCust();
180 }
181
InitTelephonyExtWrapperForVSim()182 void TelephonyExtWrapper::InitTelephonyExtWrapperForVSim()
183 {
184 TELEPHONY_LOGI("[VSIM] telephony ext wrapper init begin");
185 telephonyVSimWrapperHandle_ = dlopen(TELEPHONY_VSIM_WRAPPER_PATH.c_str(), RTLD_NOW);
186 if (telephonyVSimWrapperHandle_ == nullptr) {
187 TELEPHONY_LOGE("libtel_vsim_symbol.z.so was not loaded, error: %{public}s", dlerror());
188 return;
189 }
190 isVSimInStatus_ = (IS_VSIM_IN_STATUS) dlsym(telephonyVSimWrapperHandle_, "IsVSimInStatus");
191 getVSimSlotId_ = (GET_VSIM_SLOT_ID) dlsym(telephonyVSimWrapperHandle_, "GetVSimSlotId");
192 onAllFilesFetchedExt_ = (ON_ALL_FILES_FETCHED_EXT) dlsym(telephonyVSimWrapperHandle_, "OnAllFilesFetchedExt");
193 putVSimExtraInfo_ = (PUT_VSIM_EXTRA_INFO) dlsym(telephonyVSimWrapperHandle_, "PutVSimExtraInfo");
194 changeSpnAndRuleExt_ = (CHANGE_SPN_AND_RULE_EXT) dlsym(telephonyVSimWrapperHandle_, "ChangeSpnAndRuleExt");
195 getVSimCardState_ = (GET_VSIM_CARD_STATE) dlsym(telephonyVSimWrapperHandle_, "GetVSimCardState");
196 getSimIdExt_ = (GET_SIM_ID_EXT) dlsym(telephonyVSimWrapperHandle_, "GetSimIdExt");
197 getSlotIdExt_ = (GET_SLOT_ID_EXT) dlsym(telephonyVSimWrapperHandle_, "GetSlotIdExt");
198 isHandleVSim_ = (IS_HANDLE_VSIM) dlsym(telephonyVSimWrapperHandle_, "IsHandleVSim");
199 isVSimEnabled_ = (IS_VSIM_ENABLED) dlsym(telephonyVSimWrapperHandle_, "IsVSimEnabled");
200 updateSubState_ = (UPDATE_SUB_STATE) dlsym(telephonyVSimWrapperHandle_, "UpdateSubState");
201 isInEnaDisableVSim_ = (IS_IN_ENABLE_DISABLE_VSIM) dlsym(telephonyVSimWrapperHandle_, "IsInEnableDisableVSim");
202
203 bool hasFuncNull = (isVSimInStatus_ == nullptr || getVSimSlotId_ == nullptr || onAllFilesFetchedExt_ == nullptr ||
204 putVSimExtraInfo_ == nullptr || changeSpnAndRuleExt_ == nullptr || getVSimCardState_ == nullptr ||
205 getSimIdExt_ == nullptr || getSlotIdExt_ == nullptr || isHandleVSim_ == nullptr || isVSimEnabled_ == nullptr ||
206 updateSubState_ == nullptr || isInEnaDisableVSim_ == nullptr);
207 if (hasFuncNull) {
208 TELEPHONY_LOGE("[VSIM] telephony ext wrapper symbol failed, error: %{public}s", dlerror());
209 return;
210 }
211 TELEPHONY_LOGI("[VSIM] telephony ext wrapper init success");
212 }
213
InitTelephonyExtWrapperForApnCust()214 void TelephonyExtWrapper::InitTelephonyExtWrapperForApnCust()
215 {
216 isAllowedInsertApn_ = (IS_ALLOWED_INSERT_APN)dlsym(telephonyExtWrapperHandle_, "IsAllowedInsertApn");
217 getTargetOpkey_ = (GET_TARGET_OPKEY)dlsym(telephonyExtWrapperHandle_, "GetTargetOpkey");
218 if (isAllowedInsertApn_ == nullptr || getTargetOpkey_ == nullptr) {
219 TELEPHONY_LOGE("telephony ext wrapper symbol failed, error: %{public}s", dlerror());
220 }
221 }
222
InitTelephonyExtWrapperForSim()223 void TelephonyExtWrapper::InitTelephonyExtWrapperForSim()
224 {
225 TELEPHONY_LOGI("[SIM] telephony ext wrapper init begin");
226 createIccFileExt_ = (CREATE_ICC_FILE_EXT)dlsym(telephonyExtWrapperHandle_, "CreateIccFileExt");
227 getRoamingBrokerNumeric_ = (GET_ROAMINGBROKER_NUMERIC)dlsym(telephonyExtWrapperHandle_, "GetRoamingBrokerNumeric");
228 getRoamingBrokerImsi_ = (GET_ROAMINGBROKER_IMSI)dlsym(telephonyExtWrapperHandle_, "GetRoamingBrokerImsi");
229 sendEvent_ = (SEND_EVENT) dlsym(telephonyExtWrapperHandle_, "SendEvent");
230 initBip_ = (INIT_BIP) dlsym(telephonyExtWrapperHandle_, "InitBip");
231 updateHotPlugCardState_ = (UpdateHotplugCardState)dlsym(telephonyExtWrapperHandle_, "UpdateHotPlugCardState");
232 bool hasFuncNull = (createIccFileExt_ == nullptr || getRoamingBrokerNumeric_ == nullptr || initBip_ == nullptr ||
233 getRoamingBrokerImsi_ == nullptr || sendEvent_ == nullptr || updateHotPlugCardState_ == nullptr);
234 if (hasFuncNull) {
235 TELEPHONY_LOGE("[SIM]telephony ext wrapper symbol failed, error: %{public}s", dlerror());
236 }
237 }
238
InitTelephonyExtWrapperForOpkeyVersion()239 void TelephonyExtWrapper::InitTelephonyExtWrapperForOpkeyVersion()
240 {
241 getOpkeyVersion_ = (GET_OPKEY_VERSION)dlsym(telephonyExtWrapperHandle_, "GetOpkeyVersion");
242 if (getOpkeyVersion_ == nullptr) {
243 TELEPHONY_LOGE("[OpkeyVersion]telephony ext wrapper symbol failed, error: %{public}s", dlerror());
244 return;
245 }
246 }
247
InitTelephonyExtWrapperForOpnameVersion()248 void TelephonyExtWrapper::InitTelephonyExtWrapperForOpnameVersion()
249 {
250 getOpnameVersion_ = (GetOpnameVersion)dlsym(telephonyExtWrapperHandle_, "GetOpnameVersion");
251 if (getOpnameVersion_ == nullptr) {
252 TELEPHONY_LOGE("[OpnameVersion]telephony ext wrapper symbol failed, error: %{public}s", dlerror());
253 return;
254 }
255 }
256
InitTelephonyExtWrapperForDynamicLoad()257 void TelephonyExtWrapper::InitTelephonyExtWrapperForDynamicLoad()
258 {
259 TELEPHONY_LOGI("[DynamicLoad]telephony ext wrapper dynamic load init begin");
260 telephonyDynamicLoadWrapperHandle_ = dlopen(TELEPHONY_DYNAMIC_LOAD_WRAPPER_PATH.c_str(), RTLD_NOW);
261 if (telephonyDynamicLoadWrapperHandle_ == nullptr) {
262 TELEPHONY_LOGE("[DynamicLoad] libtel_dynamic_load_service.z.so was not loaded, error: %{public}s", dlerror());
263 return;
264 }
265 dynamicLoadInit_ = (DynamicLoadInit)dlsym(telephonyDynamicLoadWrapperHandle_, "InitDynamicLoadHandler");
266 if (dynamicLoadInit_ == nullptr) {
267 TELEPHONY_LOGE("[DynamicLoad] telephony ext wrapper symbol failed, error: %{public}s", dlerror());
268 return;
269 }
270 dynamicLoadInit_();
271 TELEPHONY_LOGI("[DynamicLoad]telephony ext wrapper dynamic load init success");
272 }
273
DeInitTelephonyExtWrapper()274 void TelephonyExtWrapper::DeInitTelephonyExtWrapper()
275 {
276 if (telephonyDynamicLoadWrapperHandle_ == nullptr) {
277 return;
278 }
279 dynamicLoadDeInit_ = (DynamicLoadInit)dlsym(telephonyDynamicLoadWrapperHandle_, "DeInitDynamicLoadHandler");
280 if (dynamicLoadDeInit_ == nullptr) {
281 TELEPHONY_LOGE("[DynamicLoad] telephony ext wrapper symbol failed, error: %{public}s", dlerror());
282 return;
283 }
284 dynamicLoadDeInit_();
285 TELEPHONY_LOGI("DeInitTelephonyExtWrapper success");
286 }
287 } // namespace Telephony
288 } // namespace OHOS
289