/* * Copyright (c) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "bluetoothdialcall_fuzzer.h" #include #include #define private public #include "addcalltoken_fuzzer.h" #include "bluetooth_call_service.h" #include "message_parcel.h" using namespace OHOS::Telephony; namespace OHOS { constexpr int32_t SLOT_NUM = 3; void AnswerCall(const uint8_t *data, size_t size) { if (!IsServiceInited()) { return; } MessageParcel dataParcel; dataParcel.WriteBuffer(data, size); dataParcel.RewindRead(0); MessageParcel reply; DelayedSingleton::GetInstance()->OnAnswerCall(dataParcel, reply); } void RejectCall(const uint8_t *data, size_t size) { if (!IsServiceInited()) { return; } MessageParcel dataParcel; dataParcel.WriteBuffer(data, size); dataParcel.RewindRead(0); MessageParcel reply; DelayedSingleton::GetInstance()->OnRejectCall(dataParcel, reply); } void HangUpCall(const uint8_t *data, size_t size) { if (!IsServiceInited()) { return; } MessageParcel dataParcel; dataParcel.WriteBuffer(data, size); dataParcel.RewindRead(0); MessageParcel reply; DelayedSingleton::GetInstance()->OnHangUpCall(dataParcel, reply); } void GetBtCallState(const uint8_t *data, size_t size) { if (!IsServiceInited()) { return; } MessageParcel dataParcel; dataParcel.WriteBuffer(data, size); dataParcel.RewindRead(0); MessageParcel reply; DelayedSingleton::GetInstance()->OnGetBtCallState(dataParcel, reply); } void HoldCall(const uint8_t *data, size_t size) { if (!IsServiceInited()) { return; } MessageParcel dataParcel; dataParcel.WriteBuffer(data, size); dataParcel.RewindRead(0); MessageParcel reply; DelayedSingleton::GetInstance()->OnHoldCall(dataParcel, reply); } void UnHoldCall(const uint8_t *data, size_t size) { if (!IsServiceInited()) { return; } MessageParcel dataParcel; dataParcel.WriteBuffer(data, size); dataParcel.RewindRead(0); MessageParcel reply; DelayedSingleton::GetInstance()->OnUnHoldCall(dataParcel, reply); } void SwitchCall(const uint8_t *data, size_t size) { if (!IsServiceInited()) { return; } MessageParcel dataParcel; dataParcel.WriteBuffer(data, size); dataParcel.RewindRead(0); MessageParcel reply; DelayedSingleton::GetInstance()->OnSwitchCall(dataParcel, reply); } void CombineConference(const uint8_t *data, size_t size) { if (!IsServiceInited()) { return; } MessageParcel dataParcel; dataParcel.WriteBuffer(data, size); dataParcel.RewindRead(0); MessageParcel reply; DelayedSingleton::GetInstance()->OnCombineConference(dataParcel, reply); } void SeparateConference(const uint8_t *data, size_t size) { if (!IsServiceInited()) { return; } MessageParcel dataParcel; dataParcel.WriteBuffer(data, size); dataParcel.RewindRead(0); MessageParcel reply; DelayedSingleton::GetInstance()->OnSeparateConference(dataParcel, reply); } void KickOutFromConference(const uint8_t *data, size_t size) { if (!IsServiceInited()) { return; } MessageParcel dataParcel; dataParcel.WriteBuffer(data, size); dataParcel.RewindRead(0); MessageParcel reply; DelayedSingleton::GetInstance()->OnKickOutFromConference(dataParcel, reply); } void StartDtmf(const uint8_t *data, size_t size) { if (!IsServiceInited()) { return; } MessageParcel dataParcel; dataParcel.WriteInt8(*data); dataParcel.WriteBuffer(data, size); dataParcel.RewindRead(0); MessageParcel reply; DelayedSingleton::GetInstance()->OnStartDtmf(dataParcel, reply); } void StopDtmf(const uint8_t *data, size_t size) { if (!IsServiceInited()) { return; } MessageParcel dataParcel; dataParcel.WriteBuffer(data, size); dataParcel.RewindRead(0); MessageParcel reply; DelayedSingleton::GetInstance()->OnStopDtmf(dataParcel, reply); } void GetCurrentCallList(const uint8_t *data, size_t size) { if (!IsServiceInited()) { return; } int32_t slotId = static_cast(size % SLOT_NUM); MessageParcel dataParcel; dataParcel.WriteInt32(slotId); dataParcel.WriteBuffer(data, size); dataParcel.RewindRead(0); MessageParcel reply; DelayedSingleton::GetInstance()->OnGetCurrentCallList(dataParcel, reply); } void DoSomethingInterestingWithMyAPI(const uint8_t *data, size_t size) { if (data == nullptr || size == 0) { return; } AnswerCall(data, size); RejectCall(data, size); HangUpCall(data, size); GetBtCallState(data, size); HoldCall(data, size); UnHoldCall(data, size); SwitchCall(data, size); CombineConference(data, size); SeparateConference(data, size); KickOutFromConference(data, size); StartDtmf(data, size); StopDtmf(data, size); GetCurrentCallList(data, size); } } // namespace OHOS /* Fuzzer entry point */ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { OHOS::AddCallTokenFuzzer token; /* Run your code on data */ OHOS::DoSomethingInterestingWithMyAPI(data, size); return 0; }