12d43be4eSopenharmony_ci/*
22d43be4eSopenharmony_ci * Copyright (C) 2021 Huawei Device Co., Ltd.
32d43be4eSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
42d43be4eSopenharmony_ci * you may not use this file except in compliance with the License.
52d43be4eSopenharmony_ci * You may obtain a copy of the License at
62d43be4eSopenharmony_ci *
72d43be4eSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
82d43be4eSopenharmony_ci *
92d43be4eSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
102d43be4eSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
112d43be4eSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
122d43be4eSopenharmony_ci * See the License for the specific language governing permissions and
132d43be4eSopenharmony_ci * limitations under the License.
142d43be4eSopenharmony_ci */
152d43be4eSopenharmony_ci
162d43be4eSopenharmony_ci#include "cellular_data_client.h"
172d43be4eSopenharmony_ci
182d43be4eSopenharmony_ci#include "__mutex_base"
192d43be4eSopenharmony_ci#include "cellular_data_types.h"
202d43be4eSopenharmony_ci#include "i_cellular_data_manager.h"
212d43be4eSopenharmony_ci#include "if_system_ability_manager.h"
222d43be4eSopenharmony_ci#include "iremote_broker.h"
232d43be4eSopenharmony_ci#include "iremote_object.h"
242d43be4eSopenharmony_ci#include "iservice_registry.h"
252d43be4eSopenharmony_ci#include "memory"
262d43be4eSopenharmony_ci#include "refbase.h"
272d43be4eSopenharmony_ci#include "system_ability_definition.h"
282d43be4eSopenharmony_ci#include "telephony_errors.h"
292d43be4eSopenharmony_ci#include "telephony_log_wrapper.h"
302d43be4eSopenharmony_ci#include "telephony_types.h"
312d43be4eSopenharmony_ci
322d43be4eSopenharmony_cinamespace OHOS {
332d43be4eSopenharmony_cinamespace Telephony {
342d43be4eSopenharmony_ciint32_t CellularDataClient::defaultCellularDataSlotId_ = INVALID_MAIN_CARD_SLOTID;
352d43be4eSopenharmony_ciint32_t CellularDataClient::defaultCellularDataSimId_ = 0;
362d43be4eSopenharmony_ciCellularDataClient::CellularDataClient()
372d43be4eSopenharmony_ci{
382d43be4eSopenharmony_ci    if (callback_ == nullptr) {
392d43be4eSopenharmony_ci        callback_ = new DataSimAccountCallback();
402d43be4eSopenharmony_ci    }
412d43be4eSopenharmony_ci}
422d43be4eSopenharmony_ci
432d43be4eSopenharmony_ciCellularDataClient::~CellularDataClient()
442d43be4eSopenharmony_ci{
452d43be4eSopenharmony_ci    UnregisterSimAccountCallback();
462d43be4eSopenharmony_ci}
472d43be4eSopenharmony_ci
482d43be4eSopenharmony_cibool CellularDataClient::IsValidSlotId(int32_t slotId)
492d43be4eSopenharmony_ci{
502d43be4eSopenharmony_ci    return ((slotId >= DEFAULT_SIM_SLOT_ID) && (slotId < SIM_SLOT_COUNT));
512d43be4eSopenharmony_ci}
522d43be4eSopenharmony_ci
532d43be4eSopenharmony_cisptr<ICellularDataManager> CellularDataClient::GetProxy()
542d43be4eSopenharmony_ci{
552d43be4eSopenharmony_ci    std::lock_guard<std::mutex> lock(mutexProxy_);
562d43be4eSopenharmony_ci    if (proxy_ != nullptr) {
572d43be4eSopenharmony_ci        return proxy_;
582d43be4eSopenharmony_ci    }
592d43be4eSopenharmony_ci
602d43be4eSopenharmony_ci    sptr<IRemoteObject> obj;
612d43be4eSopenharmony_ci    if (!IsCellularDataSysAbilityExist(obj)) {
622d43be4eSopenharmony_ci        TELEPHONY_LOGE("Failed to get cellular data service");
632d43be4eSopenharmony_ci        return nullptr;
642d43be4eSopenharmony_ci    }
652d43be4eSopenharmony_ci    std::unique_ptr<CellularDataDeathRecipient> recipient = std::make_unique<CellularDataDeathRecipient>(*this);
662d43be4eSopenharmony_ci    if (recipient == nullptr) {
672d43be4eSopenharmony_ci        TELEPHONY_LOGE("recipient is null");
682d43be4eSopenharmony_ci        return nullptr;
692d43be4eSopenharmony_ci    }
702d43be4eSopenharmony_ci    sptr<IRemoteObject::DeathRecipient> dr(recipient.release());
712d43be4eSopenharmony_ci    if ((obj->IsProxyObject()) && (!obj->AddDeathRecipient(dr))) {
722d43be4eSopenharmony_ci        TELEPHONY_LOGE("Failed to add death recipient");
732d43be4eSopenharmony_ci        return nullptr;
742d43be4eSopenharmony_ci    }
752d43be4eSopenharmony_ci    proxy_ = iface_cast<ICellularDataManager>(obj);
762d43be4eSopenharmony_ci    deathRecipient_ = dr;
772d43be4eSopenharmony_ci    TELEPHONY_LOGD("Succeed to connect cellular data service %{public}d", proxy_ == nullptr);
782d43be4eSopenharmony_ci    return proxy_;
792d43be4eSopenharmony_ci}
802d43be4eSopenharmony_ci
812d43be4eSopenharmony_civoid CellularDataClient::OnRemoteDied(const wptr<IRemoteObject> &remote)
822d43be4eSopenharmony_ci{
832d43be4eSopenharmony_ci    if (remote == nullptr) {
842d43be4eSopenharmony_ci        TELEPHONY_LOGE("remote is nullptr");
852d43be4eSopenharmony_ci        return;
862d43be4eSopenharmony_ci    }
872d43be4eSopenharmony_ci    std::lock_guard<std::mutex> lock(mutexProxy_);
882d43be4eSopenharmony_ci    if (proxy_ == nullptr) {
892d43be4eSopenharmony_ci        TELEPHONY_LOGE("proxy_ is nullptr");
902d43be4eSopenharmony_ci        return;
912d43be4eSopenharmony_ci    }
922d43be4eSopenharmony_ci    sptr<IRemoteObject> serviceRemote = proxy_->AsObject();
932d43be4eSopenharmony_ci    if ((serviceRemote != nullptr) && (serviceRemote == remote.promote())) {
942d43be4eSopenharmony_ci        serviceRemote->RemoveDeathRecipient(deathRecipient_);
952d43be4eSopenharmony_ci        proxy_ = nullptr;
962d43be4eSopenharmony_ci        defaultCellularDataSlotId_ = INVALID_MAIN_CARD_SLOTID;
972d43be4eSopenharmony_ci        defaultCellularDataSimId_ = 0;
982d43be4eSopenharmony_ci        registerStatus_ = false;
992d43be4eSopenharmony_ci        TELEPHONY_LOGE("on remote died");
1002d43be4eSopenharmony_ci    }
1012d43be4eSopenharmony_ci}
1022d43be4eSopenharmony_ci
1032d43be4eSopenharmony_cibool CellularDataClient::IsConnect()
1042d43be4eSopenharmony_ci{
1052d43be4eSopenharmony_ci    sptr<ICellularDataManager> proxy = GetProxy();
1062d43be4eSopenharmony_ci    return (proxy != nullptr);
1072d43be4eSopenharmony_ci}
1082d43be4eSopenharmony_ci
1092d43be4eSopenharmony_civoid CellularDataClient::RegisterSimAccountCallback()
1102d43be4eSopenharmony_ci{
1112d43be4eSopenharmony_ci    if (callback_ == nullptr) {
1122d43be4eSopenharmony_ci        TELEPHONY_LOGE("callback_ is nullptr");
1132d43be4eSopenharmony_ci        return;
1142d43be4eSopenharmony_ci    }
1152d43be4eSopenharmony_ci    if (registerStatus_) {
1162d43be4eSopenharmony_ci        return;
1172d43be4eSopenharmony_ci    }
1182d43be4eSopenharmony_ci    sptr<ICellularDataManager> proxy = GetProxy();
1192d43be4eSopenharmony_ci    if (proxy == nullptr) {
1202d43be4eSopenharmony_ci        TELEPHONY_LOGE("proxy is null");
1212d43be4eSopenharmony_ci        return;
1222d43be4eSopenharmony_ci    }
1232d43be4eSopenharmony_ci    int32_t ret = proxy->RegisterSimAccountCallback(callback_);
1242d43be4eSopenharmony_ci    TELEPHONY_LOGD("ret:%{public}d", ret);
1252d43be4eSopenharmony_ci    if (ret == TELEPHONY_ERR_SUCCESS) {
1262d43be4eSopenharmony_ci        registerStatus_ = true;
1272d43be4eSopenharmony_ci    }
1282d43be4eSopenharmony_ci}
1292d43be4eSopenharmony_ci
1302d43be4eSopenharmony_civoid CellularDataClient::UnregisterSimAccountCallback()
1312d43be4eSopenharmony_ci{
1322d43be4eSopenharmony_ci    sptr<ICellularDataManager> proxy = GetProxy();
1332d43be4eSopenharmony_ci    if (proxy == nullptr) {
1342d43be4eSopenharmony_ci        TELEPHONY_LOGE("proxy is null");
1352d43be4eSopenharmony_ci        return;
1362d43be4eSopenharmony_ci    }
1372d43be4eSopenharmony_ci    int32_t ret = proxy->UnregisterSimAccountCallback();
1382d43be4eSopenharmony_ci    TELEPHONY_LOGD("ret:%{public}d", ret);
1392d43be4eSopenharmony_ci}
1402d43be4eSopenharmony_ci
1412d43be4eSopenharmony_ciint32_t CellularDataClient::GetDefaultCellularDataSlotId()
1422d43be4eSopenharmony_ci{
1432d43be4eSopenharmony_ci    RegisterSimAccountCallback();
1442d43be4eSopenharmony_ci    if (IsValidSlotId(defaultCellularDataSlotId_)) {
1452d43be4eSopenharmony_ci        return defaultCellularDataSlotId_;
1462d43be4eSopenharmony_ci    }
1472d43be4eSopenharmony_ci    sptr<ICellularDataManager> proxy = GetProxy();
1482d43be4eSopenharmony_ci    if (proxy == nullptr) {
1492d43be4eSopenharmony_ci        TELEPHONY_LOGE("proxy is null");
1502d43be4eSopenharmony_ci        return TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
1512d43be4eSopenharmony_ci    }
1522d43be4eSopenharmony_ci    defaultCellularDataSlotId_ = proxy->GetDefaultCellularDataSlotId();
1532d43be4eSopenharmony_ci    return defaultCellularDataSlotId_;
1542d43be4eSopenharmony_ci}
1552d43be4eSopenharmony_ci
1562d43be4eSopenharmony_ciint32_t CellularDataClient::GetDefaultCellularDataSimId(int32_t &simId)
1572d43be4eSopenharmony_ci{
1582d43be4eSopenharmony_ci    RegisterSimAccountCallback();
1592d43be4eSopenharmony_ci    if (defaultCellularDataSimId_ > 0) {
1602d43be4eSopenharmony_ci        simId = defaultCellularDataSimId_;
1612d43be4eSopenharmony_ci        return TELEPHONY_ERR_SUCCESS;
1622d43be4eSopenharmony_ci    }
1632d43be4eSopenharmony_ci    sptr<ICellularDataManager> proxy = GetProxy();
1642d43be4eSopenharmony_ci    if (proxy == nullptr) {
1652d43be4eSopenharmony_ci        TELEPHONY_LOGE("proxy is null");
1662d43be4eSopenharmony_ci        return TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
1672d43be4eSopenharmony_ci    }
1682d43be4eSopenharmony_ci    int32_t result = proxy->GetDefaultCellularDataSimId(simId);
1692d43be4eSopenharmony_ci    if (result == TELEPHONY_ERR_SUCCESS) {
1702d43be4eSopenharmony_ci        defaultCellularDataSimId_ = simId;
1712d43be4eSopenharmony_ci    }
1722d43be4eSopenharmony_ci    return result;
1732d43be4eSopenharmony_ci}
1742d43be4eSopenharmony_ci
1752d43be4eSopenharmony_ciint32_t CellularDataClient::SetDefaultCellularDataSlotId(int32_t slotId)
1762d43be4eSopenharmony_ci{
1772d43be4eSopenharmony_ci    RegisterSimAccountCallback();
1782d43be4eSopenharmony_ci    sptr<ICellularDataManager> proxy = GetProxy();
1792d43be4eSopenharmony_ci    if (proxy == nullptr) {
1802d43be4eSopenharmony_ci        TELEPHONY_LOGE("proxy is null");
1812d43be4eSopenharmony_ci        return TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
1822d43be4eSopenharmony_ci    }
1832d43be4eSopenharmony_ci    int32_t result = proxy->SetDefaultCellularDataSlotId(slotId);
1842d43be4eSopenharmony_ci    if (result == TELEPHONY_ERR_SUCCESS) {
1852d43be4eSopenharmony_ci        defaultCellularDataSlotId_ = slotId;
1862d43be4eSopenharmony_ci        int32_t simId = 0;
1872d43be4eSopenharmony_ci        int32_t ret = proxy->GetDefaultCellularDataSimId(simId);
1882d43be4eSopenharmony_ci        if (ret == TELEPHONY_ERR_SUCCESS) {
1892d43be4eSopenharmony_ci            defaultCellularDataSimId_ = simId;
1902d43be4eSopenharmony_ci        }
1912d43be4eSopenharmony_ci    }
1922d43be4eSopenharmony_ci    return result;
1932d43be4eSopenharmony_ci}
1942d43be4eSopenharmony_ci
1952d43be4eSopenharmony_ciint32_t CellularDataClient::UpdateDefaultCellularDataSlotId()
1962d43be4eSopenharmony_ci{
1972d43be4eSopenharmony_ci    defaultCellularDataSlotId_ = INVALID_MAIN_CARD_SLOTID;
1982d43be4eSopenharmony_ci    defaultCellularDataSimId_ = 0;
1992d43be4eSopenharmony_ci    sptr<ICellularDataManager> proxy = GetProxy();
2002d43be4eSopenharmony_ci    if (proxy == nullptr) {
2012d43be4eSopenharmony_ci        TELEPHONY_LOGE("proxy is null");
2022d43be4eSopenharmony_ci        return TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
2032d43be4eSopenharmony_ci    }
2042d43be4eSopenharmony_ci    defaultCellularDataSlotId_ = proxy->GetDefaultCellularDataSlotId();
2052d43be4eSopenharmony_ci    proxy->GetDefaultCellularDataSimId(defaultCellularDataSimId_);
2062d43be4eSopenharmony_ci    return defaultCellularDataSlotId_;
2072d43be4eSopenharmony_ci}
2082d43be4eSopenharmony_ci
2092d43be4eSopenharmony_ciint32_t CellularDataClient::EnableCellularData(bool enable)
2102d43be4eSopenharmony_ci{
2112d43be4eSopenharmony_ci    sptr<ICellularDataManager> proxy = GetProxy();
2122d43be4eSopenharmony_ci    if (proxy == nullptr) {
2132d43be4eSopenharmony_ci        TELEPHONY_LOGE("proxy is null");
2142d43be4eSopenharmony_ci        return TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
2152d43be4eSopenharmony_ci    }
2162d43be4eSopenharmony_ci    return proxy->EnableCellularData(enable);
2172d43be4eSopenharmony_ci}
2182d43be4eSopenharmony_ci
2192d43be4eSopenharmony_ciint32_t CellularDataClient::EnableIntelligenceSwitch(bool enable)
2202d43be4eSopenharmony_ci{
2212d43be4eSopenharmony_ci    sptr<ICellularDataManager> proxy = GetProxy();
2222d43be4eSopenharmony_ci    if (proxy == nullptr) {
2232d43be4eSopenharmony_ci        TELEPHONY_LOGE("proxy is null");
2242d43be4eSopenharmony_ci        return TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
2252d43be4eSopenharmony_ci    }
2262d43be4eSopenharmony_ci    return proxy->EnableIntelligenceSwitch(enable);
2272d43be4eSopenharmony_ci}
2282d43be4eSopenharmony_ci
2292d43be4eSopenharmony_ciint32_t CellularDataClient::IsCellularDataEnabled(bool &dataEnabled)
2302d43be4eSopenharmony_ci{
2312d43be4eSopenharmony_ci    sptr<ICellularDataManager> proxy = GetProxy();
2322d43be4eSopenharmony_ci    if (proxy == nullptr) {
2332d43be4eSopenharmony_ci        TELEPHONY_LOGE("proxy is null");
2342d43be4eSopenharmony_ci        return TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
2352d43be4eSopenharmony_ci    }
2362d43be4eSopenharmony_ci    return proxy->IsCellularDataEnabled(dataEnabled);
2372d43be4eSopenharmony_ci}
2382d43be4eSopenharmony_ci
2392d43be4eSopenharmony_ciint32_t CellularDataClient::GetCellularDataState()
2402d43be4eSopenharmony_ci{
2412d43be4eSopenharmony_ci    sptr<ICellularDataManager> proxy = GetProxy();
2422d43be4eSopenharmony_ci    if (proxy == nullptr) {
2432d43be4eSopenharmony_ci        TELEPHONY_LOGE("proxy is null");
2442d43be4eSopenharmony_ci        return TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
2452d43be4eSopenharmony_ci    }
2462d43be4eSopenharmony_ci    return proxy->GetCellularDataState();
2472d43be4eSopenharmony_ci}
2482d43be4eSopenharmony_ci
2492d43be4eSopenharmony_ciint32_t CellularDataClient::GetApnState(int32_t slotId, const std::string &apnType)
2502d43be4eSopenharmony_ci{
2512d43be4eSopenharmony_ci    sptr<ICellularDataManager> proxy = GetProxy();
2522d43be4eSopenharmony_ci    if (proxy == nullptr) {
2532d43be4eSopenharmony_ci        TELEPHONY_LOGE("proxy is null");
2542d43be4eSopenharmony_ci        return TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
2552d43be4eSopenharmony_ci    }
2562d43be4eSopenharmony_ci    return proxy->GetApnState(slotId, apnType);
2572d43be4eSopenharmony_ci}
2582d43be4eSopenharmony_ci
2592d43be4eSopenharmony_ciint32_t CellularDataClient::GetDataRecoveryState()
2602d43be4eSopenharmony_ci{
2612d43be4eSopenharmony_ci    sptr<ICellularDataManager> proxy = GetProxy();
2622d43be4eSopenharmony_ci    if (proxy == nullptr) {
2632d43be4eSopenharmony_ci        TELEPHONY_LOGE("proxy is null");
2642d43be4eSopenharmony_ci        return TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
2652d43be4eSopenharmony_ci    }
2662d43be4eSopenharmony_ci    return proxy->GetDataRecoveryState();
2672d43be4eSopenharmony_ci}
2682d43be4eSopenharmony_ci
2692d43be4eSopenharmony_ciint32_t CellularDataClient::IsCellularDataRoamingEnabled(int32_t slotId, bool &dataRoamingEnabled)
2702d43be4eSopenharmony_ci{
2712d43be4eSopenharmony_ci    sptr<ICellularDataManager> proxy = GetProxy();
2722d43be4eSopenharmony_ci    if (proxy == nullptr) {
2732d43be4eSopenharmony_ci        TELEPHONY_LOGE("proxy is null");
2742d43be4eSopenharmony_ci        return TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
2752d43be4eSopenharmony_ci    }
2762d43be4eSopenharmony_ci    return proxy->IsCellularDataRoamingEnabled(slotId, dataRoamingEnabled);
2772d43be4eSopenharmony_ci}
2782d43be4eSopenharmony_ci
2792d43be4eSopenharmony_ciint32_t CellularDataClient::EnableCellularDataRoaming(int32_t slotId, bool enable)
2802d43be4eSopenharmony_ci{
2812d43be4eSopenharmony_ci    sptr<ICellularDataManager> proxy = GetProxy();
2822d43be4eSopenharmony_ci    if (proxy == nullptr) {
2832d43be4eSopenharmony_ci        TELEPHONY_LOGE("proxy is null");
2842d43be4eSopenharmony_ci        return TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
2852d43be4eSopenharmony_ci    }
2862d43be4eSopenharmony_ci    return proxy->EnableCellularDataRoaming(slotId, enable);
2872d43be4eSopenharmony_ci}
2882d43be4eSopenharmony_ci
2892d43be4eSopenharmony_ciint32_t CellularDataClient::GetCellularDataFlowType()
2902d43be4eSopenharmony_ci{
2912d43be4eSopenharmony_ci    sptr<ICellularDataManager> proxy = GetProxy();
2922d43be4eSopenharmony_ci    if (proxy == nullptr) {
2932d43be4eSopenharmony_ci        TELEPHONY_LOGE("proxy is null");
2942d43be4eSopenharmony_ci        return TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
2952d43be4eSopenharmony_ci    }
2962d43be4eSopenharmony_ci    return proxy->GetCellularDataFlowType();
2972d43be4eSopenharmony_ci}
2982d43be4eSopenharmony_ci
2992d43be4eSopenharmony_ciint32_t CellularDataClient::HasInternetCapability(int32_t slotId, int32_t cid)
3002d43be4eSopenharmony_ci{
3012d43be4eSopenharmony_ci    sptr<ICellularDataManager> proxy = GetProxy();
3022d43be4eSopenharmony_ci    if (proxy == nullptr) {
3032d43be4eSopenharmony_ci        TELEPHONY_LOGE("proxy is null");
3042d43be4eSopenharmony_ci        return TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
3052d43be4eSopenharmony_ci    }
3062d43be4eSopenharmony_ci    return proxy->HasInternetCapability(slotId, cid);
3072d43be4eSopenharmony_ci}
3082d43be4eSopenharmony_ci
3092d43be4eSopenharmony_ciint32_t CellularDataClient::ClearCellularDataConnections(int32_t slotId)
3102d43be4eSopenharmony_ci{
3112d43be4eSopenharmony_ci    sptr<ICellularDataManager> proxy = GetProxy();
3122d43be4eSopenharmony_ci    if (proxy == nullptr) {
3132d43be4eSopenharmony_ci        TELEPHONY_LOGE("proxy is null");
3142d43be4eSopenharmony_ci        return TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
3152d43be4eSopenharmony_ci    }
3162d43be4eSopenharmony_ci    return proxy->ClearCellularDataConnections(slotId);
3172d43be4eSopenharmony_ci}
3182d43be4eSopenharmony_ci
3192d43be4eSopenharmony_ciint32_t CellularDataClient::GetDataConnApnAttr(int32_t slotId, ApnItem::Attribute &apnAttr)
3202d43be4eSopenharmony_ci{
3212d43be4eSopenharmony_ci    sptr<ICellularDataManager> proxy = GetProxy();
3222d43be4eSopenharmony_ci    if (proxy == nullptr) {
3232d43be4eSopenharmony_ci        TELEPHONY_LOGE("proxy is null");
3242d43be4eSopenharmony_ci        return TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
3252d43be4eSopenharmony_ci    }
3262d43be4eSopenharmony_ci    return proxy->GetDataConnApnAttr(slotId, apnAttr);
3272d43be4eSopenharmony_ci}
3282d43be4eSopenharmony_ci
3292d43be4eSopenharmony_ciint32_t CellularDataClient::GetDataConnIpType(int32_t slotId, std::string &ipType)
3302d43be4eSopenharmony_ci{
3312d43be4eSopenharmony_ci    sptr<ICellularDataManager> proxy = GetProxy();
3322d43be4eSopenharmony_ci    if (proxy == nullptr) {
3332d43be4eSopenharmony_ci        TELEPHONY_LOGE("proxy is null");
3342d43be4eSopenharmony_ci        return TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
3352d43be4eSopenharmony_ci    }
3362d43be4eSopenharmony_ci    return proxy->GetDataConnIpType(slotId, ipType);
3372d43be4eSopenharmony_ci}
3382d43be4eSopenharmony_ci
3392d43be4eSopenharmony_ciint32_t CellularDataClient::ClearAllConnections(int32_t slotId, DisConnectionReason reason)
3402d43be4eSopenharmony_ci{
3412d43be4eSopenharmony_ci    sptr<ICellularDataManager> proxy = GetProxy();
3422d43be4eSopenharmony_ci    if (proxy == nullptr) {
3432d43be4eSopenharmony_ci        TELEPHONY_LOGE("proxy is null");
3442d43be4eSopenharmony_ci        return TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
3452d43be4eSopenharmony_ci    }
3462d43be4eSopenharmony_ci    return proxy->ClearAllConnections(slotId, reason);
3472d43be4eSopenharmony_ci}
3482d43be4eSopenharmony_ci
3492d43be4eSopenharmony_ciint32_t CellularDataClient::HandleApnChanged(int32_t slotId)
3502d43be4eSopenharmony_ci{
3512d43be4eSopenharmony_ci    sptr<ICellularDataManager> proxy = GetProxy();
3522d43be4eSopenharmony_ci    if (proxy == nullptr) {
3532d43be4eSopenharmony_ci        TELEPHONY_LOGE("proxy is null");
3542d43be4eSopenharmony_ci        return TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
3552d43be4eSopenharmony_ci    }
3562d43be4eSopenharmony_ci    return proxy->HandleApnChanged(slotId);
3572d43be4eSopenharmony_ci}
3582d43be4eSopenharmony_ci
3592d43be4eSopenharmony_ciint32_t CellularDataClient::IsNeedDoRecovery(int32_t slotId, bool needDoRecovery)
3602d43be4eSopenharmony_ci{
3612d43be4eSopenharmony_ci    sptr<ICellularDataManager> proxy = GetProxy();
3622d43be4eSopenharmony_ci    if (proxy == nullptr) {
3632d43be4eSopenharmony_ci        TELEPHONY_LOGE("proxy is null");
3642d43be4eSopenharmony_ci        return TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
3652d43be4eSopenharmony_ci    }
3662d43be4eSopenharmony_ci    return proxy->IsNeedDoRecovery(slotId, needDoRecovery);
3672d43be4eSopenharmony_ci}
3682d43be4eSopenharmony_ci
3692d43be4eSopenharmony_ciint32_t CellularDataClient::InitCellularDataController(int32_t slotId)
3702d43be4eSopenharmony_ci{
3712d43be4eSopenharmony_ci    sptr<ICellularDataManager> proxy = GetProxy();
3722d43be4eSopenharmony_ci    if (proxy == nullptr) {
3732d43be4eSopenharmony_ci        TELEPHONY_LOGE("proxy is null");
3742d43be4eSopenharmony_ci        return TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
3752d43be4eSopenharmony_ci    }
3762d43be4eSopenharmony_ci    return proxy->InitCellularDataController(slotId);
3772d43be4eSopenharmony_ci}
3782d43be4eSopenharmony_ci
3792d43be4eSopenharmony_ciint32_t CellularDataClient::GetIntelligenceSwitchState(bool &switchState)
3802d43be4eSopenharmony_ci{
3812d43be4eSopenharmony_ci    sptr<ICellularDataManager> proxy = GetProxy();
3822d43be4eSopenharmony_ci    if (proxy == nullptr) {
3832d43be4eSopenharmony_ci        TELEPHONY_LOGE("proxy is null");
3842d43be4eSopenharmony_ci        return TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
3852d43be4eSopenharmony_ci    }
3862d43be4eSopenharmony_ci    return proxy->GetIntelligenceSwitchState(switchState);
3872d43be4eSopenharmony_ci}
3882d43be4eSopenharmony_ci
3892d43be4eSopenharmony_cibool CellularDataClient::IsCellularDataSysAbilityExist(sptr<IRemoteObject> &object) __attribute__((no_sanitize("cfi")))
3902d43be4eSopenharmony_ci{
3912d43be4eSopenharmony_ci    sptr<ISystemAbilityManager> sm = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
3922d43be4eSopenharmony_ci    if (sm == nullptr) {
3932d43be4eSopenharmony_ci        TELEPHONY_LOGE("IsCellularDataSysAbilityExist Get ISystemAbilityManager failed, no SystemAbilityManager");
3942d43be4eSopenharmony_ci        return false;
3952d43be4eSopenharmony_ci    }
3962d43be4eSopenharmony_ci    object = sm->CheckSystemAbility(TELEPHONY_CELLULAR_DATA_SYS_ABILITY_ID);
3972d43be4eSopenharmony_ci    if (object == nullptr) {
3982d43be4eSopenharmony_ci        TELEPHONY_LOGE("No CesServiceAbility");
3992d43be4eSopenharmony_ci        return false;
4002d43be4eSopenharmony_ci    }
4012d43be4eSopenharmony_ci    return true;
4022d43be4eSopenharmony_ci}
4032d43be4eSopenharmony_ci
4042d43be4eSopenharmony_ciint32_t CellularDataClient::EstablishAllApnsIfConnectable(int32_t slotId)
4052d43be4eSopenharmony_ci{
4062d43be4eSopenharmony_ci    sptr<ICellularDataManager> proxy = GetProxy();
4072d43be4eSopenharmony_ci    if (proxy == nullptr) {
4082d43be4eSopenharmony_ci        TELEPHONY_LOGE("proxy is null");
4092d43be4eSopenharmony_ci        return TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
4102d43be4eSopenharmony_ci    }
4112d43be4eSopenharmony_ci    return proxy->EstablishAllApnsIfConnectable(slotId);
4122d43be4eSopenharmony_ci}
4132d43be4eSopenharmony_ci
4142d43be4eSopenharmony_ciint32_t CellularDataClient::ReleaseCellularDataConnection(int32_t slotId)
4152d43be4eSopenharmony_ci{
4162d43be4eSopenharmony_ci    sptr<ICellularDataManager> proxy = GetProxy();
4172d43be4eSopenharmony_ci    if (proxy == nullptr) {
4182d43be4eSopenharmony_ci        TELEPHONY_LOGE("proxy is null");
4192d43be4eSopenharmony_ci        return TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
4202d43be4eSopenharmony_ci    }
4212d43be4eSopenharmony_ci    return proxy->ReleaseCellularDataConnection(slotId);
4222d43be4eSopenharmony_ci}
4232d43be4eSopenharmony_ci
4242d43be4eSopenharmony_ciint32_t CellularDataClient::GetCellularDataSupplierId(int32_t slotId, uint64_t capability, uint32_t &supplierId)
4252d43be4eSopenharmony_ci{
4262d43be4eSopenharmony_ci    sptr<ICellularDataManager> proxy = GetProxy();
4272d43be4eSopenharmony_ci    if (proxy == nullptr) {
4282d43be4eSopenharmony_ci        TELEPHONY_LOGE("proxy is null");
4292d43be4eSopenharmony_ci        return TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
4302d43be4eSopenharmony_ci    }
4312d43be4eSopenharmony_ci    return proxy->GetCellularDataSupplierId(slotId, capability, supplierId);
4322d43be4eSopenharmony_ci}
4332d43be4eSopenharmony_ci
4342d43be4eSopenharmony_ciint32_t CellularDataClient::CorrectNetSupplierNoAvailable(int32_t slotId)
4352d43be4eSopenharmony_ci{
4362d43be4eSopenharmony_ci    sptr<ICellularDataManager> proxy = GetProxy();
4372d43be4eSopenharmony_ci    if (proxy == nullptr) {
4382d43be4eSopenharmony_ci        TELEPHONY_LOGE("proxy is null");
4392d43be4eSopenharmony_ci        return TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
4402d43be4eSopenharmony_ci    }
4412d43be4eSopenharmony_ci    return proxy->CorrectNetSupplierNoAvailable(slotId);
4422d43be4eSopenharmony_ci}
4432d43be4eSopenharmony_ci
4442d43be4eSopenharmony_ciint32_t CellularDataClient::GetSupplierRegisterState(uint32_t supplierId, int32_t &regState)
4452d43be4eSopenharmony_ci{
4462d43be4eSopenharmony_ci    sptr<ICellularDataManager> proxy = GetProxy();
4472d43be4eSopenharmony_ci    if (proxy == nullptr) {
4482d43be4eSopenharmony_ci        TELEPHONY_LOGE("proxy is null");
4492d43be4eSopenharmony_ci        return TELEPHONY_ERR_IPC_CONNECT_STUB_FAIL;
4502d43be4eSopenharmony_ci    }
4512d43be4eSopenharmony_ci    return proxy->GetSupplierRegisterState(supplierId, regState);
4522d43be4eSopenharmony_ci}
4532d43be4eSopenharmony_ci} // namespace Telephony
4542d43be4eSopenharmony_ci} // namespace OHOS
455