12d43be4eSopenharmony_ci/*
22d43be4eSopenharmony_ci * Copyright (c) 2022 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 "getcellulardatastate_fuzzer.h"
172d43be4eSopenharmony_ci
182d43be4eSopenharmony_ci#include <cstddef>
192d43be4eSopenharmony_ci#include <cstdint>
202d43be4eSopenharmony_ci#define private public
212d43be4eSopenharmony_ci#include "adddatatoken_fuzzer.h"
222d43be4eSopenharmony_ci#include "cellular_data_service.h"
232d43be4eSopenharmony_ci#include "cellular_data_service_stub.h"
242d43be4eSopenharmony_ci#include "system_ability_definition.h"
252d43be4eSopenharmony_ci
262d43be4eSopenharmony_ciusing namespace OHOS::Telephony;
272d43be4eSopenharmony_cinamespace OHOS {
282d43be4eSopenharmony_cistatic bool g_isInited = false;
292d43be4eSopenharmony_ciconstexpr int32_t SLOT_NUM = 2;
302d43be4eSopenharmony_ci
312d43be4eSopenharmony_cibool IsServiceInited()
322d43be4eSopenharmony_ci{
332d43be4eSopenharmony_ci    if (!g_isInited) {
342d43be4eSopenharmony_ci        DelayedSingleton<CellularDataService>::GetInstance()->OnStart();
352d43be4eSopenharmony_ci        if (DelayedSingleton<CellularDataService>::GetInstance()->GetServiceRunningState() ==
362d43be4eSopenharmony_ci            static_cast<int32_t>(ServiceRunningState::STATE_RUNNING)) {
372d43be4eSopenharmony_ci            g_isInited = true;
382d43be4eSopenharmony_ci        }
392d43be4eSopenharmony_ci    }
402d43be4eSopenharmony_ci    return g_isInited;
412d43be4eSopenharmony_ci}
422d43be4eSopenharmony_ci
432d43be4eSopenharmony_civoid OnRemoteRequest(const uint8_t *data, size_t size)
442d43be4eSopenharmony_ci{
452d43be4eSopenharmony_ci    if (!IsServiceInited()) {
462d43be4eSopenharmony_ci        return;
472d43be4eSopenharmony_ci    }
482d43be4eSopenharmony_ci
492d43be4eSopenharmony_ci    MessageParcel dataMessageParcel;
502d43be4eSopenharmony_ci    if (!dataMessageParcel.WriteInterfaceToken(CellularDataServiceStub::GetDescriptor())) {
512d43be4eSopenharmony_ci        return;
522d43be4eSopenharmony_ci    }
532d43be4eSopenharmony_ci    dataMessageParcel.WriteBuffer(data, size);
542d43be4eSopenharmony_ci    dataMessageParcel.RewindRead(0);
552d43be4eSopenharmony_ci    uint32_t code = static_cast<uint32_t>(size);
562d43be4eSopenharmony_ci    MessageParcel reply;
572d43be4eSopenharmony_ci    MessageOption option;
582d43be4eSopenharmony_ci    DelayedSingleton<CellularDataService>::GetInstance()->OnRemoteRequest(code, dataMessageParcel, reply, option);
592d43be4eSopenharmony_ci}
602d43be4eSopenharmony_ci
612d43be4eSopenharmony_civoid EnableCellularData(const uint8_t *data, size_t size)
622d43be4eSopenharmony_ci{
632d43be4eSopenharmony_ci    if (!IsServiceInited()) {
642d43be4eSopenharmony_ci        return;
652d43be4eSopenharmony_ci    }
662d43be4eSopenharmony_ci
672d43be4eSopenharmony_ci    MessageParcel dataMessageParcel;
682d43be4eSopenharmony_ci    dataMessageParcel.WriteBuffer(data, size);
692d43be4eSopenharmony_ci    dataMessageParcel.RewindRead(0);
702d43be4eSopenharmony_ci    MessageParcel reply;
712d43be4eSopenharmony_ci    DelayedSingleton<CellularDataService>::GetInstance()->OnEnableCellularData(dataMessageParcel, reply);
722d43be4eSopenharmony_ci}
732d43be4eSopenharmony_ci
742d43be4eSopenharmony_civoid GetCellularDataState(const uint8_t *data, size_t size)
752d43be4eSopenharmony_ci{
762d43be4eSopenharmony_ci    if (!IsServiceInited()) {
772d43be4eSopenharmony_ci        return;
782d43be4eSopenharmony_ci    }
792d43be4eSopenharmony_ci
802d43be4eSopenharmony_ci    MessageParcel dataMessageParcel;
812d43be4eSopenharmony_ci    dataMessageParcel.WriteBuffer(data, size);
822d43be4eSopenharmony_ci    dataMessageParcel.RewindRead(0);
832d43be4eSopenharmony_ci    MessageParcel reply;
842d43be4eSopenharmony_ci    DelayedSingleton<CellularDataService>::GetInstance()->OnGetCellularDataState(dataMessageParcel, reply);
852d43be4eSopenharmony_ci}
862d43be4eSopenharmony_ci
872d43be4eSopenharmony_civoid IsCellularDataEnabled(const uint8_t *data, size_t size)
882d43be4eSopenharmony_ci{
892d43be4eSopenharmony_ci    if (!IsServiceInited()) {
902d43be4eSopenharmony_ci        return;
912d43be4eSopenharmony_ci    }
922d43be4eSopenharmony_ci
932d43be4eSopenharmony_ci    MessageParcel dataMessageParcel;
942d43be4eSopenharmony_ci    dataMessageParcel.WriteBuffer(data, size);
952d43be4eSopenharmony_ci    dataMessageParcel.RewindRead(0);
962d43be4eSopenharmony_ci    MessageParcel reply;
972d43be4eSopenharmony_ci    DelayedSingleton<CellularDataService>::GetInstance()->OnIsCellularDataEnabled(dataMessageParcel, reply);
982d43be4eSopenharmony_ci}
992d43be4eSopenharmony_ci
1002d43be4eSopenharmony_civoid IsCellularDataRoamingEnabled(const uint8_t *data, size_t size)
1012d43be4eSopenharmony_ci{
1022d43be4eSopenharmony_ci    if (!IsServiceInited()) {
1032d43be4eSopenharmony_ci        return;
1042d43be4eSopenharmony_ci    }
1052d43be4eSopenharmony_ci
1062d43be4eSopenharmony_ci    int32_t slotId = static_cast<int32_t>(size % SLOT_NUM);
1072d43be4eSopenharmony_ci    MessageParcel dataMessageParcel;
1082d43be4eSopenharmony_ci    dataMessageParcel.WriteInt32(slotId);
1092d43be4eSopenharmony_ci    dataMessageParcel.WriteBuffer(data, size);
1102d43be4eSopenharmony_ci    dataMessageParcel.RewindRead(0);
1112d43be4eSopenharmony_ci    MessageParcel reply;
1122d43be4eSopenharmony_ci    DelayedSingleton<CellularDataService>::GetInstance()->OnIsCellularDataRoamingEnabled(dataMessageParcel, reply);
1132d43be4eSopenharmony_ci}
1142d43be4eSopenharmony_ci
1152d43be4eSopenharmony_civoid GetDefaultCellularDataSlotId(const uint8_t *data, size_t size)
1162d43be4eSopenharmony_ci{
1172d43be4eSopenharmony_ci    if (!IsServiceInited()) {
1182d43be4eSopenharmony_ci        return;
1192d43be4eSopenharmony_ci    }
1202d43be4eSopenharmony_ci
1212d43be4eSopenharmony_ci    MessageParcel dataMessageParcel;
1222d43be4eSopenharmony_ci    dataMessageParcel.WriteBuffer(data, size);
1232d43be4eSopenharmony_ci    dataMessageParcel.RewindRead(0);
1242d43be4eSopenharmony_ci    MessageParcel reply;
1252d43be4eSopenharmony_ci    DelayedSingleton<CellularDataService>::GetInstance()->OnGetDefaultCellularDataSlotId(dataMessageParcel, reply);
1262d43be4eSopenharmony_ci}
1272d43be4eSopenharmony_ci
1282d43be4eSopenharmony_civoid EnableCellularDataRoaming(const uint8_t *data, size_t size)
1292d43be4eSopenharmony_ci{
1302d43be4eSopenharmony_ci    if (!IsServiceInited()) {
1312d43be4eSopenharmony_ci        return;
1322d43be4eSopenharmony_ci    }
1332d43be4eSopenharmony_ci
1342d43be4eSopenharmony_ci    int32_t slotId = static_cast<int32_t>(size % SLOT_NUM);
1352d43be4eSopenharmony_ci    MessageParcel dataMessageParcel;
1362d43be4eSopenharmony_ci    dataMessageParcel.WriteInt32(slotId);
1372d43be4eSopenharmony_ci    dataMessageParcel.WriteBuffer(data, size);
1382d43be4eSopenharmony_ci    dataMessageParcel.RewindRead(0);
1392d43be4eSopenharmony_ci    MessageParcel reply;
1402d43be4eSopenharmony_ci    DelayedSingleton<CellularDataService>::GetInstance()->OnEnableCellularDataRoaming(dataMessageParcel, reply);
1412d43be4eSopenharmony_ci}
1422d43be4eSopenharmony_ci
1432d43be4eSopenharmony_civoid SetDefaultCellularDataSlotId(const uint8_t *data, size_t size)
1442d43be4eSopenharmony_ci{
1452d43be4eSopenharmony_ci    if (!IsServiceInited()) {
1462d43be4eSopenharmony_ci        return;
1472d43be4eSopenharmony_ci    }
1482d43be4eSopenharmony_ci
1492d43be4eSopenharmony_ci    int32_t slotId = static_cast<int32_t>(size % SLOT_NUM);
1502d43be4eSopenharmony_ci    MessageParcel dataMessageParcel;
1512d43be4eSopenharmony_ci    dataMessageParcel.WriteInt32(slotId);
1522d43be4eSopenharmony_ci    dataMessageParcel.WriteBuffer(data, size);
1532d43be4eSopenharmony_ci    dataMessageParcel.RewindRead(0);
1542d43be4eSopenharmony_ci    MessageParcel reply;
1552d43be4eSopenharmony_ci    DelayedSingleton<CellularDataService>::GetInstance()->OnSetDefaultCellularDataSlotId(dataMessageParcel, reply);
1562d43be4eSopenharmony_ci}
1572d43be4eSopenharmony_ci
1582d43be4eSopenharmony_civoid HasInternetCapability(const uint8_t *data, size_t size)
1592d43be4eSopenharmony_ci{
1602d43be4eSopenharmony_ci    if (!IsServiceInited()) {
1612d43be4eSopenharmony_ci        return;
1622d43be4eSopenharmony_ci    }
1632d43be4eSopenharmony_ci
1642d43be4eSopenharmony_ci    int32_t slotId = static_cast<int32_t>(size % SLOT_NUM);
1652d43be4eSopenharmony_ci    MessageParcel dataMessageParcel;
1662d43be4eSopenharmony_ci    dataMessageParcel.WriteInt32(slotId);
1672d43be4eSopenharmony_ci    dataMessageParcel.WriteBuffer(data, size);
1682d43be4eSopenharmony_ci    dataMessageParcel.RewindRead(0);
1692d43be4eSopenharmony_ci    MessageParcel reply;
1702d43be4eSopenharmony_ci    DelayedSingleton<CellularDataService>::GetInstance()->OnHasInternetCapability(dataMessageParcel, reply);
1712d43be4eSopenharmony_ci}
1722d43be4eSopenharmony_ci
1732d43be4eSopenharmony_civoid ClearCellularDataConnections(const uint8_t *data, size_t size)
1742d43be4eSopenharmony_ci{
1752d43be4eSopenharmony_ci    if (!IsServiceInited()) {
1762d43be4eSopenharmony_ci        return;
1772d43be4eSopenharmony_ci    }
1782d43be4eSopenharmony_ci
1792d43be4eSopenharmony_ci    int32_t slotId = static_cast<int32_t>(size % SLOT_NUM);
1802d43be4eSopenharmony_ci    MessageParcel dataMessageParcel;
1812d43be4eSopenharmony_ci    dataMessageParcel.WriteInt32(slotId);
1822d43be4eSopenharmony_ci    dataMessageParcel.WriteBuffer(data, size);
1832d43be4eSopenharmony_ci    dataMessageParcel.RewindRead(0);
1842d43be4eSopenharmony_ci    MessageParcel reply;
1852d43be4eSopenharmony_ci    DelayedSingleton<CellularDataService>::GetInstance()->OnClearCellularDataConnections(dataMessageParcel, reply);
1862d43be4eSopenharmony_ci}
1872d43be4eSopenharmony_ci
1882d43be4eSopenharmony_civoid GetCellularDataFlowType(const uint8_t *data, size_t size)
1892d43be4eSopenharmony_ci{
1902d43be4eSopenharmony_ci    if (!IsServiceInited()) {
1912d43be4eSopenharmony_ci        return;
1922d43be4eSopenharmony_ci    }
1932d43be4eSopenharmony_ci
1942d43be4eSopenharmony_ci    MessageParcel dataMessageParcel;
1952d43be4eSopenharmony_ci    dataMessageParcel.WriteBuffer(data, size);
1962d43be4eSopenharmony_ci    dataMessageParcel.RewindRead(0);
1972d43be4eSopenharmony_ci    MessageParcel reply;
1982d43be4eSopenharmony_ci    DelayedSingleton<CellularDataService>::GetInstance()->OnGetCellularDataFlowType(dataMessageParcel, reply);
1992d43be4eSopenharmony_ci}
2002d43be4eSopenharmony_ci
2012d43be4eSopenharmony_civoid RegisterSimAccountCallback(const uint8_t *data, size_t size)
2022d43be4eSopenharmony_ci{
2032d43be4eSopenharmony_ci    if (!IsServiceInited()) {
2042d43be4eSopenharmony_ci        return;
2052d43be4eSopenharmony_ci    }
2062d43be4eSopenharmony_ci    MessageParcel dataMessageParcel;
2072d43be4eSopenharmony_ci    dataMessageParcel.WriteBuffer(data, size);
2082d43be4eSopenharmony_ci    dataMessageParcel.RewindRead(0);
2092d43be4eSopenharmony_ci    MessageParcel reply;
2102d43be4eSopenharmony_ci    DelayedSingleton<CellularDataService>::GetInstance()->OnRegisterSimAccountCallback(dataMessageParcel, reply);
2112d43be4eSopenharmony_ci}
2122d43be4eSopenharmony_ci
2132d43be4eSopenharmony_civoid UnregisterSimAccountCallback(const uint8_t *data, size_t size)
2142d43be4eSopenharmony_ci{
2152d43be4eSopenharmony_ci    if (!IsServiceInited()) {
2162d43be4eSopenharmony_ci        return;
2172d43be4eSopenharmony_ci    }
2182d43be4eSopenharmony_ci    MessageParcel dataMessageParcel;
2192d43be4eSopenharmony_ci    dataMessageParcel.WriteBuffer(data, size);
2202d43be4eSopenharmony_ci    dataMessageParcel.RewindRead(0);
2212d43be4eSopenharmony_ci    MessageParcel reply;
2222d43be4eSopenharmony_ci    DelayedSingleton<CellularDataService>::GetInstance()->OnUnregisterSimAccountCallback(dataMessageParcel, reply);
2232d43be4eSopenharmony_ci}
2242d43be4eSopenharmony_ci
2252d43be4eSopenharmony_civoid DoSomethingInterestingWithMyAPI(const uint8_t *data, size_t size)
2262d43be4eSopenharmony_ci{
2272d43be4eSopenharmony_ci    if (data == nullptr || size == 0) {
2282d43be4eSopenharmony_ci        return;
2292d43be4eSopenharmony_ci    }
2302d43be4eSopenharmony_ci
2312d43be4eSopenharmony_ci    OnRemoteRequest(data, size);
2322d43be4eSopenharmony_ci    EnableCellularData(data, size);
2332d43be4eSopenharmony_ci    GetCellularDataState(data, size);
2342d43be4eSopenharmony_ci    IsCellularDataEnabled(data, size);
2352d43be4eSopenharmony_ci    IsCellularDataRoamingEnabled(data, size);
2362d43be4eSopenharmony_ci    GetDefaultCellularDataSlotId(data, size);
2372d43be4eSopenharmony_ci    GetCellularDataFlowType(data, size);
2382d43be4eSopenharmony_ci    EnableCellularDataRoaming(data, size);
2392d43be4eSopenharmony_ci    SetDefaultCellularDataSlotId(data, size);
2402d43be4eSopenharmony_ci    HasInternetCapability(data, size);
2412d43be4eSopenharmony_ci    ClearCellularDataConnections(data, size);
2422d43be4eSopenharmony_ci    RegisterSimAccountCallback(data, size);
2432d43be4eSopenharmony_ci    UnregisterSimAccountCallback(data, size);
2442d43be4eSopenharmony_ci}
2452d43be4eSopenharmony_ci} // namespace OHOS
2462d43be4eSopenharmony_ci
2472d43be4eSopenharmony_ci/* Fuzzer entry point */
2482d43be4eSopenharmony_ciextern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
2492d43be4eSopenharmony_ci{
2502d43be4eSopenharmony_ci    OHOS::AddDataTokenFuzzer token;
2512d43be4eSopenharmony_ci    /* Run your code on data */
2522d43be4eSopenharmony_ci    OHOS::DoSomethingInterestingWithMyAPI(data, size);
2532d43be4eSopenharmony_ci    OHOS::DelayedSingleton<CellularDataService>::DestroyInstance();
2542d43be4eSopenharmony_ci    return 0;
2552d43be4eSopenharmony_ci}
256