• 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 }
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