1e1c44949Sopenharmony_ci/*
2e1c44949Sopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd.
3e1c44949Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4e1c44949Sopenharmony_ci * you may not use this file except in compliance with the License.
5e1c44949Sopenharmony_ci * You may obtain a copy of the License at
6e1c44949Sopenharmony_ci *
7e1c44949Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8e1c44949Sopenharmony_ci *
9e1c44949Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10e1c44949Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11e1c44949Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12e1c44949Sopenharmony_ci * See the License for the specific language governing permissions and
13e1c44949Sopenharmony_ci * limitations under the License.
14e1c44949Sopenharmony_ci */
15e1c44949Sopenharmony_ci
16e1c44949Sopenharmony_ci#include "startdtmf_fuzzer.h"
17e1c44949Sopenharmony_ci
18e1c44949Sopenharmony_ci#include <cstddef>
19e1c44949Sopenharmony_ci#include <cstdint>
20e1c44949Sopenharmony_ci#define private public
21e1c44949Sopenharmony_ci#include "addcalltoken_fuzzer.h"
22e1c44949Sopenharmony_ci#include "call_manager_service_stub.h"
23e1c44949Sopenharmony_ci
24e1c44949Sopenharmony_ciusing namespace OHOS::Telephony;
25e1c44949Sopenharmony_cinamespace OHOS {
26e1c44949Sopenharmony_ciconstexpr int32_t CALL_ID_NUM = 10;
27e1c44949Sopenharmony_ci
28e1c44949Sopenharmony_civoid StartDtmf(const uint8_t *data, size_t size)
29e1c44949Sopenharmony_ci{
30e1c44949Sopenharmony_ci    if (!IsServiceInited()) {
31e1c44949Sopenharmony_ci        return;
32e1c44949Sopenharmony_ci    }
33e1c44949Sopenharmony_ci
34e1c44949Sopenharmony_ci    int32_t callId = size % CALL_ID_NUM;
35e1c44949Sopenharmony_ci    char str = *reinterpret_cast<const char *>(data);
36e1c44949Sopenharmony_ci    MessageParcel dataMessageParcel;
37e1c44949Sopenharmony_ci    dataMessageParcel.WriteInt32(callId);
38e1c44949Sopenharmony_ci    dataMessageParcel.WriteInt8(str);
39e1c44949Sopenharmony_ci    dataMessageParcel.RewindRead(0);
40e1c44949Sopenharmony_ci    MessageParcel reply;
41e1c44949Sopenharmony_ci    DelayedSingleton<CallManagerService>::GetInstance()->OnStartDtmf(dataMessageParcel, reply);
42e1c44949Sopenharmony_ci}
43e1c44949Sopenharmony_ci
44e1c44949Sopenharmony_civoid StopRtt(const uint8_t *data, size_t size)
45e1c44949Sopenharmony_ci{
46e1c44949Sopenharmony_ci    if (!IsServiceInited()) {
47e1c44949Sopenharmony_ci        return;
48e1c44949Sopenharmony_ci    }
49e1c44949Sopenharmony_ci
50e1c44949Sopenharmony_ci    int32_t callId = size % CALL_ID_NUM;
51e1c44949Sopenharmony_ci    MessageParcel dataMessageParcel;
52e1c44949Sopenharmony_ci    dataMessageParcel.WriteInt32(callId);
53e1c44949Sopenharmony_ci    dataMessageParcel.RewindRead(0);
54e1c44949Sopenharmony_ci    MessageParcel reply;
55e1c44949Sopenharmony_ci    DelayedSingleton<CallManagerService>::GetInstance()->OnStopRtt(dataMessageParcel, reply);
56e1c44949Sopenharmony_ci}
57e1c44949Sopenharmony_ci
58e1c44949Sopenharmony_civoid SetMuted(const uint8_t *data, size_t size)
59e1c44949Sopenharmony_ci{
60e1c44949Sopenharmony_ci    if (!IsServiceInited()) {
61e1c44949Sopenharmony_ci        return;
62e1c44949Sopenharmony_ci    }
63e1c44949Sopenharmony_ci
64e1c44949Sopenharmony_ci    bool isMute = false;
65e1c44949Sopenharmony_ci    MessageParcel dataMessageParcel;
66e1c44949Sopenharmony_ci    dataMessageParcel.WriteBool(isMute);
67e1c44949Sopenharmony_ci    dataMessageParcel.RewindRead(0);
68e1c44949Sopenharmony_ci    MessageParcel reply;
69e1c44949Sopenharmony_ci    DelayedSingleton<CallManagerService>::GetInstance()->OnSetMute(dataMessageParcel, reply);
70e1c44949Sopenharmony_ci}
71e1c44949Sopenharmony_ci
72e1c44949Sopenharmony_civoid MuteRinger(const uint8_t *data, size_t size)
73e1c44949Sopenharmony_ci{
74e1c44949Sopenharmony_ci    if (!IsServiceInited()) {
75e1c44949Sopenharmony_ci        return;
76e1c44949Sopenharmony_ci    }
77e1c44949Sopenharmony_ci
78e1c44949Sopenharmony_ci    MessageParcel dataMessageParcel;
79e1c44949Sopenharmony_ci    dataMessageParcel.WriteBuffer(data, size);
80e1c44949Sopenharmony_ci    dataMessageParcel.RewindRead(0);
81e1c44949Sopenharmony_ci    MessageParcel reply;
82e1c44949Sopenharmony_ci    DelayedSingleton<CallManagerService>::GetInstance()->OnSetMute(dataMessageParcel, reply);
83e1c44949Sopenharmony_ci}
84e1c44949Sopenharmony_ci
85e1c44949Sopenharmony_civoid DoSomethingInterestingWithMyAPI(const uint8_t *data, size_t size)
86e1c44949Sopenharmony_ci{
87e1c44949Sopenharmony_ci    if (data == nullptr || size == 0) {
88e1c44949Sopenharmony_ci        return;
89e1c44949Sopenharmony_ci    }
90e1c44949Sopenharmony_ci
91e1c44949Sopenharmony_ci    StartDtmf(data, size);
92e1c44949Sopenharmony_ci    StopRtt(data, size);
93e1c44949Sopenharmony_ci    SetMuted(data, size);
94e1c44949Sopenharmony_ci    MuteRinger(data, size);
95e1c44949Sopenharmony_ci}
96e1c44949Sopenharmony_ci} // namespace OHOS
97e1c44949Sopenharmony_ci
98e1c44949Sopenharmony_ci/* Fuzzer entry point */
99e1c44949Sopenharmony_ciextern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
100e1c44949Sopenharmony_ci{
101e1c44949Sopenharmony_ci    OHOS::AddCallTokenFuzzer token;
102e1c44949Sopenharmony_ci    /* Run your code on data */
103e1c44949Sopenharmony_ci    OHOS::DoSomethingInterestingWithMyAPI(data, size);
104e1c44949Sopenharmony_ci    return 0;
105e1c44949Sopenharmony_ci}
106