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