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