1d95e75fdSopenharmony_ci/*
2d95e75fdSopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
3d95e75fdSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4d95e75fdSopenharmony_ci * you may not use this file except in compliance with the License.
5d95e75fdSopenharmony_ci * You may obtain a copy of the License at
6d95e75fdSopenharmony_ci *
7d95e75fdSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8d95e75fdSopenharmony_ci *
9d95e75fdSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10d95e75fdSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11d95e75fdSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12d95e75fdSopenharmony_ci * See the License for the specific language governing permissions and
13d95e75fdSopenharmony_ci * limitations under the License.
14d95e75fdSopenharmony_ci */
15d95e75fdSopenharmony_ci
16d95e75fdSopenharmony_ci#include "imscallback_fuzzer.h"
17d95e75fdSopenharmony_ci
18d95e75fdSopenharmony_ci#include <cstddef>
19d95e75fdSopenharmony_ci#include <cstdint>
20d95e75fdSopenharmony_ci#define private public
21d95e75fdSopenharmony_ci#include "addcellularcalltoken_fuzzer.h"
22d95e75fdSopenharmony_ci#include "cellular_call_service.h"
23d95e75fdSopenharmony_ci#include "ims_call_callback_stub.h"
24d95e75fdSopenharmony_ci#include "ims_call_client.h"
25d95e75fdSopenharmony_ci#include "ims_call_proxy.h"
26d95e75fdSopenharmony_ci#include "securec.h"
27d95e75fdSopenharmony_ci#include "system_ability_definition.h"
28d95e75fdSopenharmony_ci#include "telephony_types.h"
29d95e75fdSopenharmony_ci
30d95e75fdSopenharmony_ciusing namespace OHOS::Telephony;
31d95e75fdSopenharmony_cinamespace OHOS {
32d95e75fdSopenharmony_cistatic bool g_isInited = false;
33d95e75fdSopenharmony_ciconstexpr int32_t SLOT_NUM = 2;
34d95e75fdSopenharmony_ciconstexpr int32_t BOOL_NUM = 2;
35d95e75fdSopenharmony_ciconstexpr int32_t SERIAL_NUM = 3;
36d95e75fdSopenharmony_ciconstexpr int32_t ERROR_NUM = 15;
37d95e75fdSopenharmony_ciconstexpr int32_t TYPE_NUM = 5;
38d95e75fdSopenharmony_ciconstexpr int32_t CALL_INDEX_NUM = 8;
39d95e75fdSopenharmony_ciconstexpr int32_t REQUEST_NUM = 6;
40d95e75fdSopenharmony_ciconstexpr int32_t VIDEO_CALL_EVENT_NUM = 4;
41d95e75fdSopenharmony_ci
42d95e75fdSopenharmony_cibool IsServiceInited()
43d95e75fdSopenharmony_ci{
44d95e75fdSopenharmony_ci    auto service = DelayedSingleton<CellularCallService>::GetInstance();
45d95e75fdSopenharmony_ci    if (service == nullptr) {
46d95e75fdSopenharmony_ci        return g_isInited;
47d95e75fdSopenharmony_ci    }
48d95e75fdSopenharmony_ci    if (service->state_ != ServiceRunningState::STATE_RUNNING) {
49d95e75fdSopenharmony_ci        service->state_ = ServiceRunningState::STATE_RUNNING;
50d95e75fdSopenharmony_ci    }
51d95e75fdSopenharmony_ci    if (!g_isInited && service->state_ == ServiceRunningState::STATE_RUNNING) {
52d95e75fdSopenharmony_ci        g_isInited = true;
53d95e75fdSopenharmony_ci    }
54d95e75fdSopenharmony_ci    return g_isInited;
55d95e75fdSopenharmony_ci}
56d95e75fdSopenharmony_ci
57d95e75fdSopenharmony_civoid OnRemoteRequest(const uint8_t *data, size_t size)
58d95e75fdSopenharmony_ci{
59d95e75fdSopenharmony_ci    MessageParcel dataMessageParcel;
60d95e75fdSopenharmony_ci    if (!dataMessageParcel.WriteInterfaceToken(ImsCallCallbackStub::GetDescriptor())) {
61d95e75fdSopenharmony_ci        return;
62d95e75fdSopenharmony_ci    }
63d95e75fdSopenharmony_ci    int32_t slotId = ERROR_NUM;
64d95e75fdSopenharmony_ci    dataMessageParcel.WriteInt32(slotId);
65d95e75fdSopenharmony_ci    uint32_t code = static_cast<uint32_t>(size);
66d95e75fdSopenharmony_ci    MessageParcel reply;
67d95e75fdSopenharmony_ci    MessageOption option;
68d95e75fdSopenharmony_ci    DelayedSingleton<ImsCallCallbackStub>::GetInstance()->OnRemoteRequest(code, dataMessageParcel, reply, option);
69d95e75fdSopenharmony_ci}
70d95e75fdSopenharmony_ci
71d95e75fdSopenharmony_civoid TestImsCallCallbackFunction(const uint8_t *data, size_t size, sptr<ImsCallCallbackStub> &stub)
72d95e75fdSopenharmony_ci{
73d95e75fdSopenharmony_ci    int32_t slotId = ERROR_NUM;
74d95e75fdSopenharmony_ci    RadioResponseInfo rilRadioResponse;
75d95e75fdSopenharmony_ci    rilRadioResponse.flag = static_cast<int32_t>(size % BOOL_NUM);
76d95e75fdSopenharmony_ci    rilRadioResponse.serial = static_cast<int32_t>(size % SERIAL_NUM);
77d95e75fdSopenharmony_ci    rilRadioResponse.error = static_cast<ErrType>(size % ERROR_NUM);
78d95e75fdSopenharmony_ci    rilRadioResponse.type = static_cast<ResponseTypes>(size % TYPE_NUM);
79d95e75fdSopenharmony_ci    MessageParcel answerData;
80d95e75fdSopenharmony_ci    MessageParcel answerReply;
81d95e75fdSopenharmony_ci    answerData.WriteInt32(slotId);
82d95e75fdSopenharmony_ci    stub->OnAnswerResponseInner(answerData, answerReply);
83d95e75fdSopenharmony_ci
84d95e75fdSopenharmony_ci    MessageParcel dialData;
85d95e75fdSopenharmony_ci    MessageParcel dialReply;
86d95e75fdSopenharmony_ci    dialData.WriteInt32(slotId);
87d95e75fdSopenharmony_ci    stub->OnDialResponseInner(dialData, dialReply);
88d95e75fdSopenharmony_ci
89d95e75fdSopenharmony_ci    MessageParcel hangupData;
90d95e75fdSopenharmony_ci    MessageParcel hangupReply;
91d95e75fdSopenharmony_ci    hangupData.WriteInt32(slotId);
92d95e75fdSopenharmony_ci    stub->OnHangUpResponseInner(hangupData, hangupReply);
93d95e75fdSopenharmony_ci
94d95e75fdSopenharmony_ci    MessageParcel rejectData;
95d95e75fdSopenharmony_ci    MessageParcel rejectReply;
96d95e75fdSopenharmony_ci    rejectData.WriteInt32(slotId);
97d95e75fdSopenharmony_ci    stub->OnRejectResponseInner(rejectData, rejectReply);
98d95e75fdSopenharmony_ci
99d95e75fdSopenharmony_ci    MessageParcel sendDtmfData;
100d95e75fdSopenharmony_ci    MessageParcel sendDtmfReply;
101d95e75fdSopenharmony_ci    sendDtmfData.WriteInt32(slotId);
102d95e75fdSopenharmony_ci    sendDtmfData.WriteRawData((const void *)&rilRadioResponse, sizeof(RadioResponseInfo));
103d95e75fdSopenharmony_ci    stub->OnSendDtmfResponseInner(sendDtmfData, sendDtmfReply);
104d95e75fdSopenharmony_ci
105d95e75fdSopenharmony_ci    MessageParcel startDtmfData;
106d95e75fdSopenharmony_ci    MessageParcel startDtmfReply;
107d95e75fdSopenharmony_ci    startDtmfData.WriteInt32(slotId);
108d95e75fdSopenharmony_ci    startDtmfData.WriteRawData((const void *)&rilRadioResponse, sizeof(RadioResponseInfo));
109d95e75fdSopenharmony_ci    stub->OnStartDtmfResponseInner(startDtmfData, startDtmfReply);
110d95e75fdSopenharmony_ci
111d95e75fdSopenharmony_ci    MessageParcel stopDtmfData;
112d95e75fdSopenharmony_ci    MessageParcel stopDtmfReply;
113d95e75fdSopenharmony_ci    stopDtmfData.WriteInt32(slotId);
114d95e75fdSopenharmony_ci    stopDtmfData.WriteRawData((const void *)&rilRadioResponse, sizeof(RadioResponseInfo));
115d95e75fdSopenharmony_ci    stub->OnStopDtmfResponseInner(stopDtmfData, stopDtmfReply);
116d95e75fdSopenharmony_ci
117d95e75fdSopenharmony_ci    MessageParcel imsCallsData;
118d95e75fdSopenharmony_ci    MessageParcel imsCallsReply;
119d95e75fdSopenharmony_ci    slotId = ERROR_NUM;
120d95e75fdSopenharmony_ci    imsCallsData.WriteInt32(slotId);
121d95e75fdSopenharmony_ci    imsCallsData.WriteRawData((const void *)&rilRadioResponse, sizeof(RadioResponseInfo));
122d95e75fdSopenharmony_ci    stub->OnGetImsCallsDataResponseInner(imsCallsData, imsCallsReply);
123d95e75fdSopenharmony_ci}
124d95e75fdSopenharmony_ci
125d95e75fdSopenharmony_civoid TestImsCallCallbackExFunction(const uint8_t *data, size_t size, sptr<ImsCallCallbackStub> &stub)
126d95e75fdSopenharmony_ci{
127d95e75fdSopenharmony_ci    int32_t slotId = ERROR_NUM;
128d95e75fdSopenharmony_ci    std::string number(reinterpret_cast<const char *>(data), size);
129d95e75fdSopenharmony_ci    MessageParcel muteData;
130d95e75fdSopenharmony_ci    MessageParcel muteReply;
131d95e75fdSopenharmony_ci    MuteControlResponse muteResponse;
132d95e75fdSopenharmony_ci    muteResponse.result = static_cast<int32_t>(size % BOOL_NUM);
133d95e75fdSopenharmony_ci    muteResponse.value = static_cast<int32_t>(size % BOOL_NUM);
134d95e75fdSopenharmony_ci    muteData.WriteInt32(slotId);
135d95e75fdSopenharmony_ci    muteData.WriteRawData((const void *)&muteResponse, sizeof(MuteControlResponse));
136d95e75fdSopenharmony_ci    stub->OnSetMuteResponseInner(muteData, muteReply);
137d95e75fdSopenharmony_ci
138d95e75fdSopenharmony_ci    MessageParcel ringData;
139d95e75fdSopenharmony_ci    MessageParcel ringReply;
140d95e75fdSopenharmony_ci    RingbackVoice ringback;
141d95e75fdSopenharmony_ci    ringback.status = static_cast<int32_t>(size % BOOL_NUM);
142d95e75fdSopenharmony_ci    ringData.WriteInt32(slotId);
143d95e75fdSopenharmony_ci    ringData.WriteRawData((const void *)&ringback, sizeof(RingbackVoice));
144d95e75fdSopenharmony_ci    stub->OnCallRingBackReportInner(ringData, ringReply);
145d95e75fdSopenharmony_ci
146d95e75fdSopenharmony_ci    MessageParcel callData;
147d95e75fdSopenharmony_ci    MessageParcel callReply;
148d95e75fdSopenharmony_ci    callData.WriteInt32(slotId);
149d95e75fdSopenharmony_ci    stub->OnCallStateChangeReportInner(callData, callReply);
150d95e75fdSopenharmony_ci
151d95e75fdSopenharmony_ci    MessageParcel failData;
152d95e75fdSopenharmony_ci    MessageParcel failReply;
153d95e75fdSopenharmony_ci    DisconnectedDetails details;
154d95e75fdSopenharmony_ci    details.reason = static_cast<DisconnectedReason>(size);
155d95e75fdSopenharmony_ci    details.message = number;
156d95e75fdSopenharmony_ci    slotId = ERROR_NUM;
157d95e75fdSopenharmony_ci    failData.WriteInt32(slotId);
158d95e75fdSopenharmony_ci    failData.WriteInt32(static_cast<int32_t>(details.reason));
159d95e75fdSopenharmony_ci    failData.WriteString(details.message);
160d95e75fdSopenharmony_ci    stub->OnLastCallFailReasonResponseInner(failData, failReply);
161d95e75fdSopenharmony_ci}
162d95e75fdSopenharmony_ci
163d95e75fdSopenharmony_civoid TestImsConfigCallbackFunction(const uint8_t *data, size_t size, sptr<ImsCallCallbackStub> &stub)
164d95e75fdSopenharmony_ci{
165d95e75fdSopenharmony_ci    int32_t slotId = ERROR_NUM;
166d95e75fdSopenharmony_ci    RadioResponseInfo rilRadioResponse;
167d95e75fdSopenharmony_ci    rilRadioResponse.flag = static_cast<int32_t>(size % BOOL_NUM);
168d95e75fdSopenharmony_ci    rilRadioResponse.serial = static_cast<int32_t>(size % SERIAL_NUM);
169d95e75fdSopenharmony_ci    rilRadioResponse.error = static_cast<ErrType>(size % ERROR_NUM);
170d95e75fdSopenharmony_ci    rilRadioResponse.type = static_cast<ResponseTypes>(size % TYPE_NUM);
171d95e75fdSopenharmony_ci
172d95e75fdSopenharmony_ci    MessageParcel setImsSwitchData;
173d95e75fdSopenharmony_ci    MessageParcel setImsSwitchReply;
174d95e75fdSopenharmony_ci    setImsSwitchData.WriteInt32(slotId);
175d95e75fdSopenharmony_ci    setImsSwitchData.WriteRawData((const void *)&rilRadioResponse, sizeof(RadioResponseInfo));
176d95e75fdSopenharmony_ci    stub->OnSetImsSwitchResponseInner(setImsSwitchData, setImsSwitchReply);
177d95e75fdSopenharmony_ci
178d95e75fdSopenharmony_ci    MessageParcel holdCallData;
179d95e75fdSopenharmony_ci    MessageParcel holdCallReply;
180d95e75fdSopenharmony_ci    holdCallData.WriteInt32(slotId);
181d95e75fdSopenharmony_ci    stub->OnHoldCallResponseInner(holdCallData, holdCallReply);
182d95e75fdSopenharmony_ci
183d95e75fdSopenharmony_ci    MessageParcel switchCallData;
184d95e75fdSopenharmony_ci    MessageParcel switchCallReply;
185d95e75fdSopenharmony_ci    switchCallData.WriteInt32(slotId);
186d95e75fdSopenharmony_ci    stub->OnSwitchCallResponseInner(switchCallData, switchCallReply);
187d95e75fdSopenharmony_ci
188d95e75fdSopenharmony_ci    MessageParcel unholdData;
189d95e75fdSopenharmony_ci    MessageParcel unholdReply;
190d95e75fdSopenharmony_ci    unholdData.WriteInt32(slotId);
191d95e75fdSopenharmony_ci    stub->OnUnHoldCallResponseInner(unholdData, unholdReply);
192d95e75fdSopenharmony_ci
193d95e75fdSopenharmony_ci    MessageParcel getImsSwitchData;
194d95e75fdSopenharmony_ci    MessageParcel getImsSwitchReply;
195d95e75fdSopenharmony_ci    getImsSwitchData.WriteInt32(slotId);
196d95e75fdSopenharmony_ci    getImsSwitchData.WriteRawData((const void *)&rilRadioResponse, sizeof(RadioResponseInfo));
197d95e75fdSopenharmony_ci    stub->OnGetImsSwitchResponseInner(getImsSwitchData, getImsSwitchReply);
198d95e75fdSopenharmony_ci}
199d95e75fdSopenharmony_ci
200d95e75fdSopenharmony_civoid WriteSsResult(MessageParcel &in, SsBaseResult &ssResult, const int32_t action, const int32_t state, size_t size)
201d95e75fdSopenharmony_ci{
202d95e75fdSopenharmony_ci    ssResult.index = static_cast<int32_t>(size % SERIAL_NUM);
203d95e75fdSopenharmony_ci    ssResult.result = static_cast<int32_t>(size % BOOL_NUM);
204d95e75fdSopenharmony_ci    ssResult.reason = static_cast<int32_t>(size);
205d95e75fdSopenharmony_ci    in.WriteInt32(ssResult.index);
206d95e75fdSopenharmony_ci    in.WriteInt32(ssResult.result);
207d95e75fdSopenharmony_ci    in.WriteInt32(ssResult.reason);
208d95e75fdSopenharmony_ci    in.WriteString(ssResult.message);
209d95e75fdSopenharmony_ci    in.WriteInt32(action);
210d95e75fdSopenharmony_ci    in.WriteInt32(state);
211d95e75fdSopenharmony_ci}
212d95e75fdSopenharmony_ci
213d95e75fdSopenharmony_civoid TestImsUTCallbackFunction(const uint8_t *data, size_t size, sptr<ImsCallCallbackStub> &stub)
214d95e75fdSopenharmony_ci{
215d95e75fdSopenharmony_ci    int32_t slotId = static_cast<int32_t>(size % SLOT_NUM);
216d95e75fdSopenharmony_ci    std::string number(reinterpret_cast<const char *>(data), size);
217d95e75fdSopenharmony_ci
218d95e75fdSopenharmony_ci    SsBaseResult normalResult;
219d95e75fdSopenharmony_ci    normalResult.index = static_cast<int32_t>(size % SERIAL_NUM);
220d95e75fdSopenharmony_ci    normalResult.result = static_cast<int32_t>(size % BOOL_NUM);
221d95e75fdSopenharmony_ci    normalResult.reason = static_cast<int32_t>(size);
222d95e75fdSopenharmony_ci    normalResult.message = number;
223d95e75fdSopenharmony_ci
224d95e75fdSopenharmony_ci    MessageParcel mData;
225d95e75fdSopenharmony_ci    MessageParcel mReply;
226d95e75fdSopenharmony_ci    mData.WriteInt32(slotId);
227d95e75fdSopenharmony_ci    mData.WriteInt32(normalResult.index);
228d95e75fdSopenharmony_ci    mData.WriteInt32(normalResult.result);
229d95e75fdSopenharmony_ci    mData.WriteInt32(normalResult.reason);
230d95e75fdSopenharmony_ci    mData.WriteString(normalResult.message);
231d95e75fdSopenharmony_ci    stub->OnSetCallRestrictionResponseInner(mData, mReply);
232d95e75fdSopenharmony_ci    stub->OnSetCallTransferResponseInner(mData, mReply);
233d95e75fdSopenharmony_ci    stub->OnSetCallWaitingResponseInner(mData, mReply);
234d95e75fdSopenharmony_ci    stub->OnSetClipResponseInner(mData, mReply);
235d95e75fdSopenharmony_ci    stub->OnSetClirResponseInner(mData, mReply);
236d95e75fdSopenharmony_ci    stub->OnSetColpResponseInner(mData, mReply);
237d95e75fdSopenharmony_ci    stub->OnSetColrResponseInner(mData, mReply);
238d95e75fdSopenharmony_ci
239d95e75fdSopenharmony_ci    MessageParcel crData;
240d95e75fdSopenharmony_ci    MessageParcel crReply;
241d95e75fdSopenharmony_ci    CallRestrictionResult crResult;
242d95e75fdSopenharmony_ci    crResult.result.message = number;
243d95e75fdSopenharmony_ci    crResult.status = static_cast<int32_t>(size % BOOL_NUM);
244d95e75fdSopenharmony_ci    crResult.classCw = static_cast<int32_t>(size);
245d95e75fdSopenharmony_ci    crData.WriteInt32(slotId);
246d95e75fdSopenharmony_ci    WriteSsResult(crData, crResult.result, crResult.status, crResult.classCw, size);
247d95e75fdSopenharmony_ci    stub->OnGetCallRestrictionResponseInner(crData, crReply);
248d95e75fdSopenharmony_ci
249d95e75fdSopenharmony_ci    MessageParcel cwData;
250d95e75fdSopenharmony_ci    MessageParcel cwReply;
251d95e75fdSopenharmony_ci    CallWaitResult cwResult;
252d95e75fdSopenharmony_ci    cwResult.result.message = number;
253d95e75fdSopenharmony_ci    cwResult.status = static_cast<int32_t>(size % BOOL_NUM);
254d95e75fdSopenharmony_ci    cwResult.classCw = static_cast<int32_t>(size);
255d95e75fdSopenharmony_ci    cwData.WriteInt32(slotId);
256d95e75fdSopenharmony_ci    WriteSsResult(cwData, cwResult.result, cwResult.status, cwResult.classCw, size);
257d95e75fdSopenharmony_ci    stub->OnGetCallWaitingResponseInner(cwData, cwReply);
258d95e75fdSopenharmony_ci
259d95e75fdSopenharmony_ci    MessageParcel clipData;
260d95e75fdSopenharmony_ci    MessageParcel clipReply;
261d95e75fdSopenharmony_ci    GetClipResult clipResult;
262d95e75fdSopenharmony_ci    clipResult.result.message = number;
263d95e75fdSopenharmony_ci    clipResult.clipStat = static_cast<int32_t>(size);
264d95e75fdSopenharmony_ci    clipResult.action = static_cast<int32_t>(size);
265d95e75fdSopenharmony_ci    clipData.WriteInt32(slotId);
266d95e75fdSopenharmony_ci    WriteSsResult(clipData, clipResult.result, clipResult.action, clipResult.clipStat, size);
267d95e75fdSopenharmony_ci    stub->OnGetClipResponseInner(clipData, clipReply);
268d95e75fdSopenharmony_ci}
269d95e75fdSopenharmony_ci
270d95e75fdSopenharmony_civoid TestUTCallbackFunction(const uint8_t *data, size_t size, sptr<ImsCallCallbackStub> &stub)
271d95e75fdSopenharmony_ci{
272d95e75fdSopenharmony_ci    int32_t slotId = static_cast<int32_t>(size % SLOT_NUM);
273d95e75fdSopenharmony_ci    std::string number(reinterpret_cast<const char *>(data), size);
274d95e75fdSopenharmony_ci
275d95e75fdSopenharmony_ci    MessageParcel clirData;
276d95e75fdSopenharmony_ci    MessageParcel clirReply;
277d95e75fdSopenharmony_ci    GetClirResult clirResult;
278d95e75fdSopenharmony_ci    clirResult.result.message = number;
279d95e75fdSopenharmony_ci    clirResult.clirStat = static_cast<int32_t>(size);
280d95e75fdSopenharmony_ci    clirResult.action = static_cast<int32_t>(size);
281d95e75fdSopenharmony_ci    clirData.WriteInt32(slotId);
282d95e75fdSopenharmony_ci    WriteSsResult(clirData, clirResult.result, clirResult.action, clirResult.clirStat, size);
283d95e75fdSopenharmony_ci    stub->OnGetClirResponseInner(clirData, clirReply);
284d95e75fdSopenharmony_ci
285d95e75fdSopenharmony_ci    MessageParcel colpData;
286d95e75fdSopenharmony_ci    MessageParcel colpReply;
287d95e75fdSopenharmony_ci    GetColpResult colpResult;
288d95e75fdSopenharmony_ci    colpResult.result.message = number;
289d95e75fdSopenharmony_ci    colpResult.colpStat = static_cast<int32_t>(size);
290d95e75fdSopenharmony_ci    colpResult.action = static_cast<int32_t>(size);
291d95e75fdSopenharmony_ci    colpData.WriteInt32(slotId);
292d95e75fdSopenharmony_ci    WriteSsResult(colpData, colpResult.result, colpResult.action, colpResult.colpStat, size);
293d95e75fdSopenharmony_ci    stub->OnGetColpResponseInner(colpData, colpReply);
294d95e75fdSopenharmony_ci
295d95e75fdSopenharmony_ci    MessageParcel colrData;
296d95e75fdSopenharmony_ci    MessageParcel colrReply;
297d95e75fdSopenharmony_ci    GetColrResult colrResult;
298d95e75fdSopenharmony_ci    colrResult.result.message = number;
299d95e75fdSopenharmony_ci    colrResult.colrStat = static_cast<int32_t>(size);
300d95e75fdSopenharmony_ci    colrResult.action = static_cast<int32_t>(size);
301d95e75fdSopenharmony_ci    colrData.WriteInt32(slotId);
302d95e75fdSopenharmony_ci    WriteSsResult(colrData, colrResult.result, colrResult.action, colrResult.colrStat, size);
303d95e75fdSopenharmony_ci    stub->OnGetColrResponseInner(colrData, colrReply);
304d95e75fdSopenharmony_ci}
305d95e75fdSopenharmony_ci
306d95e75fdSopenharmony_civoid TestCFCallbackFunction(const uint8_t *data, size_t size, sptr<ImsCallCallbackStub> &stub)
307d95e75fdSopenharmony_ci{
308d95e75fdSopenharmony_ci    int32_t slotId = static_cast<int32_t>(size % SLOT_NUM);
309d95e75fdSopenharmony_ci    std::string number(reinterpret_cast<const char *>(data), size);
310d95e75fdSopenharmony_ci    MessageParcel cfData;
311d95e75fdSopenharmony_ci    MessageParcel cfReply;
312d95e75fdSopenharmony_ci    SsBaseResult normalResult;
313d95e75fdSopenharmony_ci    CallForwardQueryResult cfCall;
314d95e75fdSopenharmony_ci    normalResult.message = number;
315d95e75fdSopenharmony_ci    int32_t callSize = 1;
316d95e75fdSopenharmony_ci    int32_t flag = static_cast<int32_t>(size % BOOL_NUM);
317d95e75fdSopenharmony_ci    cfCall.serial = static_cast<int32_t>(size % SERIAL_NUM);
318d95e75fdSopenharmony_ci    cfCall.result = static_cast<int32_t>(size % BOOL_NUM);
319d95e75fdSopenharmony_ci    cfCall.status = static_cast<int32_t>(size % BOOL_NUM);
320d95e75fdSopenharmony_ci    cfCall.classx = static_cast<int32_t>(size);
321d95e75fdSopenharmony_ci    cfCall.number = number;
322d95e75fdSopenharmony_ci    cfCall.type = static_cast<int32_t>(size);
323d95e75fdSopenharmony_ci    cfCall.reason = static_cast<int32_t>(size);
324d95e75fdSopenharmony_ci
325d95e75fdSopenharmony_ci    cfData.WriteInt32(slotId);
326d95e75fdSopenharmony_ci    WriteSsResult(cfData, normalResult, callSize, flag, size);
327d95e75fdSopenharmony_ci    cfData.WriteInt32(callSize);
328d95e75fdSopenharmony_ci
329d95e75fdSopenharmony_ci    if (!cfData.WriteInt32(cfCall.serial) || !cfData.WriteInt32(cfCall.result) || !cfData.WriteInt32(cfCall.status) ||
330d95e75fdSopenharmony_ci        !cfData.WriteInt32(cfCall.classx) || !cfData.WriteString(cfCall.number) || !cfData.WriteInt32(cfCall.type) ||
331d95e75fdSopenharmony_ci        !cfData.WriteInt32(cfCall.reason) || !cfData.WriteInt32(cfCall.time) || !cfData.WriteInt32(cfCall.startHour) ||
332d95e75fdSopenharmony_ci        !cfData.WriteInt32(cfCall.startMinute) || !cfData.WriteInt32(cfCall.endHour) ||
333d95e75fdSopenharmony_ci        !cfData.WriteInt32(cfCall.endMinute)) {
334d95e75fdSopenharmony_ci        return;
335d95e75fdSopenharmony_ci    }
336d95e75fdSopenharmony_ci    stub->OnGetCallTransferResponseInner(cfData, cfReply);
337d95e75fdSopenharmony_ci}
338d95e75fdSopenharmony_ci
339d95e75fdSopenharmony_civoid TestICCbWithCallMediaModeRequestReport(const uint8_t *data, size_t size, sptr<ImsCallCallbackStub> &stub)
340d95e75fdSopenharmony_ci{
341d95e75fdSopenharmony_ci    int32_t slotId = static_cast<int32_t>(size % SLOT_NUM);
342d95e75fdSopenharmony_ci    MessageParcel callMediaModeRequestData;
343d95e75fdSopenharmony_ci    MessageParcel callMediaModeRequestReply;
344d95e75fdSopenharmony_ci    ImsCallModeReceiveInfo callModeRequest;
345d95e75fdSopenharmony_ci    callModeRequest.callIndex = static_cast<int32_t>(size % CALL_INDEX_NUM);
346d95e75fdSopenharmony_ci    callModeRequest.result = static_cast<ImsCallModeRequestResult>(size % REQUEST_NUM);
347d95e75fdSopenharmony_ci    callModeRequest.callType = static_cast<ImsCallType>(size % TYPE_NUM);
348d95e75fdSopenharmony_ci    callMediaModeRequestData.WriteInt32(slotId);
349d95e75fdSopenharmony_ci    callMediaModeRequestData.WriteRawData((const void *)&callModeRequest, sizeof(ImsCallModeReceiveInfo));
350d95e75fdSopenharmony_ci    stub->OnReceiveUpdateCallMediaModeRequestInner(callMediaModeRequestData, callMediaModeRequestReply);
351d95e75fdSopenharmony_ci}
352d95e75fdSopenharmony_ci
353d95e75fdSopenharmony_civoid TestICCbWithCallMediaModeResponseReport(const uint8_t *data, size_t size, sptr<ImsCallCallbackStub> &stub)
354d95e75fdSopenharmony_ci{
355d95e75fdSopenharmony_ci    int32_t slotId = static_cast<int32_t>(size % SLOT_NUM);
356d95e75fdSopenharmony_ci    MessageParcel callMediaModeResponseData;
357d95e75fdSopenharmony_ci    MessageParcel callMediaModeResponseReply;
358d95e75fdSopenharmony_ci    ImsCallModeReceiveInfo callModeResponse;
359d95e75fdSopenharmony_ci    callModeResponse.callIndex = static_cast<int32_t>(size % CALL_INDEX_NUM);
360d95e75fdSopenharmony_ci    callModeResponse.result = static_cast<ImsCallModeRequestResult>(size % REQUEST_NUM);
361d95e75fdSopenharmony_ci    callModeResponse.callType = static_cast<ImsCallType>(size % TYPE_NUM);
362d95e75fdSopenharmony_ci    callMediaModeResponseData.WriteInt32(slotId);
363d95e75fdSopenharmony_ci    callMediaModeResponseData.WriteRawData((const void *)&callModeResponse, sizeof(ImsCallModeReceiveInfo));
364d95e75fdSopenharmony_ci    stub->OnReceiveUpdateCallMediaModeResponseInner(callMediaModeResponseData, callMediaModeResponseReply);
365d95e75fdSopenharmony_ci}
366d95e75fdSopenharmony_ci
367d95e75fdSopenharmony_civoid TestICCbWithCallSessionEventChanged(const uint8_t *data, size_t size, sptr<ImsCallCallbackStub> &stub)
368d95e75fdSopenharmony_ci{
369d95e75fdSopenharmony_ci    int32_t slotId = static_cast<int32_t>(size % SLOT_NUM);
370d95e75fdSopenharmony_ci    MessageParcel callSessionData;
371d95e75fdSopenharmony_ci    MessageParcel callSessionReply;
372d95e75fdSopenharmony_ci    ImsCallSessionEventInfo callSessionEventInfo;
373d95e75fdSopenharmony_ci    callSessionEventInfo.callIndex = static_cast<int32_t>(size % CALL_INDEX_NUM);
374d95e75fdSopenharmony_ci    callSessionEventInfo.eventType = static_cast<VideoCallEventType>(size % VIDEO_CALL_EVENT_NUM);
375d95e75fdSopenharmony_ci    callSessionData.WriteInt32(slotId);
376d95e75fdSopenharmony_ci    callSessionData.WriteRawData((const void *)&callSessionEventInfo, sizeof(ImsCallSessionEventInfo));
377d95e75fdSopenharmony_ci    stub->OnCallSessionEventChangedInner(callSessionData, callSessionReply);
378d95e75fdSopenharmony_ci}
379d95e75fdSopenharmony_ci
380d95e75fdSopenharmony_civoid TestICCbWithPeerDimensionsChanged(const uint8_t *data, size_t size, sptr<ImsCallCallbackStub> &stub)
381d95e75fdSopenharmony_ci{
382d95e75fdSopenharmony_ci    int32_t slotId = static_cast<int32_t>(size % SLOT_NUM);
383d95e75fdSopenharmony_ci    MessageParcel callPeerDimensionsData;
384d95e75fdSopenharmony_ci    MessageParcel callPeerDimensionsReply;
385d95e75fdSopenharmony_ci    ImsCallPeerDimensionsInfo callPeerDimensionsInfo;
386d95e75fdSopenharmony_ci    callPeerDimensionsInfo.callIndex = static_cast<int32_t>(size % CALL_INDEX_NUM);
387d95e75fdSopenharmony_ci    callPeerDimensionsInfo.width = static_cast<int32_t>(size);
388d95e75fdSopenharmony_ci    callPeerDimensionsInfo.height = static_cast<int32_t>(size);
389d95e75fdSopenharmony_ci    callPeerDimensionsData.WriteInt32(slotId);
390d95e75fdSopenharmony_ci    callPeerDimensionsData.WriteRawData((const void *)&callPeerDimensionsInfo, sizeof(ImsCallPeerDimensionsInfo));
391d95e75fdSopenharmony_ci    stub->OnPeerDimensionsChangedInner(callPeerDimensionsData, callPeerDimensionsReply);
392d95e75fdSopenharmony_ci}
393d95e75fdSopenharmony_ci
394d95e75fdSopenharmony_civoid TestICCbWithCallDataUsageChanged(const uint8_t *data, size_t size, sptr<ImsCallCallbackStub> &stub)
395d95e75fdSopenharmony_ci{
396d95e75fdSopenharmony_ci    int32_t slotId = static_cast<int32_t>(size % SLOT_NUM);
397d95e75fdSopenharmony_ci    MessageParcel callDataUsageIData;
398d95e75fdSopenharmony_ci    MessageParcel callDataUsageIReply;
399d95e75fdSopenharmony_ci    ImsCallDataUsageInfo callDataUsageInfo;
400d95e75fdSopenharmony_ci    callDataUsageInfo.callIndex = static_cast<int32_t>(size % CALL_INDEX_NUM);
401d95e75fdSopenharmony_ci    callDataUsageInfo.dataUsage = static_cast<int64_t>(size);
402d95e75fdSopenharmony_ci    callDataUsageIData.WriteInt32(slotId);
403d95e75fdSopenharmony_ci    callDataUsageIData.WriteRawData((const void *)&callDataUsageInfo, sizeof(ImsCallDataUsageInfo));
404d95e75fdSopenharmony_ci    stub->OnCallDataUsageChangedInner(callDataUsageIData, callDataUsageIReply);
405d95e75fdSopenharmony_ci}
406d95e75fdSopenharmony_ci
407d95e75fdSopenharmony_civoid TestICCbWithCameraCapabilitiesChanged(const uint8_t *data, size_t size, sptr<ImsCallCallbackStub> &stub)
408d95e75fdSopenharmony_ci{
409d95e75fdSopenharmony_ci    int32_t slotId = static_cast<int32_t>(size % SLOT_NUM);
410d95e75fdSopenharmony_ci    MessageParcel cameraCapabilitiesData;
411d95e75fdSopenharmony_ci    MessageParcel cameraCapabilitiesReply;
412d95e75fdSopenharmony_ci    CameraCapabilitiesInfo cameraCapabilitiesInfo;
413d95e75fdSopenharmony_ci    cameraCapabilitiesInfo.callIndex = static_cast<int32_t>(size % CALL_INDEX_NUM);
414d95e75fdSopenharmony_ci    cameraCapabilitiesInfo.width = static_cast<int32_t>(size);
415d95e75fdSopenharmony_ci    cameraCapabilitiesInfo.height = static_cast<int32_t>(size);
416d95e75fdSopenharmony_ci    cameraCapabilitiesData.WriteInt32(slotId);
417d95e75fdSopenharmony_ci    cameraCapabilitiesData.WriteRawData((const void *)&cameraCapabilitiesInfo, sizeof(CameraCapabilitiesInfo));
418d95e75fdSopenharmony_ci    stub->OnCameraCapabilitiesChangedInner(cameraCapabilitiesData, cameraCapabilitiesReply);
419d95e75fdSopenharmony_ci}
420d95e75fdSopenharmony_ci
421d95e75fdSopenharmony_civoid DoSomethingInterestingWithMyAPI(const uint8_t *data, size_t size)
422d95e75fdSopenharmony_ci{
423d95e75fdSopenharmony_ci    if (data == nullptr || size == 0) {
424d95e75fdSopenharmony_ci        return;
425d95e75fdSopenharmony_ci    }
426d95e75fdSopenharmony_ci
427d95e75fdSopenharmony_ci    if (!IsServiceInited()) {
428d95e75fdSopenharmony_ci        return;
429d95e75fdSopenharmony_ci    }
430d95e75fdSopenharmony_ci
431d95e75fdSopenharmony_ci    sptr<ImsCallCallbackStub> stub = (std::make_unique<ImsCallCallbackStub>()).release();
432d95e75fdSopenharmony_ci    if (stub == nullptr) {
433d95e75fdSopenharmony_ci        return;
434d95e75fdSopenharmony_ci    }
435d95e75fdSopenharmony_ci
436d95e75fdSopenharmony_ci    OnRemoteRequest(data, size);
437d95e75fdSopenharmony_ci    TestImsCallCallbackFunction(data, size, stub);
438d95e75fdSopenharmony_ci    TestImsCallCallbackExFunction(data, size, stub);
439d95e75fdSopenharmony_ci    TestImsConfigCallbackFunction(data, size, stub);
440d95e75fdSopenharmony_ci    TestImsUTCallbackFunction(data, size, stub);
441d95e75fdSopenharmony_ci    TestUTCallbackFunction(data, size, stub);
442d95e75fdSopenharmony_ci    TestCFCallbackFunction(data, size, stub);
443d95e75fdSopenharmony_ci    // IMS video call callback test(ICCb: ImsCallCallback)
444d95e75fdSopenharmony_ci    TestICCbWithCallMediaModeRequestReport(data, size, stub);
445d95e75fdSopenharmony_ci    TestICCbWithCallMediaModeResponseReport(data, size, stub);
446d95e75fdSopenharmony_ci    TestICCbWithCallSessionEventChanged(data, size, stub);
447d95e75fdSopenharmony_ci    TestICCbWithPeerDimensionsChanged(data, size, stub);
448d95e75fdSopenharmony_ci    TestICCbWithCallDataUsageChanged(data, size, stub);
449d95e75fdSopenharmony_ci    TestICCbWithCameraCapabilitiesChanged(data, size, stub);
450d95e75fdSopenharmony_ci}
451d95e75fdSopenharmony_ci} // namespace OHOS
452d95e75fdSopenharmony_ci
453d95e75fdSopenharmony_ci/* Fuzzer entry point */
454d95e75fdSopenharmony_ciextern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
455d95e75fdSopenharmony_ci{
456d95e75fdSopenharmony_ci    OHOS::AddCellularCallTokenFuzzer token;
457d95e75fdSopenharmony_ci    /* Run your code on data */
458d95e75fdSopenharmony_ci    OHOS::DoSomethingInterestingWithMyAPI(data, size);
459d95e75fdSopenharmony_ci    return 0;
460d95e75fdSopenharmony_ci}
461