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 } // namespace
26
TelephonyExtWrapper()27 TelephonyExtWrapper::TelephonyExtWrapper() {}
~TelephonyExtWrapper()28 TelephonyExtWrapper::~TelephonyExtWrapper()
29 {
30 TELEPHONY_LOGD("TelephonyExtWrapper::~TelephonyExtWrapper() start");
31 if (telephonyExtWrapperHandle_ != nullptr) {
32 dlclose(telephonyExtWrapperHandle_);
33 telephonyExtWrapperHandle_ = nullptr;
34 }
35 if (telephonyVSimWrapperHandle_ != nullptr) {
36 dlclose(telephonyVSimWrapperHandle_);
37 telephonyVSimWrapperHandle_ = nullptr;
38 }
39 }
40
InitTelephonyExtWrapper()41 void TelephonyExtWrapper::InitTelephonyExtWrapper()
42 {
43 TELEPHONY_LOGD("TelephonyExtWrapper::InitTelephonyExtWrapper() start");
44 telephonyExtWrapperHandle_ = dlopen(TELEPHONY_EXT_WRAPPER_PATH.c_str(), RTLD_NOW);
45 if (telephonyExtWrapperHandle_ == nullptr) {
46 TELEPHONY_LOGE("libtelephony_ext_service.z.so was not loaded, error: %{public}s", dlerror());
47 return;
48 }
49 InitTelephonyExtWrapperForSim();
50 InitTelephonyExtWrapperForNetWork();
51 InitTelephonyExtWrapperForVoiceMail();
52 InitTelephonyExtWrapperForCust();
53 InitTelephonyExtWrapperForVSim();
54 InitTelephonyExtWrapperForOpkeyVersion();
55 TELEPHONY_LOGI("telephony ext wrapper init success");
56 }
57
InitTelephonyExtWrapperForNetWork()58 void TelephonyExtWrapper::InitTelephonyExtWrapperForNetWork()
59 {
60 checkOpcVersionIsUpdate_ = (CHECK_OPC_VERSION_IS_UPDATE)dlsym(telephonyExtWrapperHandle_,
61 "CheckOpcVersionIsUpdate");
62 updateOpcVersion_ = (UPDATE_OPC_VERSION)dlsym(telephonyExtWrapperHandle_, "UpdateOpcVersion");
63 getCellInfoList_ = (GET_CELL_INFO_LIST)dlsym(telephonyExtWrapperHandle_, "GetCellInfoListExt");
64 getRadioTechExt_ = (GET_RADIO_TECH_EXT)dlsym(telephonyExtWrapperHandle_, "GetRadioTechExt");
65 getNrOptionModeExt_ = (GET_NR_OPTION_MODE_EXT)dlsym(telephonyExtWrapperHandle_, "GetNrOptionModeExt");
66 getNrOptionModeExtend_ = (GET_NR_OPTION_MODE_EXTEND)dlsym(telephonyExtWrapperHandle_, "GetNrOptionModeExtend");
67 getPreferredNetworkExt_ = (GET_PREFERRED_NETWORK_EXT)dlsym(telephonyExtWrapperHandle_, "GetPreferredNetworkExt");
68 isNrSupportedNative_ = (IS_NR_SUPPORTED_NATIVE)dlsym(telephonyExtWrapperHandle_, "IsNrSupportedNativeExt");
69 getSignalInfoListExt_ = (GET_SIGNAL_INFO_LIST_EXT)dlsym(telephonyExtWrapperHandle_, "GetSignalInfoListExt");
70 getNetworkCapabilityExt_ = (GET_NETWORK_CAPABILITY_EXT)dlsym(telephonyExtWrapperHandle_, "GetNetworkCapabilityExt");
71 onGetNetworkSearchInformationExt_ = (ON_GET_NETWORK_SEARCH_INFORMATION_EXT)dlsym(telephonyExtWrapperHandle_,
72 "OnGetNetworkSearchInformationExt");
73 getNetworkStatusExt_ = (GET_NETWORK_STATUS_EXT)dlsym(telephonyExtWrapperHandle_, "GetNetworkStatusExt");
74 if (checkOpcVersionIsUpdate_ == nullptr || updateOpcVersion_ == nullptr || getCellInfoList_ == nullptr ||
75 getRadioTechExt_ == nullptr || getNrOptionModeExt_ == nullptr || getSignalInfoListExt_ == nullptr ||
76 getNetworkCapabilityExt_ == nullptr || onGetNetworkSearchInformationExt_ == nullptr ||
77 getNetworkStatusExt_ == nullptr || isNrSupportedNative_ == nullptr ||
78 getNrOptionModeExtend_ == nullptr || getPreferredNetworkExt_ == nullptr) {
79 TELEPHONY_LOGE("telephony ext wrapper symbol failed, error: %{public}s", dlerror());
80 }
81 updateCountryCodeExt_ = (UPDATE_COUNTRY_CODE_EXT)dlsym(telephonyExtWrapperHandle_, "UpdateCountryCodeExt");
82 updateTimeZoneOffsetExt_ =
83 (UPDATE_TIME_ZONE_OFFSET_EXT)dlsym(telephonyExtWrapperHandle_, "UpdateTimeZoneOffsetExt");
84 if (updateCountryCodeExt_ == nullptr || updateTimeZoneOffsetExt_ == nullptr) {
85 TELEPHONY_LOGE("telephony ext wrapper symbol failed, error: %{public}s", dlerror());
86 }
87
88 sortSignalInfoListExt_ = (SORT_SIGNAL_INFO_LIST_EXT)dlsym(telephonyExtWrapperHandle_, "SortSignalInfoListExt");
89 if (sortSignalInfoListExt_ == nullptr) {
90 TELEPHONY_LOGE("telephony ext wrapper symbol failed, error: %{public}s", dlerror());
91 }
92 updateNsaStateExt_ = (UPDATE_NSA_STATE_EXT)dlsym(telephonyExtWrapperHandle_, "UpdateNsaStateExt");
93 if (updateNsaStateExt_ == nullptr) {
94 TELEPHONY_LOGE("telephony ext wrapper symbol failed, error: %{public}s", dlerror());
95 }
96 processSignalInfos_ = (PROCESS_SIGNAL_INFOS)dlsym(telephonyExtWrapperHandle_, "ProcessSignalInfosExt");
97 if (processSignalInfos_ == nullptr) {
98 TELEPHONY_LOGE("telephony ext wrapper symbol failed, error: %{public}s", dlerror());
99 }
100 processStateChangeExt_ = (PROCESS_STATE_CHANGE_EXT)dlsym(telephonyExtWrapperHandle_, "ProcessStateChangeExt");
101 if (processStateChangeExt_ == nullptr) {
102 TELEPHONY_LOGE("telephony ext wrapper symbol failed, error: %{public}s", dlerror());
103 }
104 publishSpnInfoChangedExt_ = (PUBLISH_SPN_INFO_CHANGED_EXT)dlsym(telephonyExtWrapperHandle_,
105 "PublishSpnInfoChangedExt");
106 if (publishSpnInfoChangedExt_ == nullptr) {
107 TELEPHONY_LOGE("telephony ext wrapper symbol failed, error: %{public}s", dlerror());
108 }
109 }
110
InitTelephonyExtWrapperForVoiceMail()111 void TelephonyExtWrapper::InitTelephonyExtWrapperForVoiceMail()
112 {
113 getVoiceMailIccidParameter_ = (GET_VOICE_MAIL_ICCID_PARAMETER)dlsym(telephonyExtWrapperHandle_,
114 "GetVoiceMailIccidParameter");
115 setVoiceMailIccidParameter_ = (SET_VOICE_MAIL_ICCID_PARAMETER)dlsym(telephonyExtWrapperHandle_,
116 "SetVoiceMailIccidParameter");
117 initVoiceMailManagerExt_ = (INIT_VOICE_MAIL_MANAGER_EXT)dlsym(telephonyExtWrapperHandle_,
118 "InitVoiceMailManagerExt");
119 deinitVoiceMailManagerExt_ = (DEINIT_VOICE_MAIL_MANAGER_EXT)dlsym(telephonyExtWrapperHandle_,
120 "DeinitVoiceMailManagerExt");
121 resetVoiceMailLoadedFlagExt_ = (RESET_VOICE_MAIL_LOADED_FLAG_EXT)dlsym(telephonyExtWrapperHandle_,
122 "ResetVoiceMailLoadedFlagExt");
123 setVoiceMailOnSimExt_ = (SET_VOICE_MAIL_ON_SIM_EXT)dlsym(telephonyExtWrapperHandle_,
124 "SetVoiceMailOnSimExt");
125 getVoiceMailFixedExt_ = (GET_VOICE_MAIL_FIXED_EXT)dlsym(telephonyExtWrapperHandle_,
126 "GetVoiceMailFixedExt");
127 getVoiceMailNumberExt_ = (GET_VOICE_MAIL_NUMBER_EXT)dlsym(telephonyExtWrapperHandle_,
128 "GetVoiceMailNumberExt");
129 getVoiceMailTagExt_ = (GET_VOICE_MAIL_TAG_EXT)dlsym(telephonyExtWrapperHandle_,
130 "GetVoiceMailTagExt");
131 resetVoiceMailManagerExt_ = (RESET_VOICE_MAIL_MANAGER_EXT)dlsym(telephonyExtWrapperHandle_,
132 "ResetVoiceMailManagerExt");
133 getNetworkStatusExt_ = (GET_NETWORK_STATUS_EXT)dlsym(telephonyExtWrapperHandle_, "GetNetworkStatusExt");
134 if (getVoiceMailIccidParameter_ == nullptr || setVoiceMailIccidParameter_ == nullptr ||
135 initVoiceMailManagerExt_ == nullptr || deinitVoiceMailManagerExt_ == nullptr ||
136 resetVoiceMailLoadedFlagExt_ == nullptr || setVoiceMailOnSimExt_ == nullptr ||
137 getVoiceMailFixedExt_ == nullptr || getVoiceMailNumberExt_ == nullptr ||
138 getVoiceMailTagExt_ == nullptr || resetVoiceMailManagerExt_ == nullptr ||
139 getNetworkStatusExt_ == nullptr) {
140 TELEPHONY_LOGE("telephony ext wrapper symbol failed, error: %{public}s", dlerror());
141 return;
142 }
143 }
144
InitTelephonyExtWrapperForCust()145 void TelephonyExtWrapper::InitTelephonyExtWrapperForCust()
146 {
147 updateNetworkStateExt_ = (UPDATE_NETWORK_STATE_EXT)dlsym(telephonyExtWrapperHandle_, "UpdateNetworkStateExt");
148 if (updateNetworkStateExt_ == nullptr) {
149 TELEPHONY_LOGE("telephony ext wrapper symbol failed, error: %{public}s", dlerror());
150 }
151 InitTelephonyExtWrapperForApnCust();
152 }
153
InitTelephonyExtWrapperForVSim()154 void TelephonyExtWrapper::InitTelephonyExtWrapperForVSim()
155 {
156 TELEPHONY_LOGI("[VSIM] telephony ext wrapper init begin");
157 telephonyVSimWrapperHandle_ = dlopen(TELEPHONY_VSIM_WRAPPER_PATH.c_str(), RTLD_NOW);
158 if (telephonyVSimWrapperHandle_ == nullptr) {
159 TELEPHONY_LOGE("libtel_vsim_symbol.z.so was not loaded, error: %{public}s", dlerror());
160 return;
161 }
162 isVSimInStatus_ = (IS_VSIM_IN_STATUS) dlsym(telephonyVSimWrapperHandle_, "IsVSimInStatus");
163 getVSimSlotId_ = (GET_VSIM_SLOT_ID) dlsym(telephonyVSimWrapperHandle_, "GetVSimSlotId");
164 onAllFilesFetchedExt_ = (ON_ALL_FILES_FETCHED_EXT) dlsym(telephonyVSimWrapperHandle_, "OnAllFilesFetchedExt");
165 putVSimExtraInfo_ = (PUT_VSIM_EXTRA_INFO) dlsym(telephonyVSimWrapperHandle_, "PutVSimExtraInfo");
166 changeSpnAndRuleExt_ = (CHANGE_SPN_AND_RULE_EXT) dlsym(telephonyVSimWrapperHandle_, "ChangeSpnAndRuleExt");
167 getVSimCardState_ = (GET_VSIM_CARD_STATE) dlsym(telephonyVSimWrapperHandle_, "GetVSimCardState");
168 getSimIdExt_ = (GET_SIM_ID_EXT) dlsym(telephonyVSimWrapperHandle_, "GetSimIdExt");
169 getSlotIdExt_ = (GET_SLOT_ID_EXT) dlsym(telephonyVSimWrapperHandle_, "GetSlotIdExt");
170 isHandleVSim_ = (IS_HANDLE_VSIM) dlsym(telephonyVSimWrapperHandle_, "IsHandleVSim");
171
172 bool hasFuncNull = (isVSimInStatus_ == nullptr || getVSimSlotId_ == nullptr || onAllFilesFetchedExt_ == nullptr ||
173 putVSimExtraInfo_ == nullptr || changeSpnAndRuleExt_ == nullptr || getVSimCardState_ == nullptr ||
174 getSimIdExt_ == nullptr || getSlotIdExt_ == nullptr || isHandleVSim_ == nullptr);
175 if (hasFuncNull) {
176 TELEPHONY_LOGE("[VSIM] telephony ext wrapper symbol failed, error: %{public}s", dlerror());
177 return;
178 }
179 TELEPHONY_LOGI("[VSIM] telephony ext wrapper init success");
180 }
181
InitTelephonyExtWrapperForApnCust()182 void TelephonyExtWrapper::InitTelephonyExtWrapperForApnCust()
183 {
184 isAllowedInsertApn_ = (IS_ALLOWED_INSERT_APN)dlsym(telephonyExtWrapperHandle_, "IsAllowedInsertApn");
185 getTargetOpkey_ = (GET_TARGET_OPKEY)dlsym(telephonyExtWrapperHandle_, "GetTargetOpkey");
186 if (isAllowedInsertApn_ == nullptr || getTargetOpkey_ == nullptr) {
187 TELEPHONY_LOGE("telephony ext wrapper symbol failed, error: %{public}s", dlerror());
188 }
189 }
190
InitTelephonyExtWrapperForSim()191 void TelephonyExtWrapper::InitTelephonyExtWrapperForSim()
192 {
193 TELEPHONY_LOGI("[SIM] telephony ext wrapper init begin");
194 createIccFileExt_ = (CREATE_ICC_FILE_EXT)dlsym(telephonyExtWrapperHandle_, "CreateIccFileExt");
195 getRoamingBrokerNumeric_ = (GET_ROAMINGBROKER_NUMERIC)dlsym(telephonyExtWrapperHandle_, "GetRoamingBrokerNumeric");
196 getRoamingBrokerImsi_ = (GET_ROAMINGBROKER_IMSI)dlsym(telephonyExtWrapperHandle_, "GetRoamingBrokerImsi");
197 sendEvent_ = (SEND_EVENT) dlsym(telephonyExtWrapperHandle_, "SendEvent");
198 initBip_ = (INIT_BIP) dlsym(telephonyExtWrapperHandle_, "InitBip");
199 if (createIccFileExt_ == nullptr || getRoamingBrokerNumeric_ == nullptr || getRoamingBrokerImsi_ == nullptr ||
200 sendEvent_ == nullptr || initBip_ == nullptr) {
201 TELEPHONY_LOGE("[SIM]telephony ext wrapper symbol failed, error: %{public}s", dlerror());
202 return;
203 }
204 }
205
InitTelephonyExtWrapperForOpkeyVersion()206 void TelephonyExtWrapper::InitTelephonyExtWrapperForOpkeyVersion()
207 {
208 getOpkeyVersion_ = (GET_OPKEY_VERSION)dlsym(telephonyExtWrapperHandle_, "GetOpkeyVersion");
209 if (getOpkeyVersion_ == nullptr) {
210 TELEPHONY_LOGE("[OpkeyVersion]telephony ext wrapper symbol failed, error: %{public}s", dlerror());
211 return;
212 }
213 }
214 } // namespace Telephony
215 } // namespace OHOS
216