1e1c44949Sopenharmony_ci/* 2e1c44949Sopenharmony_ci * Copyright (c) 2022 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 "bluetoothdialcall_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 "bluetooth_call_service.h" 23e1c44949Sopenharmony_ci#include "message_parcel.h" 24e1c44949Sopenharmony_ci 25e1c44949Sopenharmony_ciusing namespace OHOS::Telephony; 26e1c44949Sopenharmony_cinamespace OHOS { 27e1c44949Sopenharmony_ciconstexpr int32_t SLOT_NUM = 3; 28e1c44949Sopenharmony_ci 29e1c44949Sopenharmony_civoid AnswerCall(const uint8_t *data, size_t size) 30e1c44949Sopenharmony_ci{ 31e1c44949Sopenharmony_ci if (!IsServiceInited()) { 32e1c44949Sopenharmony_ci return; 33e1c44949Sopenharmony_ci } 34e1c44949Sopenharmony_ci 35e1c44949Sopenharmony_ci MessageParcel dataParcel; 36e1c44949Sopenharmony_ci dataParcel.WriteBuffer(data, size); 37e1c44949Sopenharmony_ci dataParcel.RewindRead(0); 38e1c44949Sopenharmony_ci MessageParcel reply; 39e1c44949Sopenharmony_ci DelayedSingleton<BluetoothCallService>::GetInstance()->OnAnswerCall(dataParcel, reply); 40e1c44949Sopenharmony_ci} 41e1c44949Sopenharmony_ci 42e1c44949Sopenharmony_civoid RejectCall(const uint8_t *data, size_t size) 43e1c44949Sopenharmony_ci{ 44e1c44949Sopenharmony_ci if (!IsServiceInited()) { 45e1c44949Sopenharmony_ci return; 46e1c44949Sopenharmony_ci } 47e1c44949Sopenharmony_ci 48e1c44949Sopenharmony_ci MessageParcel dataParcel; 49e1c44949Sopenharmony_ci dataParcel.WriteBuffer(data, size); 50e1c44949Sopenharmony_ci dataParcel.RewindRead(0); 51e1c44949Sopenharmony_ci MessageParcel reply; 52e1c44949Sopenharmony_ci DelayedSingleton<BluetoothCallService>::GetInstance()->OnRejectCall(dataParcel, reply); 53e1c44949Sopenharmony_ci} 54e1c44949Sopenharmony_ci 55e1c44949Sopenharmony_civoid HangUpCall(const uint8_t *data, size_t size) 56e1c44949Sopenharmony_ci{ 57e1c44949Sopenharmony_ci if (!IsServiceInited()) { 58e1c44949Sopenharmony_ci return; 59e1c44949Sopenharmony_ci } 60e1c44949Sopenharmony_ci 61e1c44949Sopenharmony_ci MessageParcel dataParcel; 62e1c44949Sopenharmony_ci dataParcel.WriteBuffer(data, size); 63e1c44949Sopenharmony_ci dataParcel.RewindRead(0); 64e1c44949Sopenharmony_ci MessageParcel reply; 65e1c44949Sopenharmony_ci DelayedSingleton<BluetoothCallService>::GetInstance()->OnHangUpCall(dataParcel, reply); 66e1c44949Sopenharmony_ci} 67e1c44949Sopenharmony_ci 68e1c44949Sopenharmony_civoid GetBtCallState(const uint8_t *data, size_t size) 69e1c44949Sopenharmony_ci{ 70e1c44949Sopenharmony_ci if (!IsServiceInited()) { 71e1c44949Sopenharmony_ci return; 72e1c44949Sopenharmony_ci } 73e1c44949Sopenharmony_ci 74e1c44949Sopenharmony_ci MessageParcel dataParcel; 75e1c44949Sopenharmony_ci dataParcel.WriteBuffer(data, size); 76e1c44949Sopenharmony_ci dataParcel.RewindRead(0); 77e1c44949Sopenharmony_ci MessageParcel reply; 78e1c44949Sopenharmony_ci DelayedSingleton<BluetoothCallService>::GetInstance()->OnGetBtCallState(dataParcel, reply); 79e1c44949Sopenharmony_ci} 80e1c44949Sopenharmony_ci 81e1c44949Sopenharmony_civoid HoldCall(const uint8_t *data, size_t size) 82e1c44949Sopenharmony_ci{ 83e1c44949Sopenharmony_ci if (!IsServiceInited()) { 84e1c44949Sopenharmony_ci return; 85e1c44949Sopenharmony_ci } 86e1c44949Sopenharmony_ci 87e1c44949Sopenharmony_ci MessageParcel dataParcel; 88e1c44949Sopenharmony_ci dataParcel.WriteBuffer(data, size); 89e1c44949Sopenharmony_ci dataParcel.RewindRead(0); 90e1c44949Sopenharmony_ci MessageParcel reply; 91e1c44949Sopenharmony_ci DelayedSingleton<BluetoothCallService>::GetInstance()->OnHoldCall(dataParcel, reply); 92e1c44949Sopenharmony_ci} 93e1c44949Sopenharmony_ci 94e1c44949Sopenharmony_civoid UnHoldCall(const uint8_t *data, size_t size) 95e1c44949Sopenharmony_ci{ 96e1c44949Sopenharmony_ci if (!IsServiceInited()) { 97e1c44949Sopenharmony_ci return; 98e1c44949Sopenharmony_ci } 99e1c44949Sopenharmony_ci 100e1c44949Sopenharmony_ci MessageParcel dataParcel; 101e1c44949Sopenharmony_ci dataParcel.WriteBuffer(data, size); 102e1c44949Sopenharmony_ci dataParcel.RewindRead(0); 103e1c44949Sopenharmony_ci MessageParcel reply; 104e1c44949Sopenharmony_ci DelayedSingleton<BluetoothCallService>::GetInstance()->OnUnHoldCall(dataParcel, reply); 105e1c44949Sopenharmony_ci} 106e1c44949Sopenharmony_ci 107e1c44949Sopenharmony_civoid SwitchCall(const uint8_t *data, size_t size) 108e1c44949Sopenharmony_ci{ 109e1c44949Sopenharmony_ci if (!IsServiceInited()) { 110e1c44949Sopenharmony_ci return; 111e1c44949Sopenharmony_ci } 112e1c44949Sopenharmony_ci 113e1c44949Sopenharmony_ci MessageParcel dataParcel; 114e1c44949Sopenharmony_ci dataParcel.WriteBuffer(data, size); 115e1c44949Sopenharmony_ci dataParcel.RewindRead(0); 116e1c44949Sopenharmony_ci MessageParcel reply; 117e1c44949Sopenharmony_ci DelayedSingleton<BluetoothCallService>::GetInstance()->OnSwitchCall(dataParcel, reply); 118e1c44949Sopenharmony_ci} 119e1c44949Sopenharmony_ci 120e1c44949Sopenharmony_civoid CombineConference(const uint8_t *data, size_t size) 121e1c44949Sopenharmony_ci{ 122e1c44949Sopenharmony_ci if (!IsServiceInited()) { 123e1c44949Sopenharmony_ci return; 124e1c44949Sopenharmony_ci } 125e1c44949Sopenharmony_ci 126e1c44949Sopenharmony_ci MessageParcel dataParcel; 127e1c44949Sopenharmony_ci dataParcel.WriteBuffer(data, size); 128e1c44949Sopenharmony_ci dataParcel.RewindRead(0); 129e1c44949Sopenharmony_ci MessageParcel reply; 130e1c44949Sopenharmony_ci DelayedSingleton<BluetoothCallService>::GetInstance()->OnCombineConference(dataParcel, reply); 131e1c44949Sopenharmony_ci} 132e1c44949Sopenharmony_ci 133e1c44949Sopenharmony_civoid SeparateConference(const uint8_t *data, size_t size) 134e1c44949Sopenharmony_ci{ 135e1c44949Sopenharmony_ci if (!IsServiceInited()) { 136e1c44949Sopenharmony_ci return; 137e1c44949Sopenharmony_ci } 138e1c44949Sopenharmony_ci 139e1c44949Sopenharmony_ci MessageParcel dataParcel; 140e1c44949Sopenharmony_ci dataParcel.WriteBuffer(data, size); 141e1c44949Sopenharmony_ci dataParcel.RewindRead(0); 142e1c44949Sopenharmony_ci MessageParcel reply; 143e1c44949Sopenharmony_ci DelayedSingleton<BluetoothCallService>::GetInstance()->OnSeparateConference(dataParcel, reply); 144e1c44949Sopenharmony_ci} 145e1c44949Sopenharmony_ci 146e1c44949Sopenharmony_civoid KickOutFromConference(const uint8_t *data, size_t size) 147e1c44949Sopenharmony_ci{ 148e1c44949Sopenharmony_ci if (!IsServiceInited()) { 149e1c44949Sopenharmony_ci return; 150e1c44949Sopenharmony_ci } 151e1c44949Sopenharmony_ci 152e1c44949Sopenharmony_ci MessageParcel dataParcel; 153e1c44949Sopenharmony_ci dataParcel.WriteBuffer(data, size); 154e1c44949Sopenharmony_ci dataParcel.RewindRead(0); 155e1c44949Sopenharmony_ci MessageParcel reply; 156e1c44949Sopenharmony_ci DelayedSingleton<BluetoothCallService>::GetInstance()->OnKickOutFromConference(dataParcel, reply); 157e1c44949Sopenharmony_ci} 158e1c44949Sopenharmony_ci 159e1c44949Sopenharmony_civoid StartDtmf(const uint8_t *data, size_t size) 160e1c44949Sopenharmony_ci{ 161e1c44949Sopenharmony_ci if (!IsServiceInited()) { 162e1c44949Sopenharmony_ci return; 163e1c44949Sopenharmony_ci } 164e1c44949Sopenharmony_ci 165e1c44949Sopenharmony_ci MessageParcel dataParcel; 166e1c44949Sopenharmony_ci dataParcel.WriteInt8(*data); 167e1c44949Sopenharmony_ci dataParcel.WriteBuffer(data, size); 168e1c44949Sopenharmony_ci dataParcel.RewindRead(0); 169e1c44949Sopenharmony_ci MessageParcel reply; 170e1c44949Sopenharmony_ci DelayedSingleton<BluetoothCallService>::GetInstance()->OnStartDtmf(dataParcel, reply); 171e1c44949Sopenharmony_ci} 172e1c44949Sopenharmony_ci 173e1c44949Sopenharmony_civoid StopDtmf(const uint8_t *data, size_t size) 174e1c44949Sopenharmony_ci{ 175e1c44949Sopenharmony_ci if (!IsServiceInited()) { 176e1c44949Sopenharmony_ci return; 177e1c44949Sopenharmony_ci } 178e1c44949Sopenharmony_ci 179e1c44949Sopenharmony_ci MessageParcel dataParcel; 180e1c44949Sopenharmony_ci dataParcel.WriteBuffer(data, size); 181e1c44949Sopenharmony_ci dataParcel.RewindRead(0); 182e1c44949Sopenharmony_ci MessageParcel reply; 183e1c44949Sopenharmony_ci DelayedSingleton<BluetoothCallService>::GetInstance()->OnStopDtmf(dataParcel, reply); 184e1c44949Sopenharmony_ci} 185e1c44949Sopenharmony_ci 186e1c44949Sopenharmony_civoid GetCurrentCallList(const uint8_t *data, size_t size) 187e1c44949Sopenharmony_ci{ 188e1c44949Sopenharmony_ci if (!IsServiceInited()) { 189e1c44949Sopenharmony_ci return; 190e1c44949Sopenharmony_ci } 191e1c44949Sopenharmony_ci 192e1c44949Sopenharmony_ci int32_t slotId = static_cast<int32_t>(size % SLOT_NUM); 193e1c44949Sopenharmony_ci MessageParcel dataParcel; 194e1c44949Sopenharmony_ci dataParcel.WriteInt32(slotId); 195e1c44949Sopenharmony_ci dataParcel.WriteBuffer(data, size); 196e1c44949Sopenharmony_ci dataParcel.RewindRead(0); 197e1c44949Sopenharmony_ci MessageParcel reply; 198e1c44949Sopenharmony_ci DelayedSingleton<BluetoothCallService>::GetInstance()->OnGetCurrentCallList(dataParcel, reply); 199e1c44949Sopenharmony_ci} 200e1c44949Sopenharmony_ci 201e1c44949Sopenharmony_civoid DoSomethingInterestingWithMyAPI(const uint8_t *data, size_t size) 202e1c44949Sopenharmony_ci{ 203e1c44949Sopenharmony_ci if (data == nullptr || size == 0) { 204e1c44949Sopenharmony_ci return; 205e1c44949Sopenharmony_ci } 206e1c44949Sopenharmony_ci 207e1c44949Sopenharmony_ci AnswerCall(data, size); 208e1c44949Sopenharmony_ci RejectCall(data, size); 209e1c44949Sopenharmony_ci HangUpCall(data, size); 210e1c44949Sopenharmony_ci GetBtCallState(data, size); 211e1c44949Sopenharmony_ci HoldCall(data, size); 212e1c44949Sopenharmony_ci UnHoldCall(data, size); 213e1c44949Sopenharmony_ci SwitchCall(data, size); 214e1c44949Sopenharmony_ci CombineConference(data, size); 215e1c44949Sopenharmony_ci SeparateConference(data, size); 216e1c44949Sopenharmony_ci KickOutFromConference(data, size); 217e1c44949Sopenharmony_ci StartDtmf(data, size); 218e1c44949Sopenharmony_ci StopDtmf(data, size); 219e1c44949Sopenharmony_ci GetCurrentCallList(data, size); 220e1c44949Sopenharmony_ci} 221e1c44949Sopenharmony_ci} // namespace OHOS 222e1c44949Sopenharmony_ci 223e1c44949Sopenharmony_ci/* Fuzzer entry point */ 224e1c44949Sopenharmony_ciextern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) 225e1c44949Sopenharmony_ci{ 226e1c44949Sopenharmony_ci OHOS::AddCallTokenFuzzer token; 227e1c44949Sopenharmony_ci /* Run your code on data */ 228e1c44949Sopenharmony_ci OHOS::DoSomethingInterestingWithMyAPI(data, size); 229e1c44949Sopenharmony_ci return 0; 230e1c44949Sopenharmony_ci} 231