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 } // 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 InitTelephonyExtWrapperForCellularData();
45 InitTelephonyExtWrapperForVSim();
46 TELEPHONY_LOGI("telephony ext wrapper init success");
47 }
48
InitTelephonyExtWrapperForCellularData()49 void TelephonyExtWrapper::InitTelephonyExtWrapperForCellularData()
50 {
51 telephonyExtWrapperHandle_ = dlopen(TELEPHONY_EXT_WRAPPER_PATH.c_str(), RTLD_NOW);
52 if (telephonyExtWrapperHandle_ == nullptr) {
53 TELEPHONY_LOGE("libtelephony_ext_service.z.so was not loaded, error: %{public}s", dlerror());
54 return;
55 }
56 InitDataEndSelfCure();
57 InitTelephonyExtForCustomization();
58 InitSendDataSwitchChangeInfo();
59 InitIsAllCellularDataAllowed();
60 InitIsDualCellularCardAllowed();
61 InitHandleDendFailcause();
62 InitConvertPdpError();
63 InitRestartRadioIfRequired();
64 InitSendApnNeedRetryInfo();
65 }
66
InitDataEndSelfCure()67 void TelephonyExtWrapper::InitDataEndSelfCure()
68 {
69 dataEndSelfCure_ = (DATA_EDN_SELF_CURE)dlsym(telephonyExtWrapperHandle_, "DataEndSelfCure");
70 if (dataEndSelfCure_ == nullptr) {
71 TELEPHONY_LOGE("telephony ext wrapper symbol DataEndSelfCure failed, error: %{public}s", dlerror());
72 return;
73 }
74 TELEPHONY_LOGD("telephony ext wrapper init DataEndSelfCure success");
75 }
76
InitTelephonyExtForCustomization()77 void TelephonyExtWrapper::InitTelephonyExtForCustomization()
78 {
79 isApnAllowedActive_ = (IS_APN_ALLOWED_ACTIVE)dlsym(telephonyExtWrapperHandle_, "IsApnAllowedActive");
80 getUserDataRoamingExpend_ = (GET_USER_DATA_ROAMING_EXPEND)dlsym(telephonyExtWrapperHandle_,
81 "GetUserDataRoamingExpend");
82 if (isApnAllowedActive_ == nullptr || getUserDataRoamingExpend_ == nullptr) {
83 TELEPHONY_LOGE("InitTelephonyExtForCustomization failed, error: %{public}s", dlerror());
84 return;
85 }
86 TELEPHONY_LOGD("telephony ext wrapper init InitTelephonyExtForCustomization success");
87 }
88
InitTelephonyExtWrapperForVSim()89 void TelephonyExtWrapper::InitTelephonyExtWrapperForVSim()
90 {
91 TELEPHONY_LOGI("[VSIM] telephony ext wrapper init begin");
92 telephonyVSimWrapperHandle_ = dlopen(TELEPHONY_VSIM_WRAPPER_PATH.c_str(), RTLD_NOW);
93 if (telephonyVSimWrapperHandle_ == nullptr) {
94 TELEPHONY_LOGE("libtel_vsim_symbol.z.so was not loaded, error: %{public}s", dlerror());
95 return;
96 }
97 getVSimSlotId_ = (GET_VSIM_SLOT_ID) dlsym(telephonyVSimWrapperHandle_, "GetVSimSlotId");
98 createAllApnItemExt_ = (CREATE_ALL_APN_ITEM_EXT) dlsym(telephonyVSimWrapperHandle_, "CreateAllApnItemExt");
99 isCardAllowData_ = (IS_CARD_ALLOW_DATA) dlsym(telephonyVSimWrapperHandle_, "IsCardAllowData");
100 isVSimEnabled_ = (IS_VSIM_ENABLED) dlsym(telephonyVSimWrapperHandle_, "IsVSimEnabled");
101
102 bool hasFuncNull = (getVSimSlotId_ == nullptr || createAllApnItemExt_ == nullptr || isCardAllowData_ == nullptr ||
103 isVSimEnabled_ == nullptr);
104 if (hasFuncNull) {
105 TELEPHONY_LOGE("[VSIM] telephony ext wrapper symbol failed, error: %{public}s", dlerror());
106 return;
107 }
108 TELEPHONY_LOGI("[VSIM] telephony ext wrapper init success");
109 }
110
InitSendDataSwitchChangeInfo()111 void TelephonyExtWrapper::InitSendDataSwitchChangeInfo()
112 {
113 sendDataSwitchChangeInfo_ =
114 (SEND_DATA_SWITCH_CHANGE_INFO)dlsym(telephonyExtWrapperHandle_, "SendDataSwitchChangeInfo");
115 if (sendDataSwitchChangeInfo_ == nullptr) {
116 TELEPHONY_LOGE("telephony ext wrapper symbol SendDataSwitchChangeInfo failed, error: %{public}s", dlerror());
117 return;
118 }
119 TELEPHONY_LOGD("telephony ext wrapper init SendDataSwitchChangeInfo success");
120 }
121
InitIsAllCellularDataAllowed()122 void TelephonyExtWrapper::InitIsAllCellularDataAllowed()
123 {
124 isAllCellularDataAllowed_ =
125 (IS_ALL_CELLULAR_DATA_ALLOWED)dlsym(telephonyExtWrapperHandle_, "IsAllCellularDataAllowed");
126 if (isAllCellularDataAllowed_ == nullptr) {
127 TELEPHONY_LOGE("telephony ext wrapper symbol IsAllCellularDataAllowed failed, error: %{public}s", dlerror());
128 return;
129 }
130 TELEPHONY_LOGD("telephony ext wrapper init IsAllCellularDataAllowed success");
131 }
132
InitIsDualCellularCardAllowed()133 void TelephonyExtWrapper::InitIsDualCellularCardAllowed()
134 {
135 isDualCellularCardAllowed_ =
136 (IS_DUAL_CELLULAR_CARD_ALLOWED)dlsym(telephonyExtWrapperHandle_, "IsDualCellularCardAllowed");
137 if (isDualCellularCardAllowed_ == nullptr) {
138 TELEPHONY_LOGE("telephony ext wrapper symbol IsDualCellularCardAllowed failed,\
139 error: %{public}s", dlerror());
140 return;
141 }
142 TELEPHONY_LOGD("telephony ext wrapper init IsDualCellularCardAllowed success");
143 }
144
InitHandleDendFailcause()145 void TelephonyExtWrapper::InitHandleDendFailcause()
146 {
147 handleDendFailcause_ = (HANDLE_DEND_FAILCAUSE)dlsym(telephonyExtWrapperHandle_, "HandleDendFailcause");
148 if (handleDendFailcause_ == nullptr) {
149 TELEPHONY_LOGE("telephony ext wrapper symbol HandleDendFailcause failed, error: %{public}s", dlerror());
150 }
151 }
152
InitConvertPdpError()153 void TelephonyExtWrapper::InitConvertPdpError()
154 {
155 convertPdpError_ = (CONVERT_PDP_ERROR)dlsym(telephonyExtWrapperHandle_, "ConvertPdpError");
156 if (convertPdpError_ == nullptr) {
157 TELEPHONY_LOGE("telephony ext wrapper symbol ConvertPdpError failed, error: %{public}s", dlerror());
158 }
159 }
160
InitRestartRadioIfRequired()161 void TelephonyExtWrapper::InitRestartRadioIfRequired()
162 {
163 restartRadioIfRequired_ = (RESTART_RADIO_IF_RQUIRED)dlsym(telephonyExtWrapperHandle_, "RestartRadioIfRequired");
164 if (restartRadioIfRequired_ == nullptr) {
165 TELEPHONY_LOGE("telephony ext wrapper symbol RestartRadioIfRequired failed, error: %{public}s", dlerror());
166 }
167 }
168
InitSendApnNeedRetryInfo()169 void TelephonyExtWrapper::InitSendApnNeedRetryInfo()
170 {
171 sendApnNeedRetryInfo_ =
172 (SEND_APN_NEED_RETRY_INFO)dlsym(telephonyExtWrapperHandle_, "SendApnNeedRetryInfo");
173 if (sendApnNeedRetryInfo_ == nullptr) {
174 TELEPHONY_LOGE("telephony ext wrapper symbol SendApnNeedRetryInfo failed, error: %{public}s", dlerror());
175 return;
176 }
177 TELEPHONY_LOGD("telephony ext wrapper init SendApnNeedRetryInfo success");
178 }
179
180 } // namespace Telephony
181 } // namespace OHOS