• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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