Linux bluetooth development
 help / color / mirror / Atom feed
* [PATCH BlueZ v2] src/gatt-client: always check properties in WriteValue
@ 2020-04-27 15:01 David Lechner
  2020-04-27 16:28 ` Luiz Augusto von Dentz
  0 siblings, 1 reply; 6+ messages in thread
From: David Lechner @ 2020-04-27 15:01 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: David Lechner

This modifies the GATT client characteristic WriteValue D-Bus method to
always check that the characteristic supports the requested type of
write by checking for the corresponding property before attempting to
write.

Before this change, if the "type" option was used and it was set to
"reliable" or "request", then BlueZ would attempt the write even if the
characteristic does not support that write type. On the other hand, if
"type" was set to "command" or was not specified, the method would
return a org.bluez.Error.NotSupported error without attempting to write.

After this change, the WriteValue method will consistently return
org.bluez.Error.NotSupported if the corresponding property flag is not
set for all types of writes.
---

v2 changes:
- remove extra check of test variable not NULL
- fix one line over 80 chars

 src/gatt-client.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/gatt-client.c b/src/gatt-client.c
index a9bfc2802..f80742fbb 100644
--- a/src/gatt-client.c
+++ b/src/gatt-client.c
@@ -1016,8 +1016,8 @@ static DBusMessage *characteristic_write_value(DBusConnection *conn,
 	 *     - If value is larger than MTU - 3: long-write
 	 *   * "write-without-response" property set -> write command.
 	 */
-	if ((!type && (chrc->ext_props & BT_GATT_CHRC_EXT_PROP_RELIABLE_WRITE))
-			|| (type && !strcasecmp(type, "reliable"))) {
+	if ((!type || !strcasecmp(type, "reliable")) &&	chrc->ext_props &
+				BT_GATT_CHRC_EXT_PROP_RELIABLE_WRITE) {
 		supported = true;
 		chrc->write_op = start_long_write(msg, chrc->value_handle, gatt,
 						true, value, value_len, offset,
@@ -1026,8 +1026,8 @@ static DBusMessage *characteristic_write_value(DBusConnection *conn,
 			return NULL;
 	}
 
-	if ((!type && chrc->props & BT_GATT_CHRC_PROP_WRITE) ||
-			(type && !strcasecmp(type, "request"))) {
+	if ((!type || !strcasecmp(type, "request")) && chrc->props &
+						BT_GATT_CHRC_PROP_WRITE) {
 		uint16_t mtu;
 
 		supported = true;
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2020-04-28 21:07 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-04-27 15:01 [PATCH BlueZ v2] src/gatt-client: always check properties in WriteValue David Lechner
2020-04-27 16:28 ` Luiz Augusto von Dentz
2020-04-28 14:39   ` David Lechner
2020-04-28 17:03     ` Luiz Augusto von Dentz
2020-04-28 17:19       ` David Lechner
2020-04-28 21:07         ` Luiz Augusto von Dentz

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox