1 /*
2 * Copyright (c) 2023 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 InitTelephonyExtWrapperForDynamicLoad();
49 TELEPHONY_LOGD("TelephonyExtWrapper::InitTelephonyExtWrapper() start");
50 InitTelephonyExtWrapperForCellularData();
51 InitTelephonyExtWrapperForVSim();
52 TELEPHONY_LOGI("telephony ext wrapper init success");
53 }
54
InitTelephonyExtWrapperForCellularData()55 void TelephonyExtWrapper::InitTelephonyExtWrapperForCellularData()
56 {
57 telephonyExtWrapperHandle_ = dlopen(TELEPHONY_EXT_WRAPPER_PATH.c_str(), RTLD_NOW);
58 if (telephonyExtWrapperHandle_ == nullptr) {
59 TELEPHONY_LOGE("libtelephony_ext_service.z.so was not loaded, error: %{public}s", dlerror());
60 return;
61 }
62 InitDataEndSelfCure();
63 InitTelephonyExtForCustomization();
64 InitSendDataSwitchChangeInfo();
65 InitIsAllCellularDataAllowed();
66 InitIsDualCellularCardAllowed();
67 InitHandleDendFailcause();
68 InitConvertPdpError();
69 InitRestartRadioIfRequired();
70 InitSendApnNeedRetryInfo();
71 InitJudgeOtherRequestHolding();
72 InitCreateDcApnItemExt();
73 }
74
InitJudgeOtherRequestHolding()75 void TelephonyExtWrapper::InitJudgeOtherRequestHolding()
76 {
77 judgeOtherRequestHolding_ =
78 (JUDGE_OTHER_REQUEST_HOLDING)dlsym(telephonyExtWrapperHandle_, "JudgeOtherRequestHolding");
79 if (judgeOtherRequestHolding_ == nullptr) {
80 TELEPHONY_LOGE("telephony ext wrapper symbol JudgeOtherRequestHolding failed, error: %{public}s", dlerror());
81 return;
82 }
83 TELEPHONY_LOGD("telephony ext wrapper init JudgeOtherRequestHolding success");
84 }
85
InitDataEndSelfCure()86 void TelephonyExtWrapper::InitDataEndSelfCure()
87 {
88 dataEndSelfCure_ = (DATA_EDN_SELF_CURE)dlsym(telephonyExtWrapperHandle_, "DataEndSelfCure");
89 if (dataEndSelfCure_ == nullptr) {
90 TELEPHONY_LOGE("telephony ext wrapper symbol DataEndSelfCure failed, error: %{public}s", dlerror());
91 return;
92 }
93 TELEPHONY_LOGD("telephony ext wrapper init DataEndSelfCure success");
94 }
95
InitTelephonyExtForCustomization()96 void TelephonyExtWrapper::InitTelephonyExtForCustomization()
97 {
98 isApnAllowedActive_ = (IS_APN_ALLOWED_ACTIVE)dlsym(telephonyExtWrapperHandle_, "IsApnAllowedActive");
99 getUserDataRoamingExpend_ = (GET_USER_DATA_ROAMING_EXPEND)dlsym(telephonyExtWrapperHandle_,
100 "GetUserDataRoamingExpend");
101 if (isApnAllowedActive_ == nullptr || getUserDataRoamingExpend_ == nullptr) {
102 TELEPHONY_LOGE("InitTelephonyExtForCustomization failed, error: %{public}s", dlerror());
103 return;
104 }
105 TELEPHONY_LOGD("telephony ext wrapper init InitTelephonyExtForCustomization success");
106 }
107
InitTelephonyExtWrapperForVSim()108 void TelephonyExtWrapper::InitTelephonyExtWrapperForVSim()
109 {
110 TELEPHONY_LOGI("[VSIM] telephony ext wrapper init begin");
111 telephonyVSimWrapperHandle_ = dlopen(TELEPHONY_VSIM_WRAPPER_PATH.c_str(), RTLD_NOW);
112 if (telephonyVSimWrapperHandle_ == nullptr) {
113 TELEPHONY_LOGE("libtel_vsim_symbol.z.so was not loaded, error: %{public}s", dlerror());
114 return;
115 }
116 getVSimSlotId_ = (GET_VSIM_SLOT_ID) dlsym(telephonyVSimWrapperHandle_, "GetVSimSlotId");
117 createAllApnItemExt_ = (CREATE_ALL_APN_ITEM_EXT) dlsym(telephonyVSimWrapperHandle_, "CreateAllApnItemExt");
118 isCardAllowData_ = (IS_CARD_ALLOW_DATA) dlsym(telephonyVSimWrapperHandle_, "IsCardAllowData");
119 isVSimEnabled_ = (IS_VSIM_ENABLED) dlsym(telephonyVSimWrapperHandle_, "IsVSimEnabled");
120 isVSimInDisableProcess_ = (IS_VSIM_ENABLED) dlsym(telephonyVSimWrapperHandle_, "IsVSimInDisableProcess");
121
122 bool hasFuncNull = (getVSimSlotId_ == nullptr || createAllApnItemExt_ == nullptr || isCardAllowData_ == nullptr ||
123 isVSimEnabled_ == nullptr);
124 if (hasFuncNull) {
125 TELEPHONY_LOGE("[VSIM] telephony ext wrapper symbol failed, error: %{public}s", dlerror());
126 return;
127 }
128 TELEPHONY_LOGI("[VSIM] telephony ext wrapper init success");
129 }
130
InitSendDataSwitchChangeInfo()131 void TelephonyExtWrapper::InitSendDataSwitchChangeInfo()
132 {
133 sendDataSwitchChangeInfo_ =
134 (SEND_DATA_SWITCH_CHANGE_INFO)dlsym(telephonyExtWrapperHandle_, "SendDataSwitchChangeInfo");
135 if (sendDataSwitchChangeInfo_ == nullptr) {
136 TELEPHONY_LOGE("telephony ext wrapper symbol SendDataSwitchChangeInfo failed, error: %{public}s", dlerror());
137 return;
138 }
139 TELEPHONY_LOGD("telephony ext wrapper init SendDataSwitchChangeInfo success");
140 }
141
InitIsAllCellularDataAllowed()142 void TelephonyExtWrapper::InitIsAllCellularDataAllowed()
143 {
144 isAllCellularDataAllowed_ =
145 (IS_ALL_CELLULAR_DATA_ALLOWED)dlsym(telephonyExtWrapperHandle_, "IsAllCellularDataAllowed");
146 if (isAllCellularDataAllowed_ == nullptr) {
147 TELEPHONY_LOGE("telephony ext wrapper symbol IsAllCellularDataAllowed failed, error: %{public}s", dlerror());
148 return;
149 }
150 TELEPHONY_LOGD("telephony ext wrapper init IsAllCellularDataAllowed success");
151 }
152
InitIsDualCellularCardAllowed()153 void TelephonyExtWrapper::InitIsDualCellularCardAllowed()
154 {
155 isDualCellularCardAllowed_ =
156 (IS_DUAL_CELLULAR_CARD_ALLOWED)dlsym(telephonyExtWrapperHandle_, "IsDualCellularCardAllowed");
157 if (isDualCellularCardAllowed_ == nullptr) {
158 TELEPHONY_LOGE("telephony ext wrapper symbol IsDualCellularCardAllowed failed,\
159 error: %{public}s", dlerror());
160 return;
161 }
162 TELEPHONY_LOGD("telephony ext wrapper init IsDualCellularCardAllowed success");
163 }
164
InitHandleDendFailcause()165 void TelephonyExtWrapper::InitHandleDendFailcause()
166 {
167 handleDendFailcause_ = (HANDLE_DEND_FAILCAUSE)dlsym(telephonyExtWrapperHandle_, "HandleDendFailcause");
168 if (handleDendFailcause_ == nullptr) {
169 TELEPHONY_LOGE("telephony ext wrapper symbol HandleDendFailcause failed, error: %{public}s", dlerror());
170 }
171 }
172
InitConvertPdpError()173 void TelephonyExtWrapper::InitConvertPdpError()
174 {
175 convertPdpError_ = (CONVERT_PDP_ERROR)dlsym(telephonyExtWrapperHandle_, "ConvertPdpError");
176 if (convertPdpError_ == nullptr) {
177 TELEPHONY_LOGE("telephony ext wrapper symbol ConvertPdpError failed, error: %{public}s", dlerror());
178 }
179 }
180
InitRestartRadioIfRequired()181 void TelephonyExtWrapper::InitRestartRadioIfRequired()
182 {
183 restartRadioIfRequired_ = (RESTART_RADIO_IF_RQUIRED)dlsym(telephonyExtWrapperHandle_, "RestartRadioIfRequired");
184 if (restartRadioIfRequired_ == nullptr) {
185 TELEPHONY_LOGE("telephony ext wrapper symbol RestartRadioIfRequired failed, error: %{public}s", dlerror());
186 }
187 }
188
InitSendApnNeedRetryInfo()189 void TelephonyExtWrapper::InitSendApnNeedRetryInfo()
190 {
191 sendApnNeedRetryInfo_ =
192 (SEND_APN_NEED_RETRY_INFO)dlsym(telephonyExtWrapperHandle_, "SendApnNeedRetryInfo");
193 if (sendApnNeedRetryInfo_ == nullptr) {
194 TELEPHONY_LOGE("telephony ext wrapper symbol SendApnNeedRetryInfo failed, error: %{public}s", dlerror());
195 return;
196 }
197 TELEPHONY_LOGD("telephony ext wrapper init SendApnNeedRetryInfo success");
198 }
199
InitTelephonyExtWrapperForDynamicLoad()200 void TelephonyExtWrapper::InitTelephonyExtWrapperForDynamicLoad()
201 {
202 TELEPHONY_LOGI("[DynamicLoad]telephony ext wrapper dynamic load init begin");
203 telephonyDynamicLoadWrapperHandle_ = dlopen(TELEPHONY_DYNAMIC_LOAD_WRAPPER_PATH.c_str(), RTLD_NOW);
204 if (telephonyDynamicLoadWrapperHandle_ == nullptr) {
205 TELEPHONY_LOGE("[DynamicLoad] libtel_dynamic_load_service.z.so was not loaded, error: %{public}s", dlerror());
206 return;
207 }
208 dynamicLoadInit_ = (DynamicLoadInit)dlsym(telephonyDynamicLoadWrapperHandle_, "InitDynamicLoadHandle");
209 if (dynamicLoadInit_ == nullptr) {
210 TELEPHONY_LOGE("[DynamicLoad] telephony ext wrapper symbol failed, error: %{public}s", dlerror());
211 return;
212 }
213 dynamicLoadNotifyReqCellularDataStatus_ =
214 (NotifyReqCellularData)dlsym(telephonyDynamicLoadWrapperHandle_, "InformReqCellularDataStatus");
215 if (dynamicLoadNotifyReqCellularDataStatus_ == nullptr) {
216 TELEPHONY_LOGE("[DynamicLoad] telephony ext wrapper dynamicLoadNotifyReqCellularDataStatus_ symbol failed,\
217 error: %{public}s", dlerror());
218 return;
219 }
220 TELEPHONY_LOGI("[DynamicLoad]telephony ext wrapper dynamic load init success");
221 }
222
InitCreateDcApnItemExt()223 void TelephonyExtWrapper::InitCreateDcApnItemExt()
224 {
225 createDcApnItemExt_ =
226 (CREATE_DC_APN_ITEM_EXT)dlsym(telephonyExtWrapperHandle_, "CreateDcApnItemExt");
227 if (createDcApnItemExt_ == nullptr) {
228 TELEPHONY_LOGE("telephony ext wrapper symbol CreateDcApnItemExt failed, error: %{public}s", dlerror());
229 return;
230 }
231 TELEPHONY_LOGI("telephony ext wrapper init CreateDcApnItemExt success");
232 }
233 } // namespace Telephony
234 } // namespace OHOS