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 InitIsApnAllowedActive();
58 InitSendDataSwitchChangeInfo();
59 InitIsAllCellularDataAllowed();
60 InitIsDualCellularCardAllowed();
61 }
62
InitDataEndSelfCure()63 void TelephonyExtWrapper::InitDataEndSelfCure()
64 {
65 dataEndSelfCure_ = (DATA_EDN_SELF_CURE)dlsym(telephonyExtWrapperHandle_, "DataEndSelfCure");
66 if (dataEndSelfCure_ == nullptr) {
67 TELEPHONY_LOGE("telephony ext wrapper symbol DataEndSelfCure failed, error: %{public}s", dlerror());
68 return;
69 }
70 TELEPHONY_LOGD("telephony ext wrapper init DataEndSelfCure success");
71 }
72
InitIsApnAllowedActive()73 void TelephonyExtWrapper::InitIsApnAllowedActive()
74 {
75 isApnAllowedActive_ = (IS_APN_ALLOWED_ACTIVE)dlsym(telephonyExtWrapperHandle_, "IsApnAllowedActive");
76 if (isApnAllowedActive_ == nullptr) {
77 TELEPHONY_LOGE("telephony ext wrapper symbol InitIsApnAllowedActive failed, error: %{public}s", dlerror());
78 return;
79 }
80 TELEPHONY_LOGD("telephony ext wrapper init InitIsApnAllowedActive success");
81 }
82
InitTelephonyExtWrapperForVSim()83 void TelephonyExtWrapper::InitTelephonyExtWrapperForVSim()
84 {
85 TELEPHONY_LOGI("[VSIM] telephony ext wrapper init begin");
86 telephonyVSimWrapperHandle_ = dlopen(TELEPHONY_VSIM_WRAPPER_PATH.c_str(), RTLD_NOW);
87 if (telephonyVSimWrapperHandle_ == nullptr) {
88 TELEPHONY_LOGE("libtel_vsim_symbol.z.so was not loaded, error: %{public}s", dlerror());
89 return;
90 }
91 getVSimSlotId_ = (GET_VSIM_SLOT_ID) dlsym(telephonyVSimWrapperHandle_, "GetVSimSlotId");
92 createAllApnItemExt_ = (CREATE_ALL_APN_ITEM_EXT) dlsym(telephonyVSimWrapperHandle_, "CreateAllApnItemExt");
93 isCardAllowData_ = (IS_CARD_ALLOW_DATA) dlsym(telephonyVSimWrapperHandle_, "IsCardAllowData");
94 if (getVSimSlotId_ == nullptr || createAllApnItemExt_ == nullptr || isCardAllowData_ == nullptr) {
95 TELEPHONY_LOGE("[VSIM] telephony ext wrapper symbol failed, error: %{public}s", dlerror());
96 return;
97 }
98 TELEPHONY_LOGI("[VSIM] telephony ext wrapper init success");
99 }
100
InitSendDataSwitchChangeInfo()101 void TelephonyExtWrapper::InitSendDataSwitchChangeInfo()
102 {
103 sendDataSwitchChangeInfo_ =
104 (SEND_DATA_SWITCH_CHANGE_INFO)dlsym(telephonyExtWrapperHandle_, "SendDataSwitchChangeInfo");
105 if (sendDataSwitchChangeInfo_ == nullptr) {
106 TELEPHONY_LOGE("telephony ext wrapper symbol SendDataSwitchChangeInfo failed, error: %{public}s", dlerror());
107 return;
108 }
109 TELEPHONY_LOGD("telephony ext wrapper init SendDataSwitchChangeInfo success");
110 }
111
InitIsAllCellularDataAllowed()112 void TelephonyExtWrapper::InitIsAllCellularDataAllowed()
113 {
114 isAllCellularDataAllowed_ =
115 (IS_ALL_CELLULAR_DATA_ALLOWED)dlsym(telephonyExtWrapperHandle_, "IsAllCellularDataAllowed");
116 if (isAllCellularDataAllowed_ == nullptr) {
117 TELEPHONY_LOGE("telephony ext wrapper symbol IsAllCellularDataAllowed failed, error: %{public}s", dlerror());
118 return;
119 }
120 TELEPHONY_LOGD("telephony ext wrapper init IsAllCellularDataAllowed success");
121 }
122
InitIsDualCellularCardAllowed()123 void TelephonyExtWrapper::InitIsDualCellularCardAllowed()
124 {
125 isDualCellularCardAllowed_ =
126 (IS_DUAL_CELLULAR_CARD_ALLOWED)dlsym(telephonyExtWrapperHandle_, "IsDualCellularCardAllowed");
127 if (isDualCellularCardAllowed_ == nullptr) {
128 TELEPHONY_LOGE("telephony ext wrapper symbol IsDualCellularCardAllowed failed,\
129 error: %{public}s", dlerror());
130 return;
131 }
132 TELEPHONY_LOGD("telephony ext wrapper init IsDualCellularCardAllowed success");
133 }
134
135 } // namespace Telephony
136 } // namespace OHOS