142ec1625SMatthias Ringwald #include <stdint.h>
242ec1625SMatthias Ringwald #include <stddef.h>
342ec1625SMatthias Ringwald #include <stdio.h>
442ec1625SMatthias Ringwald
5*bba538e5SMatthias Ringwald #include "ble/att_db.h"
6*bba538e5SMatthias Ringwald #include "ble/att_db_util.h"
7*bba538e5SMatthias Ringwald #include "bluetooth_gatt.h"
8*bba538e5SMatthias Ringwald
9*bba538e5SMatthias Ringwald static uint8_t battery_level = 100;
10*bba538e5SMatthias Ringwald
att_read_callback(hci_con_handle_t con_handle,uint16_t attribute_handle,uint16_t offset,uint8_t * buffer,uint16_t buffer_size)11*bba538e5SMatthias Ringwald static uint16_t att_read_callback(hci_con_handle_t con_handle, uint16_t attribute_handle, uint16_t offset, uint8_t * buffer, uint16_t buffer_size){
12*bba538e5SMatthias Ringwald return 0;
13*bba538e5SMatthias Ringwald }
14*bba538e5SMatthias Ringwald
att_write_callback(hci_con_handle_t con_handle,uint16_t attribute_handle,uint16_t transaction_mode,uint16_t offset,uint8_t * buffer,uint16_t buffer_size)15*bba538e5SMatthias Ringwald static int att_write_callback(hci_con_handle_t con_handle, uint16_t attribute_handle, uint16_t transaction_mode, uint16_t offset, uint8_t *buffer, uint16_t buffer_size){
16*bba538e5SMatthias Ringwald return 0;
17*bba538e5SMatthias Ringwald }
1842ec1625SMatthias Ringwald
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)1942ec1625SMatthias Ringwald int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
2042ec1625SMatthias Ringwald static int initialized = 0;
2142ec1625SMatthias Ringwald if (initialized == 0){
2242ec1625SMatthias Ringwald initialized = 1;
2342ec1625SMatthias Ringwald // setup empty db
2442ec1625SMatthias Ringwald att_db_util_init();
2542ec1625SMatthias Ringwald // setup att_db
26*bba538e5SMatthias Ringwald att_db_util_add_service_uuid16(ORG_BLUETOOTH_SERVICE_BATTERY_SERVICE);
27*bba538e5SMatthias Ringwald att_db_util_add_characteristic_uuid16(ORG_BLUETOOTH_CHARACTERISTIC_BATTERY_LEVEL, ATT_PROPERTY_READ | ATT_PROPERTY_NOTIFY, ATT_SECURITY_NONE, ATT_SECURITY_NONE, &battery_level, 1);
28*bba538e5SMatthias Ringwald att_set_read_callback(&att_read_callback);
29*bba538e5SMatthias Ringwald att_set_write_callback(&att_write_callback);
30*bba538e5SMatthias Ringwald uint8_t * att_db = att_db_util_get_address();
3142ec1625SMatthias Ringwald att_set_db(att_db);
3242ec1625SMatthias Ringwald }
3342ec1625SMatthias Ringwald
34*bba538e5SMatthias Ringwald // setup att_connection
3542ec1625SMatthias Ringwald att_connection_t att_connection = { 0 };
36*bba538e5SMatthias Ringwald att_connection.max_mtu = 1000;
37*bba538e5SMatthias Ringwald att_connection.mtu = ATT_DEFAULT_MTU;
3842ec1625SMatthias Ringwald uint8_t att_response[1000];
3942ec1625SMatthias Ringwald uint16_t att_request_len = size;
4042ec1625SMatthias Ringwald const uint8_t * att_request = data;
4142ec1625SMatthias Ringwald uint16_t att_respnose_len = att_handle_request(&att_connection, (uint8_t *) att_request, att_request_len, att_response);
4242ec1625SMatthias Ringwald return 0;
4342ec1625SMatthias Ringwald }
44