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_service_stub.h"
172d43be4eSopenharmony_ci
182d43be4eSopenharmony_ci#include <string_ex.h>
192d43be4eSopenharmony_ci
202d43be4eSopenharmony_ci#include "cellular_data_controller.h"
212d43be4eSopenharmony_ci#include "cellular_data_service.h"
222d43be4eSopenharmony_ci#include "ipc_skeleton.h"
232d43be4eSopenharmony_ci#include "sim_account_callback_proxy.h"
242d43be4eSopenharmony_ci#include "telephony_errors.h"
252d43be4eSopenharmony_ci#include "telephony_log_wrapper.h"
262d43be4eSopenharmony_ci
272d43be4eSopenharmony_ci#ifdef HICOLLIE_ENABLE
282d43be4eSopenharmony_ci#include "xcollie/xcollie.h"
292d43be4eSopenharmony_ci#include "xcollie/xcollie_define.h"
302d43be4eSopenharmony_ci#define XCOLLIE_TIMEOUT_SECONDS 30
312d43be4eSopenharmony_ci#endif
322d43be4eSopenharmony_ci
332d43be4eSopenharmony_cinamespace OHOS {
342d43be4eSopenharmony_cinamespace Telephony {
352d43be4eSopenharmony_ciCellularDataServiceStub::CellularDataServiceStub() = default;
362d43be4eSopenharmony_ci
372d43be4eSopenharmony_ciCellularDataServiceStub::~CellularDataServiceStub() = default;
382d43be4eSopenharmony_ci
392d43be4eSopenharmony_ciint32_t CellularDataServiceStub::OnRemoteRequest(
402d43be4eSopenharmony_ci    uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option)
412d43be4eSopenharmony_ci{
422d43be4eSopenharmony_ci    std::u16string myDescriptor = CellularDataServiceStub::GetDescriptor();
432d43be4eSopenharmony_ci    std::u16string remoteDescriptor = data.ReadInterfaceToken();
442d43be4eSopenharmony_ci    // NetManager has no transport description
452d43be4eSopenharmony_ci    if (myDescriptor != remoteDescriptor) {
462d43be4eSopenharmony_ci        TELEPHONY_LOGE("descriptor check fail!");
472d43be4eSopenharmony_ci        return TELEPHONY_ERR_DESCRIPTOR_MISMATCH;
482d43be4eSopenharmony_ci    }
492d43be4eSopenharmony_ci    std::map<uint32_t, Fun>::iterator it = eventIdFunMap_.find(code);
502d43be4eSopenharmony_ci    if (it != eventIdFunMap_.end()) {
512d43be4eSopenharmony_ci        if (it->second != nullptr) {
522d43be4eSopenharmony_ci            int32_t idTimer = SetTimer(code);
532d43be4eSopenharmony_ci            int32_t result = it->second(data, reply);
542d43be4eSopenharmony_ci            CancelTimer(idTimer);
552d43be4eSopenharmony_ci            return result;
562d43be4eSopenharmony_ci        }
572d43be4eSopenharmony_ci    } else {
582d43be4eSopenharmony_ci        TELEPHONY_LOGE("event code is not exist");
592d43be4eSopenharmony_ci    }
602d43be4eSopenharmony_ci    return IPCObjectStub::OnRemoteRequest(code, data, reply, option);
612d43be4eSopenharmony_ci}
622d43be4eSopenharmony_ci
632d43be4eSopenharmony_ciint32_t CellularDataServiceStub::SetTimer(uint32_t code)
642d43be4eSopenharmony_ci{
652d43be4eSopenharmony_ci#ifdef HICOLLIE_ENABLE
662d43be4eSopenharmony_ci    int32_t idTimer = HiviewDFX::INVALID_ID;
672d43be4eSopenharmony_ci    std::map<uint32_t, std::string>::iterator itCollieId = collieCodeStringMap_.find(code);
682d43be4eSopenharmony_ci    if (itCollieId != collieCodeStringMap_.end()) {
692d43be4eSopenharmony_ci        std::string collieStr = itCollieId->second;
702d43be4eSopenharmony_ci        std::string collieName = "CellularDataServiceStub: " + collieStr;
712d43be4eSopenharmony_ci        unsigned int flag = HiviewDFX::XCOLLIE_FLAG_NOOP;
722d43be4eSopenharmony_ci        auto TimerCallback = [collieStr](void *) {
732d43be4eSopenharmony_ci            TELEPHONY_LOGE("OnRemoteRequest timeout func: %{public}s", collieStr.c_str());
742d43be4eSopenharmony_ci        };
752d43be4eSopenharmony_ci        idTimer = HiviewDFX::XCollie::GetInstance().SetTimer(
762d43be4eSopenharmony_ci            collieName, XCOLLIE_TIMEOUT_SECONDS, TimerCallback, nullptr, flag);
772d43be4eSopenharmony_ci        TELEPHONY_LOGD("SetTimer id: %{public}d, name: %{public}s.", idTimer, collieStr.c_str());
782d43be4eSopenharmony_ci    }
792d43be4eSopenharmony_ci    return idTimer;
802d43be4eSopenharmony_ci#else
812d43be4eSopenharmony_ci    TELEPHONY_LOGD("No HICOLLIE_ENABLE");
822d43be4eSopenharmony_ci    return -1;
832d43be4eSopenharmony_ci#endif
842d43be4eSopenharmony_ci}
852d43be4eSopenharmony_ci
862d43be4eSopenharmony_civoid CellularDataServiceStub::CancelTimer(int32_t id)
872d43be4eSopenharmony_ci{
882d43be4eSopenharmony_ci#ifdef HICOLLIE_ENABLE
892d43be4eSopenharmony_ci    if (id == HiviewDFX::INVALID_ID) {
902d43be4eSopenharmony_ci        return;
912d43be4eSopenharmony_ci    }
922d43be4eSopenharmony_ci    TELEPHONY_LOGD("CancelTimer id: %{public}d.", id);
932d43be4eSopenharmony_ci    HiviewDFX::XCollie::GetInstance().CancelTimer(id);
942d43be4eSopenharmony_ci#else
952d43be4eSopenharmony_ci    return;
962d43be4eSopenharmony_ci#endif
972d43be4eSopenharmony_ci}
982d43be4eSopenharmony_ci
992d43be4eSopenharmony_ciint32_t CellularDataServiceStub::OnIsCellularDataEnabled(MessageParcel &data, MessageParcel &reply)
1002d43be4eSopenharmony_ci{
1012d43be4eSopenharmony_ci    bool dataEnabled = false;
1022d43be4eSopenharmony_ci    int32_t result = IsCellularDataEnabled(dataEnabled);
1032d43be4eSopenharmony_ci    if (!reply.WriteInt32(result)) {
1042d43be4eSopenharmony_ci        TELEPHONY_LOGE("write int32 reply failed.");
1052d43be4eSopenharmony_ci        return TELEPHONY_ERR_WRITE_REPLY_FAIL;
1062d43be4eSopenharmony_ci    }
1072d43be4eSopenharmony_ci    if (result != TELEPHONY_ERR_SUCCESS) {
1082d43be4eSopenharmony_ci        return result;
1092d43be4eSopenharmony_ci    }
1102d43be4eSopenharmony_ci    if (!reply.WriteBool(dataEnabled)) {
1112d43be4eSopenharmony_ci        TELEPHONY_LOGE("write bool reply failed.");
1122d43be4eSopenharmony_ci        return TELEPHONY_ERR_WRITE_REPLY_FAIL;
1132d43be4eSopenharmony_ci    }
1142d43be4eSopenharmony_ci    return TELEPHONY_SUCCESS;
1152d43be4eSopenharmony_ci}
1162d43be4eSopenharmony_ci
1172d43be4eSopenharmony_ciint32_t CellularDataServiceStub::OnEnableCellularData(MessageParcel &data, MessageParcel &reply)
1182d43be4eSopenharmony_ci{
1192d43be4eSopenharmony_ci    bool enable = data.ReadBool();
1202d43be4eSopenharmony_ci    int32_t result = EnableCellularData(enable);
1212d43be4eSopenharmony_ci    if (!reply.WriteInt32(result)) {
1222d43be4eSopenharmony_ci        TELEPHONY_LOGE("fail to write parcel");
1232d43be4eSopenharmony_ci        return TELEPHONY_ERR_WRITE_REPLY_FAIL;
1242d43be4eSopenharmony_ci    }
1252d43be4eSopenharmony_ci    return result;
1262d43be4eSopenharmony_ci}
1272d43be4eSopenharmony_ci
1282d43be4eSopenharmony_ciint32_t CellularDataServiceStub::OnEnableIntelligenceSwitch(MessageParcel &data, MessageParcel &reply)
1292d43be4eSopenharmony_ci{
1302d43be4eSopenharmony_ci    bool enable = data.ReadBool();
1312d43be4eSopenharmony_ci    int32_t result = EnableIntelligenceSwitch(enable);
1322d43be4eSopenharmony_ci    if (!reply.WriteInt32(result)) {
1332d43be4eSopenharmony_ci        TELEPHONY_LOGE("fail to write parcel");
1342d43be4eSopenharmony_ci        return TELEPHONY_ERR_WRITE_REPLY_FAIL;
1352d43be4eSopenharmony_ci    }
1362d43be4eSopenharmony_ci    return result;
1372d43be4eSopenharmony_ci}
1382d43be4eSopenharmony_ci
1392d43be4eSopenharmony_ciint32_t CellularDataServiceStub::OnGetCellularDataState(MessageParcel &data, MessageParcel &reply)
1402d43be4eSopenharmony_ci{
1412d43be4eSopenharmony_ci    int32_t result = GetCellularDataState();
1422d43be4eSopenharmony_ci    if (!reply.WriteInt32(result)) {
1432d43be4eSopenharmony_ci        TELEPHONY_LOGE("fail to write parcel");
1442d43be4eSopenharmony_ci        return TELEPHONY_ERR_WRITE_REPLY_FAIL;
1452d43be4eSopenharmony_ci    }
1462d43be4eSopenharmony_ci    return result;
1472d43be4eSopenharmony_ci}
1482d43be4eSopenharmony_ci
1492d43be4eSopenharmony_ciint32_t CellularDataServiceStub::OnIsCellularDataRoamingEnabled(MessageParcel &data, MessageParcel &reply)
1502d43be4eSopenharmony_ci{
1512d43be4eSopenharmony_ci    int32_t slotId = data.ReadInt32();
1522d43be4eSopenharmony_ci    bool dataRoamingEnabled = false;
1532d43be4eSopenharmony_ci    int32_t result = IsCellularDataRoamingEnabled(slotId, dataRoamingEnabled);
1542d43be4eSopenharmony_ci    if (!reply.WriteInt32(result)) {
1552d43be4eSopenharmony_ci        TELEPHONY_LOGE("write int32 reply failed.");
1562d43be4eSopenharmony_ci        return TELEPHONY_ERR_WRITE_REPLY_FAIL;
1572d43be4eSopenharmony_ci    }
1582d43be4eSopenharmony_ci    if (result != TELEPHONY_ERR_SUCCESS) {
1592d43be4eSopenharmony_ci        return result;
1602d43be4eSopenharmony_ci    }
1612d43be4eSopenharmony_ci    if (!reply.WriteBool(dataRoamingEnabled)) {
1622d43be4eSopenharmony_ci        TELEPHONY_LOGE("write bool reply failed.");
1632d43be4eSopenharmony_ci        return TELEPHONY_ERR_WRITE_REPLY_FAIL;
1642d43be4eSopenharmony_ci    }
1652d43be4eSopenharmony_ci
1662d43be4eSopenharmony_ci    return TELEPHONY_SUCCESS;
1672d43be4eSopenharmony_ci}
1682d43be4eSopenharmony_ci
1692d43be4eSopenharmony_ciint32_t CellularDataServiceStub::OnEnableCellularDataRoaming(MessageParcel &data, MessageParcel &reply)
1702d43be4eSopenharmony_ci{
1712d43be4eSopenharmony_ci    int32_t slotId = data.ReadInt32();
1722d43be4eSopenharmony_ci    bool enable = data.ReadBool();
1732d43be4eSopenharmony_ci    int32_t result = EnableCellularDataRoaming(slotId, enable);
1742d43be4eSopenharmony_ci    if (!reply.WriteInt32(result)) {
1752d43be4eSopenharmony_ci        TELEPHONY_LOGE("fail to write parcel");
1762d43be4eSopenharmony_ci        return TELEPHONY_ERR_WRITE_REPLY_FAIL;
1772d43be4eSopenharmony_ci    }
1782d43be4eSopenharmony_ci    return result;
1792d43be4eSopenharmony_ci}
1802d43be4eSopenharmony_ci
1812d43be4eSopenharmony_ciint32_t CellularDataServiceStub::OnGetIntelligenceSwitchState(MessageParcel &data, MessageParcel &reply)
1822d43be4eSopenharmony_ci{
1832d43be4eSopenharmony_ci    bool switchState = false;
1842d43be4eSopenharmony_ci    int32_t result = GetIntelligenceSwitchState(switchState);
1852d43be4eSopenharmony_ci    if (!reply.WriteInt32(result)) {
1862d43be4eSopenharmony_ci        TELEPHONY_LOGE("write int32 reply failed.");
1872d43be4eSopenharmony_ci        return TELEPHONY_ERR_WRITE_REPLY_FAIL;
1882d43be4eSopenharmony_ci    }
1892d43be4eSopenharmony_ci    if (result != TELEPHONY_ERR_SUCCESS) {
1902d43be4eSopenharmony_ci        return result;
1912d43be4eSopenharmony_ci    }
1922d43be4eSopenharmony_ci    if (!reply.WriteBool(switchState)) {
1932d43be4eSopenharmony_ci        TELEPHONY_LOGE("write bool reply failed.");
1942d43be4eSopenharmony_ci        return TELEPHONY_ERR_WRITE_REPLY_FAIL;
1952d43be4eSopenharmony_ci    }
1962d43be4eSopenharmony_ci    return TELEPHONY_SUCCESS;
1972d43be4eSopenharmony_ci}
1982d43be4eSopenharmony_ci
1992d43be4eSopenharmony_ciint32_t CellularDataServiceStub::OnHandleApnChanged(MessageParcel &data, MessageParcel &reply)
2002d43be4eSopenharmony_ci{
2012d43be4eSopenharmony_ci    int32_t slotId = data.ReadInt32();
2022d43be4eSopenharmony_ci    int32_t result = HandleApnChanged(slotId);
2032d43be4eSopenharmony_ci    if (!reply.WriteInt32(result)) {
2042d43be4eSopenharmony_ci        TELEPHONY_LOGE("fail to write parcel");
2052d43be4eSopenharmony_ci        return TELEPHONY_ERR_WRITE_REPLY_FAIL;
2062d43be4eSopenharmony_ci    }
2072d43be4eSopenharmony_ci    return result;
2082d43be4eSopenharmony_ci}
2092d43be4eSopenharmony_ci
2102d43be4eSopenharmony_ciint32_t CellularDataServiceStub::OnGetDefaultCellularDataSlotId(MessageParcel &data, MessageParcel &reply)
2112d43be4eSopenharmony_ci{
2122d43be4eSopenharmony_ci    int32_t result = GetDefaultCellularDataSlotId();
2132d43be4eSopenharmony_ci    if (!reply.WriteInt32(result)) {
2142d43be4eSopenharmony_ci        TELEPHONY_LOGE("fail to write parcel");
2152d43be4eSopenharmony_ci        return TELEPHONY_ERR_WRITE_REPLY_FAIL;
2162d43be4eSopenharmony_ci    }
2172d43be4eSopenharmony_ci    return result;
2182d43be4eSopenharmony_ci}
2192d43be4eSopenharmony_ci
2202d43be4eSopenharmony_ciint32_t CellularDataServiceStub::OnGetDefaultCellularDataSimId(MessageParcel &data, MessageParcel &reply)
2212d43be4eSopenharmony_ci{
2222d43be4eSopenharmony_ci    int32_t simId = 0;
2232d43be4eSopenharmony_ci    int32_t result = GetDefaultCellularDataSimId(simId);
2242d43be4eSopenharmony_ci    if (!reply.WriteInt32(result)) {
2252d43be4eSopenharmony_ci        TELEPHONY_LOGE("write int32 reply failed.");
2262d43be4eSopenharmony_ci        return TELEPHONY_ERR_WRITE_REPLY_FAIL;
2272d43be4eSopenharmony_ci    }
2282d43be4eSopenharmony_ci    if (result != TELEPHONY_ERR_SUCCESS) {
2292d43be4eSopenharmony_ci        return result;
2302d43be4eSopenharmony_ci    }
2312d43be4eSopenharmony_ci    if (!reply.WriteInt32(simId)) {
2322d43be4eSopenharmony_ci        TELEPHONY_LOGE("write int32 reply failed.");
2332d43be4eSopenharmony_ci        return TELEPHONY_ERR_WRITE_REPLY_FAIL;
2342d43be4eSopenharmony_ci    }
2352d43be4eSopenharmony_ci    return TELEPHONY_SUCCESS;
2362d43be4eSopenharmony_ci}
2372d43be4eSopenharmony_ci
2382d43be4eSopenharmony_ciint32_t CellularDataServiceStub::OnSetDefaultCellularDataSlotId(MessageParcel &data, MessageParcel &reply)
2392d43be4eSopenharmony_ci{
2402d43be4eSopenharmony_ci    int32_t slotId = data.ReadInt32();
2412d43be4eSopenharmony_ci    int32_t result = SetDefaultCellularDataSlotId(slotId);
2422d43be4eSopenharmony_ci    if (!reply.WriteInt32(result)) {
2432d43be4eSopenharmony_ci        TELEPHONY_LOGE("fail to write parcel");
2442d43be4eSopenharmony_ci        return TELEPHONY_ERR_WRITE_REPLY_FAIL;
2452d43be4eSopenharmony_ci    }
2462d43be4eSopenharmony_ci    return result;
2472d43be4eSopenharmony_ci}
2482d43be4eSopenharmony_ci
2492d43be4eSopenharmony_ciint32_t CellularDataServiceStub::OnGetCellularDataFlowType(MessageParcel &data, MessageParcel &reply)
2502d43be4eSopenharmony_ci{
2512d43be4eSopenharmony_ci    int32_t result = GetCellularDataFlowType();
2522d43be4eSopenharmony_ci    if (!reply.WriteInt32(result)) {
2532d43be4eSopenharmony_ci        TELEPHONY_LOGE("fail to write parcel");
2542d43be4eSopenharmony_ci        return TELEPHONY_ERR_WRITE_REPLY_FAIL;
2552d43be4eSopenharmony_ci    }
2562d43be4eSopenharmony_ci    return result;
2572d43be4eSopenharmony_ci}
2582d43be4eSopenharmony_ci
2592d43be4eSopenharmony_ciint32_t CellularDataServiceStub::OnHasInternetCapability(MessageParcel &data, MessageParcel &reply)
2602d43be4eSopenharmony_ci{
2612d43be4eSopenharmony_ci    int32_t slotId = data.ReadInt32();
2622d43be4eSopenharmony_ci    int32_t cid = data.ReadInt32();
2632d43be4eSopenharmony_ci    int32_t result = HasInternetCapability(slotId, cid);
2642d43be4eSopenharmony_ci    if (!reply.WriteInt32(result)) {
2652d43be4eSopenharmony_ci        TELEPHONY_LOGE("fail to write parcel");
2662d43be4eSopenharmony_ci        return TELEPHONY_ERR_WRITE_REPLY_FAIL;
2672d43be4eSopenharmony_ci    }
2682d43be4eSopenharmony_ci    return result;
2692d43be4eSopenharmony_ci}
2702d43be4eSopenharmony_ci
2712d43be4eSopenharmony_ciint32_t CellularDataServiceStub::OnClearCellularDataConnections(MessageParcel &data, MessageParcel &reply)
2722d43be4eSopenharmony_ci{
2732d43be4eSopenharmony_ci    int32_t slotId = data.ReadInt32();
2742d43be4eSopenharmony_ci    int32_t result = ClearCellularDataConnections(slotId);
2752d43be4eSopenharmony_ci    if (!reply.WriteInt32(result)) {
2762d43be4eSopenharmony_ci        TELEPHONY_LOGE("fail to write parcel");
2772d43be4eSopenharmony_ci        return TELEPHONY_ERR_WRITE_REPLY_FAIL;
2782d43be4eSopenharmony_ci    }
2792d43be4eSopenharmony_ci    return result;
2802d43be4eSopenharmony_ci}
2812d43be4eSopenharmony_ci
2822d43be4eSopenharmony_ciint32_t CellularDataServiceStub::OnClearAllConnections(MessageParcel &data, MessageParcel &reply)
2832d43be4eSopenharmony_ci{
2842d43be4eSopenharmony_ci    int32_t slotId = data.ReadInt32();
2852d43be4eSopenharmony_ci    DisConnectionReason reason = static_cast<DisConnectionReason>(data.ReadInt32());
2862d43be4eSopenharmony_ci    int32_t result = ClearAllConnections(slotId, reason);
2872d43be4eSopenharmony_ci    if (!reply.WriteInt32(result)) {
2882d43be4eSopenharmony_ci        TELEPHONY_LOGE("fail to write parcel");
2892d43be4eSopenharmony_ci        return TELEPHONY_ERR_WRITE_REPLY_FAIL;
2902d43be4eSopenharmony_ci    }
2912d43be4eSopenharmony_ci    return result;
2922d43be4eSopenharmony_ci}
2932d43be4eSopenharmony_ci
2942d43be4eSopenharmony_ciint32_t CellularDataServiceStub::OnRegisterSimAccountCallback(MessageParcel &data, MessageParcel &reply)
2952d43be4eSopenharmony_ci{
2962d43be4eSopenharmony_ci    sptr<SimAccountCallback> callback = iface_cast<SimAccountCallback>(data.ReadRemoteObject());
2972d43be4eSopenharmony_ci    int32_t result;
2982d43be4eSopenharmony_ci    if (callback == nullptr) {
2992d43be4eSopenharmony_ci        TELEPHONY_LOGE("callback is nullptr!");
3002d43be4eSopenharmony_ci        result = TELEPHONY_ERR_ARGUMENT_NULL;
3012d43be4eSopenharmony_ci    } else {
3022d43be4eSopenharmony_ci        result = RegisterSimAccountCallback(callback);
3032d43be4eSopenharmony_ci    }
3042d43be4eSopenharmony_ci    reply.WriteInt32(result);
3052d43be4eSopenharmony_ci    return result;
3062d43be4eSopenharmony_ci}
3072d43be4eSopenharmony_ci
3082d43be4eSopenharmony_ciint32_t CellularDataServiceStub::OnUnregisterSimAccountCallback(MessageParcel &data, MessageParcel &reply)
3092d43be4eSopenharmony_ci{
3102d43be4eSopenharmony_ci    int32_t result = UnregisterSimAccountCallback();
3112d43be4eSopenharmony_ci    reply.WriteInt32(result);
3122d43be4eSopenharmony_ci    return result;
3132d43be4eSopenharmony_ci}
3142d43be4eSopenharmony_ci
3152d43be4eSopenharmony_ciint32_t CellularDataServiceStub::OnGetDataConnApnAttr(MessageParcel &data, MessageParcel &reply)
3162d43be4eSopenharmony_ci{
3172d43be4eSopenharmony_ci    int32_t slotId = data.ReadInt32();
3182d43be4eSopenharmony_ci    ApnItem::Attribute apnAttr;
3192d43be4eSopenharmony_ci    int32_t result = GetDataConnApnAttr(slotId, apnAttr);
3202d43be4eSopenharmony_ci    if (!reply.WriteInt32(result)) {
3212d43be4eSopenharmony_ci        TELEPHONY_LOGE("write int32 reply failed.");
3222d43be4eSopenharmony_ci        return TELEPHONY_ERR_WRITE_REPLY_FAIL;
3232d43be4eSopenharmony_ci    }
3242d43be4eSopenharmony_ci    if (!reply.WriteRawData(&apnAttr, sizeof(ApnItem::Attribute))) {
3252d43be4eSopenharmony_ci        TELEPHONY_LOGE("write apnAttr reply failed.");
3262d43be4eSopenharmony_ci        return TELEPHONY_ERR_WRITE_REPLY_FAIL;
3272d43be4eSopenharmony_ci    }
3282d43be4eSopenharmony_ci    return TELEPHONY_SUCCESS;
3292d43be4eSopenharmony_ci}
3302d43be4eSopenharmony_ci
3312d43be4eSopenharmony_ciint32_t CellularDataServiceStub::OnGetDataConnIpType(MessageParcel &data, MessageParcel &reply)
3322d43be4eSopenharmony_ci{
3332d43be4eSopenharmony_ci    int32_t slotId = data.ReadInt32();
3342d43be4eSopenharmony_ci    std::string ipType;
3352d43be4eSopenharmony_ci    int32_t result = GetDataConnIpType(slotId, ipType);
3362d43be4eSopenharmony_ci    if (!reply.WriteInt32(result)) {
3372d43be4eSopenharmony_ci        TELEPHONY_LOGE("write int32 reply failed.");
3382d43be4eSopenharmony_ci        return TELEPHONY_ERR_WRITE_REPLY_FAIL;
3392d43be4eSopenharmony_ci    }
3402d43be4eSopenharmony_ci    if (!reply.WriteString(ipType)) {
3412d43be4eSopenharmony_ci        TELEPHONY_LOGE("write int32 reply failed.");
3422d43be4eSopenharmony_ci        return TELEPHONY_ERR_WRITE_REPLY_FAIL;
3432d43be4eSopenharmony_ci    }
3442d43be4eSopenharmony_ci    return TELEPHONY_SUCCESS;
3452d43be4eSopenharmony_ci}
3462d43be4eSopenharmony_ci
3472d43be4eSopenharmony_ciint32_t CellularDataServiceStub::OnGetApnState(MessageParcel &data, MessageParcel &reply)
3482d43be4eSopenharmony_ci{
3492d43be4eSopenharmony_ci    int32_t slotId = data.ReadInt32();
3502d43be4eSopenharmony_ci    std::string apnType = data.ReadString();
3512d43be4eSopenharmony_ci    int32_t result = GetApnState(slotId, apnType);
3522d43be4eSopenharmony_ci    if (!reply.WriteInt32(result)) {
3532d43be4eSopenharmony_ci        TELEPHONY_LOGE("fail to write parcel");
3542d43be4eSopenharmony_ci        return TELEPHONY_ERR_WRITE_REPLY_FAIL;
3552d43be4eSopenharmony_ci    }
3562d43be4eSopenharmony_ci    return result;
3572d43be4eSopenharmony_ci}
3582d43be4eSopenharmony_ci
3592d43be4eSopenharmony_ciint32_t CellularDataServiceStub::OnGetRecoveryState(MessageParcel &data, MessageParcel &reply)
3602d43be4eSopenharmony_ci{
3612d43be4eSopenharmony_ci    int32_t result = GetDataRecoveryState();
3622d43be4eSopenharmony_ci    if (!reply.WriteInt32(result)) {
3632d43be4eSopenharmony_ci        TELEPHONY_LOGE("fail to write parcel");
3642d43be4eSopenharmony_ci        return TELEPHONY_ERR_WRITE_REPLY_FAIL;
3652d43be4eSopenharmony_ci    }
3662d43be4eSopenharmony_ci    return result;
3672d43be4eSopenharmony_ci}
3682d43be4eSopenharmony_ci
3692d43be4eSopenharmony_ciint32_t CellularDataServiceStub::OnIsNeedDoRecovery(MessageParcel &data, MessageParcel &reply)
3702d43be4eSopenharmony_ci{
3712d43be4eSopenharmony_ci    int32_t slotId = data.ReadInt32();
3722d43be4eSopenharmony_ci    int32_t needDoRecovery = data.ReadBool();
3732d43be4eSopenharmony_ci    int32_t result = IsNeedDoRecovery(slotId, needDoRecovery);
3742d43be4eSopenharmony_ci    if (!reply.WriteInt32(result)) {
3752d43be4eSopenharmony_ci        TELEPHONY_LOGE("write int32 reply failed.");
3762d43be4eSopenharmony_ci        return TELEPHONY_ERR_WRITE_REPLY_FAIL;
3772d43be4eSopenharmony_ci    }
3782d43be4eSopenharmony_ci    return result;
3792d43be4eSopenharmony_ci}
3802d43be4eSopenharmony_ci
3812d43be4eSopenharmony_ciint32_t CellularDataServiceStub::OnInitCellularDataController(MessageParcel &data, MessageParcel &reply)
3822d43be4eSopenharmony_ci{
3832d43be4eSopenharmony_ci    int32_t slotId = data.ReadInt32();
3842d43be4eSopenharmony_ci    int32_t result = InitCellularDataController(slotId);
3852d43be4eSopenharmony_ci    if (!reply.WriteInt32(result)) {
3862d43be4eSopenharmony_ci        TELEPHONY_LOGE("write int32 reply failed.");
3872d43be4eSopenharmony_ci        return TELEPHONY_ERR_WRITE_REPLY_FAIL;
3882d43be4eSopenharmony_ci    }
3892d43be4eSopenharmony_ci    return result;
3902d43be4eSopenharmony_ci}
3912d43be4eSopenharmony_ci
3922d43be4eSopenharmony_ciint32_t CellularDataServiceStub::OnEstablishAllApnsIfConnectable(MessageParcel &data, MessageParcel &reply)
3932d43be4eSopenharmony_ci{
3942d43be4eSopenharmony_ci    int32_t slotId = data.ReadInt32();
3952d43be4eSopenharmony_ci    int32_t result = EstablishAllApnsIfConnectable(slotId);
3962d43be4eSopenharmony_ci    if (!reply.WriteInt32(result)) {
3972d43be4eSopenharmony_ci        TELEPHONY_LOGE("fail to write parcel");
3982d43be4eSopenharmony_ci        return TELEPHONY_ERR_WRITE_REPLY_FAIL;
3992d43be4eSopenharmony_ci    }
4002d43be4eSopenharmony_ci    return result;
4012d43be4eSopenharmony_ci}
4022d43be4eSopenharmony_ci
4032d43be4eSopenharmony_ciint32_t CellularDataServiceStub::OnReleaseCellularDataConnection(MessageParcel &data, MessageParcel &reply)
4042d43be4eSopenharmony_ci{
4052d43be4eSopenharmony_ci    int32_t slotId;
4062d43be4eSopenharmony_ci    if (!data.ReadInt32(slotId)) {
4072d43be4eSopenharmony_ci        TELEPHONY_LOGE("write int32 slotId failed.");
4082d43be4eSopenharmony_ci        return TELEPHONY_ERR_READ_DATA_FAIL;
4092d43be4eSopenharmony_ci    }
4102d43be4eSopenharmony_ci    int32_t result = ReleaseCellularDataConnection(slotId);
4112d43be4eSopenharmony_ci    if (!reply.WriteInt32(result)) {
4122d43be4eSopenharmony_ci        TELEPHONY_LOGE("write int32 reply failed.");
4132d43be4eSopenharmony_ci        return TELEPHONY_ERR_WRITE_REPLY_FAIL;
4142d43be4eSopenharmony_ci    }
4152d43be4eSopenharmony_ci    return result;
4162d43be4eSopenharmony_ci}
4172d43be4eSopenharmony_ci
4182d43be4eSopenharmony_ciint32_t CellularDataServiceStub::OnGetCellularDataSupplierId(MessageParcel &data, MessageParcel &reply)
4192d43be4eSopenharmony_ci{
4202d43be4eSopenharmony_ci    int32_t slotId = data.ReadInt32();
4212d43be4eSopenharmony_ci    uint64_t capability = data.ReadUint64();
4222d43be4eSopenharmony_ci    uint32_t supplierId = 0;
4232d43be4eSopenharmony_ci    int32_t result = GetCellularDataSupplierId(slotId, capability, supplierId);
4242d43be4eSopenharmony_ci    if (!reply.WriteInt32(result)) {
4252d43be4eSopenharmony_ci        TELEPHONY_LOGE("write int32 reply failed.");
4262d43be4eSopenharmony_ci        return TELEPHONY_ERR_WRITE_REPLY_FAIL;
4272d43be4eSopenharmony_ci    }
4282d43be4eSopenharmony_ci    if (!reply.WriteUint32(supplierId)) {
4292d43be4eSopenharmony_ci        TELEPHONY_LOGE("write uint32 reply failed.");
4302d43be4eSopenharmony_ci        return TELEPHONY_ERR_WRITE_REPLY_FAIL;
4312d43be4eSopenharmony_ci    }
4322d43be4eSopenharmony_ci    return result;
4332d43be4eSopenharmony_ci}
4342d43be4eSopenharmony_ci
4352d43be4eSopenharmony_ciint32_t CellularDataServiceStub::OnCorrectNetSupplierNoAvailable(MessageParcel &data, MessageParcel &reply)
4362d43be4eSopenharmony_ci{
4372d43be4eSopenharmony_ci    int32_t slotId = data.ReadInt32();
4382d43be4eSopenharmony_ci    int32_t result = CorrectNetSupplierNoAvailable(slotId);
4392d43be4eSopenharmony_ci    if (!reply.WriteInt32(result)) {
4402d43be4eSopenharmony_ci        TELEPHONY_LOGE("write int32 reply failed.");
4412d43be4eSopenharmony_ci        return TELEPHONY_ERR_WRITE_REPLY_FAIL;
4422d43be4eSopenharmony_ci    }
4432d43be4eSopenharmony_ci    return result;
4442d43be4eSopenharmony_ci}
4452d43be4eSopenharmony_ci
4462d43be4eSopenharmony_ciint32_t CellularDataServiceStub::OnGetSupplierRegisterState(MessageParcel &data, MessageParcel &reply)
4472d43be4eSopenharmony_ci{
4482d43be4eSopenharmony_ci    uint32_t supplierId = data.ReadUint32();
4492d43be4eSopenharmony_ci    int32_t regState = -1;
4502d43be4eSopenharmony_ci    int32_t result = GetSupplierRegisterState(supplierId, regState);
4512d43be4eSopenharmony_ci    if (!reply.WriteInt32(result)) {
4522d43be4eSopenharmony_ci        TELEPHONY_LOGE("write int32 reply failed.");
4532d43be4eSopenharmony_ci        return TELEPHONY_ERR_WRITE_REPLY_FAIL;
4542d43be4eSopenharmony_ci    }
4552d43be4eSopenharmony_ci    if (!reply.WriteInt32(regState)) {
4562d43be4eSopenharmony_ci        TELEPHONY_LOGE("write int32 reply failed.");
4572d43be4eSopenharmony_ci        return TELEPHONY_ERR_WRITE_REPLY_FAIL;
4582d43be4eSopenharmony_ci    }
4592d43be4eSopenharmony_ci    return result;
4602d43be4eSopenharmony_ci}
4612d43be4eSopenharmony_ci} // namespace Telephony
4622d43be4eSopenharmony_ci} // namespace OHOS