1e1c44949Sopenharmony_ci/*
2e1c44949Sopenharmony_ci * Copyright (c) 2023 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 "telephonyinteraction_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_status_callback_proxy.h"
23e1c44949Sopenharmony_ci
24e1c44949Sopenharmony_ciusing namespace OHOS::Telephony;
25e1c44949Sopenharmony_cinamespace OHOS {
26e1c44949Sopenharmony_ciconstexpr int32_t SLOT_NUM = 2;
27e1c44949Sopenharmony_ciconstexpr int32_t ACCOUNT_ID_NUM = 10;
28e1c44949Sopenharmony_ciconstexpr int32_t MULTI_PARTY_NUM = 10;
29e1c44949Sopenharmony_ciconstexpr int32_t VOICE_DOMAIN_NUM = 10;
30e1c44949Sopenharmony_ciconstexpr int32_t IMS_CALL_MODE_NUM = 5;
31e1c44949Sopenharmony_ciconstexpr int32_t CALL_INDEX_MAX_NUM = 8;
32e1c44949Sopenharmony_ciconstexpr int32_t VIDEO_REQUEST_RESULT_TYPE_NUM = 102;
33e1c44949Sopenharmony_ciconstexpr int32_t CALL_SESSION_EVENT_ID_NUM = 4;
34e1c44949Sopenharmony_cistd::unique_ptr<CallStatusCallback> CallStatusCallbackPtr_ = nullptr;
35e1c44949Sopenharmony_ci
36e1c44949Sopenharmony_cibool ServiceInited()
37e1c44949Sopenharmony_ci{
38e1c44949Sopenharmony_ci    bool result = true;
39e1c44949Sopenharmony_ci    if (!IsServiceInited()) {
40e1c44949Sopenharmony_ci        return false;
41e1c44949Sopenharmony_ci    }
42e1c44949Sopenharmony_ci    CallStatusCallbackPtr_ = std::make_unique<CallStatusCallback>();
43e1c44949Sopenharmony_ci    if (CallStatusCallbackPtr_ == nullptr) {
44e1c44949Sopenharmony_ci        result = false;
45e1c44949Sopenharmony_ci    }
46e1c44949Sopenharmony_ci    return result;
47e1c44949Sopenharmony_ci}
48e1c44949Sopenharmony_ci
49e1c44949Sopenharmony_ciint32_t OnRemoteRequest(const uint8_t *data, size_t size)
50e1c44949Sopenharmony_ci{
51e1c44949Sopenharmony_ci    if (!ServiceInited()) {
52e1c44949Sopenharmony_ci        return TELEPHONY_ERROR;
53e1c44949Sopenharmony_ci    }
54e1c44949Sopenharmony_ci    MessageParcel dataMessageParcel;
55e1c44949Sopenharmony_ci    if (!dataMessageParcel.WriteInterfaceToken(CallStatusCallbackStub::GetDescriptor())) {
56e1c44949Sopenharmony_ci        return TELEPHONY_ERR_WRITE_DESCRIPTOR_TOKEN_FAIL;
57e1c44949Sopenharmony_ci    }
58e1c44949Sopenharmony_ci    dataMessageParcel.RewindRead(0);
59e1c44949Sopenharmony_ci    uint32_t code = static_cast<uint32_t>(size);
60e1c44949Sopenharmony_ci    MessageParcel reply;
61e1c44949Sopenharmony_ci    MessageOption option;
62e1c44949Sopenharmony_ci    return CallStatusCallbackPtr_->OnRemoteRequest(code, dataMessageParcel, reply, option);
63e1c44949Sopenharmony_ci}
64e1c44949Sopenharmony_ci
65e1c44949Sopenharmony_ciint32_t UpdateCallReportInfo(const uint8_t *data, size_t size)
66e1c44949Sopenharmony_ci{
67e1c44949Sopenharmony_ci    if (!ServiceInited()) {
68e1c44949Sopenharmony_ci        return TELEPHONY_ERROR;
69e1c44949Sopenharmony_ci    }
70e1c44949Sopenharmony_ci    MessageParcel dataParcel;
71e1c44949Sopenharmony_ci    if (!dataParcel.WriteInterfaceToken(CallStatusCallbackProxy::GetDescriptor())) {
72e1c44949Sopenharmony_ci        return TELEPHONY_ERR_WRITE_DESCRIPTOR_TOKEN_FAIL;
73e1c44949Sopenharmony_ci    }
74e1c44949Sopenharmony_ci    CallReportInfo callReportInfo;
75e1c44949Sopenharmony_ci    callReportInfo.index = static_cast<int32_t>(size);
76e1c44949Sopenharmony_ci    callReportInfo.accountId = static_cast<int32_t>(size % ACCOUNT_ID_NUM);
77e1c44949Sopenharmony_ci    callReportInfo.voiceDomain = static_cast<int32_t>(size % VOICE_DOMAIN_NUM);
78e1c44949Sopenharmony_ci    callReportInfo.mpty = static_cast<int32_t>(size % MULTI_PARTY_NUM);
79e1c44949Sopenharmony_ci    callReportInfo.callType = CallType::TYPE_ERR_CALL;
80e1c44949Sopenharmony_ci    callReportInfo.callMode = VideoStateType::TYPE_VOICE;
81e1c44949Sopenharmony_ci    callReportInfo.state = TelCallState::CALL_STATUS_UNKNOWN;
82e1c44949Sopenharmony_ci    std::string msg(reinterpret_cast<const char *>(data), size);
83e1c44949Sopenharmony_ci    int32_t accountLength = msg.length() > kMaxNumberLen ? kMaxNumberLen : msg.length();
84e1c44949Sopenharmony_ci    memcpy_s(callReportInfo.accountNum, kMaxNumberLen, msg.c_str(), accountLength);
85e1c44949Sopenharmony_ci    dataParcel.WriteInt32(callReportInfo.index);
86e1c44949Sopenharmony_ci    dataParcel.WriteCString(callReportInfo.accountNum);
87e1c44949Sopenharmony_ci    dataParcel.WriteInt32(callReportInfo.accountId);
88e1c44949Sopenharmony_ci    dataParcel.WriteInt32(static_cast<int32_t>(callReportInfo.callType));
89e1c44949Sopenharmony_ci    dataParcel.WriteInt32(static_cast<int32_t>(callReportInfo.callMode));
90e1c44949Sopenharmony_ci    dataParcel.WriteInt32(static_cast<int32_t>(callReportInfo.state));
91e1c44949Sopenharmony_ci    dataParcel.WriteInt32(callReportInfo.voiceDomain);
92e1c44949Sopenharmony_ci    dataParcel.WriteInt32(callReportInfo.mpty);
93e1c44949Sopenharmony_ci    dataParcel.WriteInt32(callReportInfo.crsType);
94e1c44949Sopenharmony_ci    dataParcel.WriteInt32(callReportInfo.originalCallType);
95e1c44949Sopenharmony_ci    dataParcel.WriteString(callReportInfo.voipCallInfo.voipCallId);
96e1c44949Sopenharmony_ci    dataParcel.WriteString(callReportInfo.voipCallInfo.userName);
97e1c44949Sopenharmony_ci    dataParcel.WriteString(callReportInfo.voipCallInfo.abilityName);
98e1c44949Sopenharmony_ci    dataParcel.WriteString(callReportInfo.voipCallInfo.extensionId);
99e1c44949Sopenharmony_ci    dataParcel.WriteString(callReportInfo.voipCallInfo.voipBundleName);
100e1c44949Sopenharmony_ci    dataParcel.WriteUInt8Vector(callReportInfo.voipCallInfo.userProfile);
101e1c44949Sopenharmony_ci    dataParcel.RewindRead(0);
102e1c44949Sopenharmony_ci    MessageParcel reply;
103e1c44949Sopenharmony_ci    return CallStatusCallbackPtr_->OnUpdateCallReportInfo(dataParcel, reply);
104e1c44949Sopenharmony_ci}
105e1c44949Sopenharmony_ci
106e1c44949Sopenharmony_ciint32_t UpdateCallsReportInfo(const uint8_t *data, size_t size)
107e1c44949Sopenharmony_ci{
108e1c44949Sopenharmony_ci    if (!ServiceInited()) {
109e1c44949Sopenharmony_ci        return TELEPHONY_ERROR;
110e1c44949Sopenharmony_ci    }
111e1c44949Sopenharmony_ci    MessageParcel dataParcel;
112e1c44949Sopenharmony_ci    if (!dataParcel.WriteInterfaceToken(CallStatusCallbackProxy::GetDescriptor())) {
113e1c44949Sopenharmony_ci        return TELEPHONY_ERR_WRITE_DESCRIPTOR_TOKEN_FAIL;
114e1c44949Sopenharmony_ci    }
115e1c44949Sopenharmony_ci    CallReportInfo info;
116e1c44949Sopenharmony_ci    int32_t slotId = static_cast<int32_t>(size % SLOT_NUM);
117e1c44949Sopenharmony_ci    int32_t vecSize = 1;
118e1c44949Sopenharmony_ci    info.index = static_cast<int32_t>(size);
119e1c44949Sopenharmony_ci    info.accountId = static_cast<int32_t>(size % ACCOUNT_ID_NUM);
120e1c44949Sopenharmony_ci    info.voiceDomain = static_cast<int32_t>(size % VOICE_DOMAIN_NUM);
121e1c44949Sopenharmony_ci    info.mpty = static_cast<int32_t>(size % MULTI_PARTY_NUM);
122e1c44949Sopenharmony_ci    info.callType = CallType::TYPE_ERR_CALL;
123e1c44949Sopenharmony_ci    info.callMode = VideoStateType::TYPE_VOICE;
124e1c44949Sopenharmony_ci    info.state = TelCallState::CALL_STATUS_UNKNOWN;
125e1c44949Sopenharmony_ci    std::string msg(reinterpret_cast<const char *>(data), size);
126e1c44949Sopenharmony_ci    int32_t accountLength = msg.length() > kMaxNumberLen ? kMaxNumberLen : msg.length();
127e1c44949Sopenharmony_ci    memcpy_s(info.accountNum, kMaxNumberLen, msg.c_str(), accountLength);
128e1c44949Sopenharmony_ci    dataParcel.WriteInt32(vecSize);
129e1c44949Sopenharmony_ci    dataParcel.WriteInt32(info.index);
130e1c44949Sopenharmony_ci    dataParcel.WriteCString(info.accountNum);
131e1c44949Sopenharmony_ci    dataParcel.WriteInt32(info.accountId);
132e1c44949Sopenharmony_ci    dataParcel.WriteInt32(static_cast<int32_t>(info.callType));
133e1c44949Sopenharmony_ci    dataParcel.WriteInt32(static_cast<int32_t>(info.callMode));
134e1c44949Sopenharmony_ci    dataParcel.WriteInt32(static_cast<int32_t>(info.state));
135e1c44949Sopenharmony_ci    dataParcel.WriteInt32(info.voiceDomain);
136e1c44949Sopenharmony_ci    dataParcel.WriteInt32(info.mpty);
137e1c44949Sopenharmony_ci    dataParcel.WriteInt32(info.crsType);
138e1c44949Sopenharmony_ci    dataParcel.WriteInt32(info.originalCallType);
139e1c44949Sopenharmony_ci    dataParcel.WriteString(info.voipCallInfo.voipCallId);
140e1c44949Sopenharmony_ci    dataParcel.WriteString(info.voipCallInfo.userName);
141e1c44949Sopenharmony_ci    dataParcel.WriteString(info.voipCallInfo.abilityName);
142e1c44949Sopenharmony_ci    dataParcel.WriteString(info.voipCallInfo.extensionId);
143e1c44949Sopenharmony_ci    dataParcel.WriteString(info.voipCallInfo.voipBundleName);
144e1c44949Sopenharmony_ci    dataParcel.WriteUInt8Vector(info.voipCallInfo.userProfile);
145e1c44949Sopenharmony_ci    dataParcel.WriteInt32(slotId);
146e1c44949Sopenharmony_ci    dataParcel.RewindRead(0);
147e1c44949Sopenharmony_ci    MessageParcel reply;
148e1c44949Sopenharmony_ci    return CallStatusCallbackPtr_->OnUpdateCallsReportInfo(dataParcel, reply);
149e1c44949Sopenharmony_ci}
150e1c44949Sopenharmony_ci
151e1c44949Sopenharmony_ciint32_t UpdateEventReport(const uint8_t *data, size_t size)
152e1c44949Sopenharmony_ci{
153e1c44949Sopenharmony_ci    if (!ServiceInited()) {
154e1c44949Sopenharmony_ci        return TELEPHONY_ERROR;
155e1c44949Sopenharmony_ci    }
156e1c44949Sopenharmony_ci    MessageParcel dataParcel;
157e1c44949Sopenharmony_ci    if (!dataParcel.WriteInterfaceToken(CallStatusCallbackProxy::GetDescriptor())) {
158e1c44949Sopenharmony_ci        return TELEPHONY_ERR_WRITE_DESCRIPTOR_TOKEN_FAIL;
159e1c44949Sopenharmony_ci    }
160e1c44949Sopenharmony_ci    CellularCallEventInfo info;
161e1c44949Sopenharmony_ci    int32_t length = sizeof(CellularCallEventInfo);
162e1c44949Sopenharmony_ci    info.eventType = CellularCallEventType::EVENT_REQUEST_RESULT_TYPE;
163e1c44949Sopenharmony_ci    info.eventId = RequestResultEventId::INVALID_REQUEST_RESULT_EVENT_ID;
164e1c44949Sopenharmony_ci    dataParcel.WriteInt32(length);
165e1c44949Sopenharmony_ci    dataParcel.WriteRawData((const void *)&info, length);
166e1c44949Sopenharmony_ci    dataParcel.RewindRead(0);
167e1c44949Sopenharmony_ci    MessageParcel reply;
168e1c44949Sopenharmony_ci    return CallStatusCallbackPtr_->OnUpdateEventReport(dataParcel, reply);
169e1c44949Sopenharmony_ci}
170e1c44949Sopenharmony_ci
171e1c44949Sopenharmony_ciint32_t UpdateGetWaitingResult(const uint8_t *data, size_t size)
172e1c44949Sopenharmony_ci{
173e1c44949Sopenharmony_ci    if (!ServiceInited()) {
174e1c44949Sopenharmony_ci        return TELEPHONY_ERROR;
175e1c44949Sopenharmony_ci    }
176e1c44949Sopenharmony_ci    MessageParcel dataParcel;
177e1c44949Sopenharmony_ci    if (!dataParcel.WriteInterfaceToken(CallStatusCallbackProxy::GetDescriptor())) {
178e1c44949Sopenharmony_ci        return TELEPHONY_ERR_WRITE_DESCRIPTOR_TOKEN_FAIL;
179e1c44949Sopenharmony_ci    }
180e1c44949Sopenharmony_ci    CallWaitResponse callWaitResponse;
181e1c44949Sopenharmony_ci    int32_t length = sizeof(CallWaitResponse);
182e1c44949Sopenharmony_ci    dataParcel.WriteInt32(length);
183e1c44949Sopenharmony_ci    callWaitResponse.result = static_cast<int32_t>(size);
184e1c44949Sopenharmony_ci    callWaitResponse.status = static_cast<int32_t>(size);
185e1c44949Sopenharmony_ci    callWaitResponse.classCw = static_cast<int32_t>(size);
186e1c44949Sopenharmony_ci    dataParcel.WriteRawData((const void *)&callWaitResponse, length);
187e1c44949Sopenharmony_ci    dataParcel.RewindRead(0);
188e1c44949Sopenharmony_ci    MessageParcel reply;
189e1c44949Sopenharmony_ci    return CallStatusCallbackPtr_->OnUpdateGetWaitingResult(dataParcel, reply);
190e1c44949Sopenharmony_ci}
191e1c44949Sopenharmony_ci
192e1c44949Sopenharmony_ciint32_t UpdateGetRestrictionResult(const uint8_t *data, size_t size)
193e1c44949Sopenharmony_ci{
194e1c44949Sopenharmony_ci    if (!ServiceInited()) {
195e1c44949Sopenharmony_ci        return TELEPHONY_ERROR;
196e1c44949Sopenharmony_ci    }
197e1c44949Sopenharmony_ci    MessageParcel dataParcel;
198e1c44949Sopenharmony_ci    if (!dataParcel.WriteInterfaceToken(CallStatusCallbackProxy::GetDescriptor())) {
199e1c44949Sopenharmony_ci        return TELEPHONY_ERR_WRITE_DESCRIPTOR_TOKEN_FAIL;
200e1c44949Sopenharmony_ci    }
201e1c44949Sopenharmony_ci    CallRestrictionResponse callRestrictionResult;
202e1c44949Sopenharmony_ci    int32_t length = sizeof(CallRestrictionResponse);
203e1c44949Sopenharmony_ci    dataParcel.WriteInt32(length);
204e1c44949Sopenharmony_ci    callRestrictionResult.result = static_cast<int32_t>(size);
205e1c44949Sopenharmony_ci    callRestrictionResult.status = static_cast<int32_t>(size);
206e1c44949Sopenharmony_ci    callRestrictionResult.classCw = static_cast<int32_t>(size);
207e1c44949Sopenharmony_ci    dataParcel.WriteRawData((const void *)&callRestrictionResult, length);
208e1c44949Sopenharmony_ci    dataParcel.RewindRead(0);
209e1c44949Sopenharmony_ci    MessageParcel reply;
210e1c44949Sopenharmony_ci    return CallStatusCallbackPtr_->OnUpdateGetRestrictionResult(dataParcel, reply);
211e1c44949Sopenharmony_ci}
212e1c44949Sopenharmony_ci
213e1c44949Sopenharmony_ciint32_t UpdateGetTransferResult(const uint8_t *data, size_t size)
214e1c44949Sopenharmony_ci{
215e1c44949Sopenharmony_ci    if (!ServiceInited()) {
216e1c44949Sopenharmony_ci        return TELEPHONY_ERROR;
217e1c44949Sopenharmony_ci    }
218e1c44949Sopenharmony_ci    MessageParcel dataParcel;
219e1c44949Sopenharmony_ci    if (!dataParcel.WriteInterfaceToken(CallStatusCallbackProxy::GetDescriptor())) {
220e1c44949Sopenharmony_ci        return TELEPHONY_ERR_WRITE_DESCRIPTOR_TOKEN_FAIL;
221e1c44949Sopenharmony_ci    }
222e1c44949Sopenharmony_ci    CallTransferResponse callTransferResponse;
223e1c44949Sopenharmony_ci    int32_t length = sizeof(CallTransferResponse);
224e1c44949Sopenharmony_ci    dataParcel.WriteInt32(length);
225e1c44949Sopenharmony_ci    callTransferResponse.result = static_cast<int32_t>(size);
226e1c44949Sopenharmony_ci    callTransferResponse.status = static_cast<int32_t>(size);
227e1c44949Sopenharmony_ci    callTransferResponse.classx = static_cast<int32_t>(size);
228e1c44949Sopenharmony_ci    callTransferResponse.type = static_cast<int32_t>(size);
229e1c44949Sopenharmony_ci    std::string msg(reinterpret_cast<const char *>(data), size);
230e1c44949Sopenharmony_ci    int32_t accountLength = msg.length() > kMaxNumberLen ? kMaxNumberLen : msg.length();
231e1c44949Sopenharmony_ci    memcpy_s(callTransferResponse.number, kMaxNumberLen, msg.c_str(), accountLength);
232e1c44949Sopenharmony_ci    callTransferResponse.reason = static_cast<int32_t>(size);
233e1c44949Sopenharmony_ci    callTransferResponse.time = static_cast<int32_t>(size);
234e1c44949Sopenharmony_ci    callTransferResponse.startHour = static_cast<int32_t>(size);
235e1c44949Sopenharmony_ci    callTransferResponse.startMinute = static_cast<int32_t>(size);
236e1c44949Sopenharmony_ci    callTransferResponse.endHour = static_cast<int32_t>(size);
237e1c44949Sopenharmony_ci    callTransferResponse.endMinute = static_cast<int32_t>(size);
238e1c44949Sopenharmony_ci    dataParcel.WriteRawData((const void *)&callTransferResponse, length);
239e1c44949Sopenharmony_ci    dataParcel.RewindRead(0);
240e1c44949Sopenharmony_ci    MessageParcel reply;
241e1c44949Sopenharmony_ci    return CallStatusCallbackPtr_->OnUpdateGetTransferResult(dataParcel, reply);
242e1c44949Sopenharmony_ci}
243e1c44949Sopenharmony_ci
244e1c44949Sopenharmony_ciint32_t UpdateGetCallClipResult(const uint8_t *data, size_t size)
245e1c44949Sopenharmony_ci{
246e1c44949Sopenharmony_ci    if (!ServiceInited()) {
247e1c44949Sopenharmony_ci        return TELEPHONY_ERROR;
248e1c44949Sopenharmony_ci    }
249e1c44949Sopenharmony_ci    MessageParcel dataParcel;
250e1c44949Sopenharmony_ci    if (!dataParcel.WriteInterfaceToken(CallStatusCallbackProxy::GetDescriptor())) {
251e1c44949Sopenharmony_ci        return TELEPHONY_ERR_WRITE_DESCRIPTOR_TOKEN_FAIL;
252e1c44949Sopenharmony_ci    }
253e1c44949Sopenharmony_ci    ClipResponse clipResponse;
254e1c44949Sopenharmony_ci    int32_t length = sizeof(ClipResponse);
255e1c44949Sopenharmony_ci    dataParcel.WriteInt32(length);
256e1c44949Sopenharmony_ci    clipResponse.result = static_cast<int32_t>(size);
257e1c44949Sopenharmony_ci    clipResponse.action = static_cast<int32_t>(size);
258e1c44949Sopenharmony_ci    clipResponse.clipStat = static_cast<int32_t>(size);
259e1c44949Sopenharmony_ci    dataParcel.WriteRawData((const void *)&clipResponse, length);
260e1c44949Sopenharmony_ci    dataParcel.RewindRead(0);
261e1c44949Sopenharmony_ci    MessageParcel reply;
262e1c44949Sopenharmony_ci    return CallStatusCallbackPtr_->OnUpdateGetCallClipResult(dataParcel, reply);
263e1c44949Sopenharmony_ci}
264e1c44949Sopenharmony_ci
265e1c44949Sopenharmony_ciint32_t GetImsConfigResult(const uint8_t *data, size_t size)
266e1c44949Sopenharmony_ci{
267e1c44949Sopenharmony_ci    if (!ServiceInited()) {
268e1c44949Sopenharmony_ci        return TELEPHONY_ERROR;
269e1c44949Sopenharmony_ci    }
270e1c44949Sopenharmony_ci    MessageParcel dataParcel;
271e1c44949Sopenharmony_ci    if (!dataParcel.WriteInterfaceToken(CallStatusCallbackProxy::GetDescriptor())) {
272e1c44949Sopenharmony_ci        return TELEPHONY_ERR_WRITE_DESCRIPTOR_TOKEN_FAIL;
273e1c44949Sopenharmony_ci    }
274e1c44949Sopenharmony_ci    GetImsConfigResponse response;
275e1c44949Sopenharmony_ci    int32_t length = sizeof(GetImsConfigResponse);
276e1c44949Sopenharmony_ci    dataParcel.WriteInt32(length);
277e1c44949Sopenharmony_ci    response.result = static_cast<int32_t>(size);
278e1c44949Sopenharmony_ci    response.value = static_cast<int32_t>(size);
279e1c44949Sopenharmony_ci    dataParcel.WriteRawData((const void *)&response, length);
280e1c44949Sopenharmony_ci    dataParcel.RewindRead(0);
281e1c44949Sopenharmony_ci    MessageParcel reply;
282e1c44949Sopenharmony_ci    return CallStatusCallbackPtr_->OnGetImsConfigResult(dataParcel, reply);
283e1c44949Sopenharmony_ci}
284e1c44949Sopenharmony_ci
285e1c44949Sopenharmony_ciint32_t GetImsFeatureValueResult(const uint8_t *data, size_t size)
286e1c44949Sopenharmony_ci{
287e1c44949Sopenharmony_ci    if (!ServiceInited()) {
288e1c44949Sopenharmony_ci        return TELEPHONY_ERROR;
289e1c44949Sopenharmony_ci    }
290e1c44949Sopenharmony_ci    MessageParcel dataParcel;
291e1c44949Sopenharmony_ci    if (!dataParcel.WriteInterfaceToken(CallStatusCallbackProxy::GetDescriptor())) {
292e1c44949Sopenharmony_ci        return TELEPHONY_ERR_WRITE_DESCRIPTOR_TOKEN_FAIL;
293e1c44949Sopenharmony_ci    }
294e1c44949Sopenharmony_ci    GetImsFeatureValueResponse response;
295e1c44949Sopenharmony_ci    int32_t length = sizeof(GetImsFeatureValueResponse);
296e1c44949Sopenharmony_ci    dataParcel.WriteInt32(length);
297e1c44949Sopenharmony_ci    response.result = static_cast<int32_t>(size);
298e1c44949Sopenharmony_ci    response.value = static_cast<int32_t>(size);
299e1c44949Sopenharmony_ci    dataParcel.WriteRawData((const void *)&response, length);
300e1c44949Sopenharmony_ci    dataParcel.RewindRead(0);
301e1c44949Sopenharmony_ci    MessageParcel reply;
302e1c44949Sopenharmony_ci    return CallStatusCallbackPtr_->OnGetImsFeatureValueResult(dataParcel, reply);
303e1c44949Sopenharmony_ci}
304e1c44949Sopenharmony_ci
305e1c44949Sopenharmony_ciint32_t SendMmiCodeResult(const uint8_t *data, size_t size)
306e1c44949Sopenharmony_ci{
307e1c44949Sopenharmony_ci    if (!ServiceInited()) {
308e1c44949Sopenharmony_ci        return TELEPHONY_ERROR;
309e1c44949Sopenharmony_ci    }
310e1c44949Sopenharmony_ci    MessageParcel dataParcel;
311e1c44949Sopenharmony_ci    if (!dataParcel.WriteInterfaceToken(CallStatusCallbackProxy::GetDescriptor())) {
312e1c44949Sopenharmony_ci        return TELEPHONY_ERR_WRITE_DESCRIPTOR_TOKEN_FAIL;
313e1c44949Sopenharmony_ci    }
314e1c44949Sopenharmony_ci    MmiCodeInfo info;
315e1c44949Sopenharmony_ci    int32_t length = sizeof(MmiCodeInfo);
316e1c44949Sopenharmony_ci    dataParcel.WriteInt32(length);
317e1c44949Sopenharmony_ci    info.result = static_cast<int32_t>(size);
318e1c44949Sopenharmony_ci    std::string msg(reinterpret_cast<const char *>(data), size);
319e1c44949Sopenharmony_ci    int32_t msgLength = msg.length() > kMaxNumberLen ? kMaxNumberLen : msg.length();
320e1c44949Sopenharmony_ci    memcpy_s(info.message, kMaxNumberLen, msg.c_str(), msgLength);
321e1c44949Sopenharmony_ci    dataParcel.WriteRawData((const void *)&info, length);
322e1c44949Sopenharmony_ci    dataParcel.RewindRead(0);
323e1c44949Sopenharmony_ci    MessageParcel reply;
324e1c44949Sopenharmony_ci    return CallStatusCallbackPtr_->OnSendMmiCodeResult(dataParcel, reply);
325e1c44949Sopenharmony_ci}
326e1c44949Sopenharmony_ci
327e1c44949Sopenharmony_ciint32_t ReceiveUpdateCallMediaModeRequest(const uint8_t *data, size_t size)
328e1c44949Sopenharmony_ci{
329e1c44949Sopenharmony_ci    if (!ServiceInited()) {
330e1c44949Sopenharmony_ci        return TELEPHONY_ERROR;
331e1c44949Sopenharmony_ci    }
332e1c44949Sopenharmony_ci    MessageParcel dataParcel;
333e1c44949Sopenharmony_ci    if (!dataParcel.WriteInterfaceToken(CallStatusCallbackProxy::GetDescriptor())) {
334e1c44949Sopenharmony_ci        return TELEPHONY_ERR_WRITE_DESCRIPTOR_TOKEN_FAIL;
335e1c44949Sopenharmony_ci    }
336e1c44949Sopenharmony_ci
337e1c44949Sopenharmony_ci    int32_t length = sizeof(CallModeReportInfo);
338e1c44949Sopenharmony_ci    dataParcel.WriteInt32(length);
339e1c44949Sopenharmony_ci    CallModeReportInfo callModeReportInfo;
340e1c44949Sopenharmony_ci    callModeReportInfo.callIndex = static_cast<int32_t>(size % CALL_INDEX_MAX_NUM);
341e1c44949Sopenharmony_ci    callModeReportInfo.callMode = static_cast<ImsCallMode>(size % IMS_CALL_MODE_NUM);
342e1c44949Sopenharmony_ci    callModeReportInfo.result = static_cast<VideoRequestResultType>(size % VIDEO_REQUEST_RESULT_TYPE_NUM);
343e1c44949Sopenharmony_ci    dataParcel.WriteRawData((const void *)&callModeReportInfo, length);
344e1c44949Sopenharmony_ci    dataParcel.RewindRead(0);
345e1c44949Sopenharmony_ci    MessageParcel reply;
346e1c44949Sopenharmony_ci    return CallStatusCallbackPtr_->OnReceiveImsCallModeRequest(dataParcel, reply);
347e1c44949Sopenharmony_ci}
348e1c44949Sopenharmony_ci
349e1c44949Sopenharmony_ciint32_t ReceiveUpdateCallMediaModeResponse(const uint8_t *data, size_t size)
350e1c44949Sopenharmony_ci{
351e1c44949Sopenharmony_ci    if (!ServiceInited()) {
352e1c44949Sopenharmony_ci        return TELEPHONY_ERROR;
353e1c44949Sopenharmony_ci    }
354e1c44949Sopenharmony_ci    MessageParcel dataParcel;
355e1c44949Sopenharmony_ci    if (!dataParcel.WriteInterfaceToken(CallStatusCallbackProxy::GetDescriptor())) {
356e1c44949Sopenharmony_ci        return TELEPHONY_ERR_WRITE_DESCRIPTOR_TOKEN_FAIL;
357e1c44949Sopenharmony_ci    }
358e1c44949Sopenharmony_ci
359e1c44949Sopenharmony_ci    int32_t length = sizeof(CallModeReportInfo);
360e1c44949Sopenharmony_ci    dataParcel.WriteInt32(length);
361e1c44949Sopenharmony_ci    CallModeReportInfo callModeReportInfo;
362e1c44949Sopenharmony_ci    callModeReportInfo.callIndex = static_cast<int32_t>(size % CALL_INDEX_MAX_NUM);
363e1c44949Sopenharmony_ci    callModeReportInfo.callMode = static_cast<ImsCallMode>(size % IMS_CALL_MODE_NUM);
364e1c44949Sopenharmony_ci    callModeReportInfo.result = static_cast<VideoRequestResultType>(size % VIDEO_REQUEST_RESULT_TYPE_NUM);
365e1c44949Sopenharmony_ci    dataParcel.WriteRawData((const void *)&callModeReportInfo, length);
366e1c44949Sopenharmony_ci    dataParcel.RewindRead(0);
367e1c44949Sopenharmony_ci    MessageParcel reply;
368e1c44949Sopenharmony_ci    return CallStatusCallbackPtr_->OnReceiveImsCallModeResponse(dataParcel, reply);
369e1c44949Sopenharmony_ci}
370e1c44949Sopenharmony_ci
371e1c44949Sopenharmony_ciint32_t HandleCallSessionEventChanged(const uint8_t *data, size_t size)
372e1c44949Sopenharmony_ci{
373e1c44949Sopenharmony_ci    if (!ServiceInited()) {
374e1c44949Sopenharmony_ci        return TELEPHONY_ERROR;
375e1c44949Sopenharmony_ci    }
376e1c44949Sopenharmony_ci    MessageParcel dataParcel;
377e1c44949Sopenharmony_ci    if (!dataParcel.WriteInterfaceToken(CallStatusCallbackProxy::GetDescriptor())) {
378e1c44949Sopenharmony_ci        return TELEPHONY_ERR_WRITE_DESCRIPTOR_TOKEN_FAIL;
379e1c44949Sopenharmony_ci    }
380e1c44949Sopenharmony_ci
381e1c44949Sopenharmony_ci    int32_t length = sizeof(CallSessionReportInfo);
382e1c44949Sopenharmony_ci    dataParcel.WriteInt32(length);
383e1c44949Sopenharmony_ci    CallSessionReportInfo callSessionReportInfo;
384e1c44949Sopenharmony_ci    callSessionReportInfo.index = static_cast<int32_t>(size % CALL_INDEX_MAX_NUM);
385e1c44949Sopenharmony_ci    callSessionReportInfo.eventId = static_cast<CallSessionEventId>(size % CALL_SESSION_EVENT_ID_NUM);
386e1c44949Sopenharmony_ci    dataParcel.WriteRawData((const void *)&callSessionReportInfo, length);
387e1c44949Sopenharmony_ci    dataParcel.RewindRead(0);
388e1c44949Sopenharmony_ci    MessageParcel reply;
389e1c44949Sopenharmony_ci    return CallStatusCallbackPtr_->OnCallSessionEventChange(dataParcel, reply);
390e1c44949Sopenharmony_ci}
391e1c44949Sopenharmony_ci
392e1c44949Sopenharmony_ciint32_t HandlePeerDimensionsChanged(const uint8_t *data, size_t size)
393e1c44949Sopenharmony_ci{
394e1c44949Sopenharmony_ci    if (!ServiceInited()) {
395e1c44949Sopenharmony_ci        return TELEPHONY_ERROR;
396e1c44949Sopenharmony_ci    }
397e1c44949Sopenharmony_ci    MessageParcel dataParcel;
398e1c44949Sopenharmony_ci    if (!dataParcel.WriteInterfaceToken(CallStatusCallbackProxy::GetDescriptor())) {
399e1c44949Sopenharmony_ci        return TELEPHONY_ERR_WRITE_DESCRIPTOR_TOKEN_FAIL;
400e1c44949Sopenharmony_ci    }
401e1c44949Sopenharmony_ci
402e1c44949Sopenharmony_ci    int32_t length = sizeof(PeerDimensionsReportInfo);
403e1c44949Sopenharmony_ci    dataParcel.WriteInt32(length);
404e1c44949Sopenharmony_ci    PeerDimensionsReportInfo dimensionsReportInfo;
405e1c44949Sopenharmony_ci    dimensionsReportInfo.index = static_cast<int32_t>(size % CALL_INDEX_MAX_NUM);
406e1c44949Sopenharmony_ci    dimensionsReportInfo.width = static_cast<int32_t>(size);
407e1c44949Sopenharmony_ci    dimensionsReportInfo.height = static_cast<int32_t>(size);
408e1c44949Sopenharmony_ci    dataParcel.WriteRawData((const void *)&dimensionsReportInfo, length);
409e1c44949Sopenharmony_ci    dataParcel.RewindRead(0);
410e1c44949Sopenharmony_ci    MessageParcel reply;
411e1c44949Sopenharmony_ci    return CallStatusCallbackPtr_->OnPeerDimensionsChange(dataParcel, reply);
412e1c44949Sopenharmony_ci}
413e1c44949Sopenharmony_ci
414e1c44949Sopenharmony_ciint32_t HandleCallDataUsageChanged(const uint8_t *data, size_t size)
415e1c44949Sopenharmony_ci{
416e1c44949Sopenharmony_ci    if (!ServiceInited()) {
417e1c44949Sopenharmony_ci        return TELEPHONY_ERROR;
418e1c44949Sopenharmony_ci    }
419e1c44949Sopenharmony_ci    MessageParcel dataParcel;
420e1c44949Sopenharmony_ci    if (!dataParcel.WriteInterfaceToken(CallStatusCallbackProxy::GetDescriptor())) {
421e1c44949Sopenharmony_ci        return TELEPHONY_ERR_WRITE_DESCRIPTOR_TOKEN_FAIL;
422e1c44949Sopenharmony_ci    }
423e1c44949Sopenharmony_ci
424e1c44949Sopenharmony_ci    int64_t reportInfo = static_cast<int64_t>(size);
425e1c44949Sopenharmony_ci    dataParcel.WriteInt64(reportInfo);
426e1c44949Sopenharmony_ci    dataParcel.RewindRead(0);
427e1c44949Sopenharmony_ci    MessageParcel reply;
428e1c44949Sopenharmony_ci    return CallStatusCallbackPtr_->OnCallDataUsageChange(dataParcel, reply);
429e1c44949Sopenharmony_ci}
430e1c44949Sopenharmony_ci
431e1c44949Sopenharmony_ciint32_t HandleCameraCapabilitiesChanged(const uint8_t *data, size_t size)
432e1c44949Sopenharmony_ci{
433e1c44949Sopenharmony_ci    if (!ServiceInited()) {
434e1c44949Sopenharmony_ci        return TELEPHONY_ERROR;
435e1c44949Sopenharmony_ci    }
436e1c44949Sopenharmony_ci    MessageParcel dataParcel;
437e1c44949Sopenharmony_ci    if (!dataParcel.WriteInterfaceToken(CallStatusCallbackProxy::GetDescriptor())) {
438e1c44949Sopenharmony_ci        return TELEPHONY_ERR_WRITE_DESCRIPTOR_TOKEN_FAIL;
439e1c44949Sopenharmony_ci    }
440e1c44949Sopenharmony_ci
441e1c44949Sopenharmony_ci    int32_t length = sizeof(CameraCapabilitiesReportInfo);
442e1c44949Sopenharmony_ci    dataParcel.WriteInt32(length);
443e1c44949Sopenharmony_ci    CameraCapabilitiesReportInfo cameraCapabilitiesReportInfo;
444e1c44949Sopenharmony_ci    cameraCapabilitiesReportInfo.index = static_cast<int32_t>(size % CALL_INDEX_MAX_NUM);
445e1c44949Sopenharmony_ci    cameraCapabilitiesReportInfo.width = static_cast<int32_t>(size);
446e1c44949Sopenharmony_ci    cameraCapabilitiesReportInfo.height = static_cast<int32_t>(size);
447e1c44949Sopenharmony_ci    dataParcel.WriteRawData((const void *)&cameraCapabilitiesReportInfo, length);
448e1c44949Sopenharmony_ci    dataParcel.RewindRead(0);
449e1c44949Sopenharmony_ci    MessageParcel reply;
450e1c44949Sopenharmony_ci    return CallStatusCallbackPtr_->OnCameraCapabilitiesChange(dataParcel, reply);
451e1c44949Sopenharmony_ci}
452e1c44949Sopenharmony_ci
453e1c44949Sopenharmony_civoid DoSomethingInterestingWithMyAPI(const uint8_t *data, size_t size)
454e1c44949Sopenharmony_ci{
455e1c44949Sopenharmony_ci    if (data == nullptr || size == 0) {
456e1c44949Sopenharmony_ci        return;
457e1c44949Sopenharmony_ci    }
458e1c44949Sopenharmony_ci    OnRemoteRequest(data, size);
459e1c44949Sopenharmony_ci    UpdateCallReportInfo(data, size);
460e1c44949Sopenharmony_ci    UpdateCallsReportInfo(data, size);
461e1c44949Sopenharmony_ci    UpdateEventReport(data, size);
462e1c44949Sopenharmony_ci    UpdateGetWaitingResult(data, size);
463e1c44949Sopenharmony_ci    UpdateGetRestrictionResult(data, size);
464e1c44949Sopenharmony_ci    UpdateGetTransferResult(data, size);
465e1c44949Sopenharmony_ci    UpdateGetCallClipResult(data, size);
466e1c44949Sopenharmony_ci    GetImsConfigResult(data, size);
467e1c44949Sopenharmony_ci    GetImsFeatureValueResult(data, size);
468e1c44949Sopenharmony_ci    SendMmiCodeResult(data, size);
469e1c44949Sopenharmony_ci    ReceiveUpdateCallMediaModeRequest(data, size);
470e1c44949Sopenharmony_ci    ReceiveUpdateCallMediaModeResponse(data, size);
471e1c44949Sopenharmony_ci    HandleCallSessionEventChanged(data, size);
472e1c44949Sopenharmony_ci    HandlePeerDimensionsChanged(data, size);
473e1c44949Sopenharmony_ci    HandleCallDataUsageChanged(data, size);
474e1c44949Sopenharmony_ci    HandleCameraCapabilitiesChanged(data, size);
475e1c44949Sopenharmony_ci}
476e1c44949Sopenharmony_ci} // namespace OHOS
477e1c44949Sopenharmony_ci
478e1c44949Sopenharmony_ci/* Fuzzer entry point */
479e1c44949Sopenharmony_ciextern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
480e1c44949Sopenharmony_ci{
481e1c44949Sopenharmony_ci    OHOS::AddCallTokenFuzzer token;
482e1c44949Sopenharmony_ci    /* Run your code on data */
483e1c44949Sopenharmony_ci    OHOS::DoSomethingInterestingWithMyAPI(data, size);
484e1c44949Sopenharmony_ci    return 0;
485e1c44949Sopenharmony_ci}
486