• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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