1 #include <cstddef>
2 #include <cstdint>
3
4 #include "avrcp_packet.h"
5 #include "device.h"
6 #include "internal_include/stack_config.h"
7 #include "packet_test_helper.h"
8 #include "stack/include/a2dp_api.h"
9 #include "types/raw_address.h"
10
btif_av_src_sink_coexist_enabled(void)11 bool btif_av_src_sink_coexist_enabled(void) { return true; }
12
13 namespace bluetooth {
14 namespace avrcp {
15 class FakeMediaInterface : public MediaInterface {
16 public:
SendKeyEvent(uint8_t key,KeyState state)17 virtual void SendKeyEvent(uint8_t key, KeyState state) {}
18 using SongInfoCallback = base::Callback<void(SongInfo)>;
GetSongInfo(SongInfoCallback info_cb)19 virtual void GetSongInfo(SongInfoCallback info_cb) {}
20 using PlayStatusCallback = base::Callback<void(PlayStatus)>;
GetPlayStatus(PlayStatusCallback status_cb)21 virtual void GetPlayStatus(PlayStatusCallback status_cb) {}
22 using NowPlayingCallback =
23 base::Callback<void(std::string, std::vector<SongInfo>)>;
GetNowPlayingList(NowPlayingCallback now_playing_cb)24 virtual void GetNowPlayingList(NowPlayingCallback now_playing_cb) {}
25 using MediaListCallback =
26 base::Callback<void(uint16_t curr_player, std::vector<MediaPlayerInfo>)>;
GetMediaPlayerList(MediaListCallback list_cb)27 virtual void GetMediaPlayerList(MediaListCallback list_cb) {}
28 using FolderItemsCallback = base::Callback<void(std::vector<ListItem>)>;
GetFolderItems(uint16_t player_id,std::string media_id,FolderItemsCallback folder_cb)29 virtual void GetFolderItems(uint16_t player_id, std::string media_id,
30 FolderItemsCallback folder_cb) {}
31 using SetBrowsedPlayerCallback = base::Callback<void(
32 bool success, std::string root_id, uint32_t num_items)>;
SetBrowsedPlayer(uint16_t player_id,SetBrowsedPlayerCallback browse_cb)33 virtual void SetBrowsedPlayer(uint16_t player_id,
34 SetBrowsedPlayerCallback browse_cb) {}
PlayItem(uint16_t player_id,bool now_playing,std::string media_id)35 virtual void PlayItem(uint16_t player_id, bool now_playing,
36 std::string media_id) {}
SetActiveDevice(const RawAddress & address)37 virtual void SetActiveDevice(const RawAddress& address) {}
RegisterUpdateCallback(MediaCallbacks * callback)38 virtual void RegisterUpdateCallback(MediaCallbacks* callback) {}
UnregisterUpdateCallback(MediaCallbacks * callback)39 virtual void UnregisterUpdateCallback(MediaCallbacks* callback) {}
40 };
41
42 class FakeVolumeInterface : public VolumeInterface {
43 public:
DeviceConnected(const RawAddress & bdaddr)44 virtual void DeviceConnected(const RawAddress& bdaddr) {}
DeviceConnected(const RawAddress & bdaddr,VolumeChangedCb cb)45 virtual void DeviceConnected(const RawAddress& bdaddr, VolumeChangedCb cb) {}
DeviceDisconnected(const RawAddress & bdaddr)46 virtual void DeviceDisconnected(const RawAddress& bdaddr) {}
SetVolume(int8_t volume)47 virtual void SetVolume(int8_t volume) {}
48 };
49
50 class FakePlayerSettingsInterface : public PlayerSettingsInterface {
51 public:
ListPlayerSettings(ListPlayerSettingsCallback cb)52 virtual void ListPlayerSettings(ListPlayerSettingsCallback cb) {}
ListPlayerSettingValues(PlayerAttribute setting,ListPlayerSettingValuesCallback cb)53 virtual void ListPlayerSettingValues(PlayerAttribute setting,
54 ListPlayerSettingValuesCallback cb) {}
GetCurrentPlayerSettingValue(std::vector<PlayerAttribute> attributes,GetCurrentPlayerSettingValueCallback cb)55 virtual void GetCurrentPlayerSettingValue(
56 std::vector<PlayerAttribute> attributes,
57 GetCurrentPlayerSettingValueCallback cb) {}
SetPlayerSettings(std::vector<PlayerAttribute> attributes,std::vector<uint8_t> values,SetPlayerSettingValueCallback cb)58 virtual void SetPlayerSettings(std::vector<PlayerAttribute> attributes,
59 std::vector<uint8_t> values,
60 SetPlayerSettingValueCallback cb) {}
61 };
62
63 class FakeA2dpInterface : public A2dpInterface {
64 public:
active_peer()65 virtual RawAddress active_peer() { return RawAddress(); }
is_peer_in_silence_mode(const RawAddress & peer_address)66 virtual bool is_peer_in_silence_mode(const RawAddress& peer_address) {
67 return false;
68 }
connect_audio_sink_delayed(uint8_t handle,const RawAddress & peer_address)69 virtual void connect_audio_sink_delayed(uint8_t handle,
70 const RawAddress& peer_address) {
71 return;
72 }
find_audio_sink_service(const RawAddress & peer_address,tA2DP_FIND_CBACK p_cback)73 virtual uint16_t find_audio_sink_service(const RawAddress& peer_address,
74 tA2DP_FIND_CBACK p_cback) override {
75 return 0;
76 }
77 };
78
get_pts_avrcp_test(void)79 bool get_pts_avrcp_test(void) { return false; }
80
81 const stack_config_t interface = {get_pts_avrcp_test,
82 nullptr,
83 nullptr,
84 nullptr,
85 nullptr,
86 nullptr,
87 nullptr,
88 nullptr,
89 nullptr,
90 nullptr,
91 nullptr,
92 nullptr,
93 nullptr,
94 nullptr,
95 nullptr,
96 nullptr,
97 nullptr,
98 nullptr,
99 nullptr,
100 nullptr,
101 nullptr,
102 nullptr};
103
Callback(uint8_t,bool,std::unique_ptr<::bluetooth::PacketBuilder>)104 void Callback(uint8_t, bool, std::unique_ptr<::bluetooth::PacketBuilder>) {}
105
LLVMFuzzerTestOneInput(const uint8_t * Data,size_t Size)106 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* Data, size_t Size) {
107 FakeMediaInterface fmi;
108 FakeVolumeInterface fvi;
109 FakeA2dpInterface fai;
110 FakePlayerSettingsInterface fpsi;
111
112 std::vector<uint8_t> Packet(Data, Data + Size);
113 Device device(
114 RawAddress::kAny, true,
115 base::BindRepeating(
116 [](uint8_t, bool, std::unique_ptr<::bluetooth::PacketBuilder>) {}),
117 0xFFFF, 0xFFFF);
118 device.RegisterInterfaces(&fmi, &fai, &fvi, &fpsi);
119
120 auto browse_request = TestPacketType<BrowsePacket>::Make(Packet);
121 device.BrowseMessageReceived(1, browse_request);
122
123 auto avrcp_request = TestPacketType<avrcp::Packet>::Make(Packet);
124 device.MessageReceived(1, avrcp_request);
125 return 0;
126 }
127 } // namespace avrcp
128 } // namespace bluetooth
129
stack_config_get_interface(void)130 const stack_config_t* stack_config_get_interface(void) {
131 return &bluetooth::avrcp::interface;
132 }
133