From 5b67a8a60a0bc425a5a60b417ced1044c50e0c9c Mon Sep 17 00:00:00 2001 From: Luiz Augusto von Dentz Date: Mon, 27 Oct 2014 13:55:09 +0200 Subject: [PATCH] shared/gatt-db: Add gatt_db_attribute_read --- src/shared/gatt-db.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/shared/gatt-db.c b/src/shared/gatt-db.c index b447199e0..f6ce5f3af 100644 --- a/src/shared/gatt-db.c +++ b/src/shared/gatt-db.c @@ -914,7 +914,28 @@ bool gatt_db_attribute_read(struct gatt_db_attribute *attrib, uint16_t offset, uint8_t opcode, bdaddr_t *bdaddr, gatt_db_attribute_read_t func, void *user_data) { - return false; + uint8_t *value; + + if (!attrib || !func) + return false; + + if (attrib->read_func) { + /* TODO: Pass callback function to read_func */ + attrib->read_func(attrib->handle, offset, opcode, bdaddr, + attrib->user_data); + return true; + } + + /* Check boundary if value is stored in the db */ + if (offset > attrib->value_len) + return false; + + /* Guard against invalid access if offset equals to value length */ + value = offset == attrib->value_len ? NULL : &attrib->value[offset]; + + func(attrib, 0, value, attrib->value_len - offset, user_data); + + return true; } bool gatt_db_attribute_write(struct gatt_db_attribute *attrib, uint16_t offset, -- 2.47.3