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