diff --git a/profiles/gap/gas.c b/profiles/gap/gas.c
index 400818d..713b9aa 100644
--- a/profiles/gap/gas.c
+++ b/profiles/gap/gas.c
struct gatt_db_attribute *attr;
};
-static void gas_free(struct gas *gas)
+static void gas_reset(struct gas *gas)
{
+ gas->attr = NULL;
gatt_db_unref(gas->db);
+ gas->db = NULL;
bt_gatt_client_unref(gas->client);
+ gas->client = NULL;
+}
+
+static void gas_free(struct gas *gas)
+{
+ gas_reset(gas);
btd_device_unref(gas->device);
g_free(gas);
}
DBG("Failed to send request to read appearance");
}
-static bool uuid_cmp(uint16_t u16, const bt_uuid_t *uuid)
+static inline bool uuid_cmp(uint16_t u16, const bt_uuid_t *uuid)
{
bt_uuid_t lhs;
}
}
-static void handle_gap_service(struct gas *gas)
-{
- gatt_db_service_foreach_char(gas->attr, handle_characteristic, gas);
-}
-
static int gap_probe(struct btd_service *service)
{
struct btd_device *device = btd_service_get_device(service);
}
gas->attr = attr;
- handle_gap_service(gas);
-}
-
-static void gas_reset(struct gas *gas)
-{
- gas->attr = NULL;
- gatt_db_unref(gas->db);
- gas->db = NULL;
- bt_gatt_client_unref(gas->client);
- gas->client = NULL;
+ gatt_db_service_foreach_char(gas->attr, handle_characteristic, gas);
}
static int gap_accept(struct btd_service *service)
struct gas *gas = btd_service_get_user_data(service);
char addr[18];
bt_uuid_t gap_uuid;
+ int err = 0;
ba2str(device_get_address(device), addr);
DBG("GAP profile accept (%s)", addr);
if (!gas) {
error("GAP service not handled by profile");
- return -1;
+ err = -1;
+ goto _finish;
}
gas->db = gatt_db_ref(db);
if (!gas->attr) {
error("GAP attribute not found");
gas_reset(gas);
- return -1;
+ err = -1;
}
- btd_service_connecting_complete(service, 0);
+_finish:
- return 0;
+ btd_service_connecting_complete(service, err);
+
+ return err;
}
static int gap_disconnect(struct btd_service *service)