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