[bluez] Fix trust setting in Sixaxis devices

Bastien Nocera hadess at fedoraproject.org
Tue Jul 23 15:28:57 UTC 2013


commit c38c767f28c9fa8558340d1ad536b92d53898841
Author: Bastien Nocera <hadess at hadess.net>
Date:   Tue Jul 23 17:28:04 2013 +0200

    Fix trust setting in Sixaxis devices

 0001-Add-sixaxis-cable-pairing-plugin.patch |  107 +++++++++++++++++++++++----
 bluez.spec                                  |    5 +-
 2 files changed, 96 insertions(+), 16 deletions(-)
---
diff --git a/0001-Add-sixaxis-cable-pairing-plugin.patch b/0001-Add-sixaxis-cable-pairing-plugin.patch
index b20c9c8..88c8b53 100644
--- a/0001-Add-sixaxis-cable-pairing-plugin.patch
+++ b/0001-Add-sixaxis-cable-pairing-plugin.patch
@@ -1,4 +1,4 @@
-From 64f9449656dbbb718d53a54ed8e7904e289280ec Mon Sep 17 00:00:00 2001
+From 03827726cebf7d8b5bc5a4e7859ea92a7e62044f Mon Sep 17 00:00:00 2001
 From: Bastien Nocera <hadess at hadess.net>
 Date: Fri, 30 Dec 2011 12:34:29 +0100
 Subject: [PATCH] Add sixaxis cable-pairing plugin
@@ -9,17 +9,19 @@ When a Sixaxis device is plugged in, events are filtered, and
 the device is selected, poked around to set the default Bluetooth
 address, and added to the database of the current default adapter.
 ---
- Makefile.am     |    9 +-
- acinclude.m4    |   16 +++
- configure.ac    |    1 +
- plugins/cable.c |  382 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
- src/adapter.c   |   19 +++
- src/adapter.h   |    3 +
- 6 files changed, 428 insertions(+), 2 deletions(-)
+ Makefile.am     |   9 +-
+ acinclude.m4    |  16 +++
+ configure.ac    |   1 +
+ plugins/cable.c | 382 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/adapter.c   |  19 +++
+ src/adapter.h   |   3 +
+ src/device.c    |  37 ++++--
+ src/device.h    |   2 +
+ 8 files changed, 456 insertions(+), 13 deletions(-)
  create mode 100644 plugins/cable.c
 
 diff --git a/Makefile.am b/Makefile.am
-index 53fcbe9..f831a72 100644
+index 1c214c6..c70ff24 100644
 --- a/Makefile.am
 +++ b/Makefile.am
 @@ -238,6 +238,11 @@ builtin_sources += thermometer/main.c \
@@ -53,7 +55,7 @@ index 53fcbe9..f831a72 100644
  INCLUDES = -I$(builddir)/lib -I$(builddir)/src -I$(srcdir)/src \
  			-I$(srcdir)/audio -I$(srcdir)/sbc -I$(srcdir)/gdbus \
 diff --git a/acinclude.m4 b/acinclude.m4
-index 6505ad3..3f59989 100644
+index 1d6d736..ae58bbd 100644
 --- a/acinclude.m4
 +++ b/acinclude.m4
 @@ -139,6 +139,12 @@ AC_DEFUN([AC_PATH_UDEV], [
@@ -106,7 +108,7 @@ index 6505ad3..3f59989 100644
 +	AM_CONDITIONAL(CABLE, test "${cable_enable}" = "yes" && test "${cable_found}" = "yes")
  ])
 diff --git a/configure.ac b/configure.ac
-index 48b181e..45a4b15 100644
+index f2db920..8e7ad79 100644
 --- a/configure.ac
 +++ b/configure.ac
 @@ -46,6 +46,7 @@ AC_PATH_GSTREAMER
@@ -119,7 +121,7 @@ index 48b181e..45a4b15 100644
  AC_PATH_CHECK
 diff --git a/plugins/cable.c b/plugins/cable.c
 new file mode 100644
-index 0000000..fe758db
+index 0000000..89333c4
 --- /dev/null
 +++ b/plugins/cable.c
 @@ -0,0 +1,382 @@
@@ -212,7 +214,7 @@ index 0000000..fe758db
 +	store_device_id(srcaddr, address, 0xffff, vendor_id, product_id, 0);
 +	/* Don't write a profile, it will be updated when the device connects */
 +
-+	write_trust(srcaddr, address, "[all]", TRUE);
++	device_set_trust (conn, device, TRUE);
 +
 +	return device;
 +}
@@ -506,7 +508,7 @@ index 0000000..fe758db
 +BLUETOOTH_PLUGIN_DEFINE(cable, VERSION,
 +			BLUETOOTH_PLUGIN_PRIORITY_DEFAULT, cable_init, cable_exit)
 diff --git a/src/adapter.c b/src/adapter.c
-index 6e04faf..0488891 100644
+index f922876..b688642 100644
 --- a/src/adapter.c
 +++ b/src/adapter.c
 @@ -952,6 +952,25 @@ static struct btd_device *adapter_create_device(DBusConnection *conn,
@@ -549,6 +551,81 @@ index b7ea62b..ac0aa2e 100644
  void adapter_mode_changed(struct btd_adapter *adapter, uint8_t scan_mode);
  int adapter_set_name(struct btd_adapter *adapter, const char *name);
  void adapter_name_changed(struct btd_adapter *adapter, const char *name);
+diff --git a/src/device.c b/src/device.c
+index c210bcb..056b450 100644
+--- a/src/device.c
++++ b/src/device.c
+@@ -471,31 +471,46 @@ static DBusMessage *set_alias(DBusConnection *conn, DBusMessage *msg,
+ 	return dbus_message_new_method_return(msg);
+ }
+ 
+-static DBusMessage *set_trust(DBusConnection *conn, DBusMessage *msg,
+-					gboolean value, void *data)
++int device_set_trust (DBusConnection *conn, struct btd_device *device,
++						gboolean trusted)
+ {
+-	struct btd_device *device = data;
+ 	struct btd_adapter *adapter = device->adapter;
+ 	char srcaddr[18], dstaddr[18];
+ 	bdaddr_t src;
+ 	int err;
+ 
+-	if (device->trusted == value)
+-		return dbus_message_new_method_return(msg);
+-
+ 	adapter_get_address(adapter, &src);
+ 	ba2str(&src, srcaddr);
+ 	ba2str(&device->bdaddr, dstaddr);
+ 
+-	err = write_trust(srcaddr, dstaddr, GLOBAL_TRUST, value);
++	err = write_trust(srcaddr, dstaddr, GLOBAL_TRUST, trusted);
+ 	if (err < 0)
+-		return btd_error_failed(msg, strerror(-err));
++		return err;
+ 
+-	device->trusted = value;
++	device->trusted = trusted;
+ 
+-	emit_property_changed(conn, dbus_message_get_path(msg),
++	emit_property_changed(conn, device->path,
+ 				DEVICE_INTERFACE, "Trusted",
+-				DBUS_TYPE_BOOLEAN, &value);
++				DBUS_TYPE_BOOLEAN, &trusted);
++
++	return 0;
++}
++
++static DBusMessage *set_trust(DBusConnection *conn, DBusMessage *msg,
++					gboolean value, void *data)
++{
++	struct btd_device *device = data;
++	struct btd_adapter *adapter = device->adapter;
++	char srcaddr[18], dstaddr[18];
++	bdaddr_t src;
++	int err;
++
++	if (device->trusted == value)
++		return dbus_message_new_method_return(msg);
++
++	err = device_set_trust (conn, device, value);
++	if (err < 0)
++		return btd_error_failed(msg, strerror(-err));
+ 
+ 	return dbus_message_new_method_return(msg);
+ }
+diff --git a/src/device.h b/src/device.h
+index 26e17f7..0d5e5ce 100644
+--- a/src/device.h
++++ b/src/device.h
+@@ -119,6 +119,8 @@ void btd_unregister_device_driver(struct btd_device_driver *driver);
+ struct btd_device *btd_device_ref(struct btd_device *device);
+ void btd_device_unref(struct btd_device *device);
+ 
++int device_set_trust(DBusConnection *conn, struct btd_device *device,
++						gboolean trusted);
+ int device_block(DBusConnection *conn, struct btd_device *device,
+ 						gboolean update_only);
+ int device_unblock(DBusConnection *conn, struct btd_device *device,
 -- 
-1.7.10.2
+1.8.3.1
 
diff --git a/bluez.spec b/bluez.spec
index 982ea23..76f4353 100644
--- a/bluez.spec
+++ b/bluez.spec
@@ -1,7 +1,7 @@
 Summary: Bluetooth utilities
 Name: bluez
 Version: 4.101
-Release: 8%{?dist}
+Release: 9%{?dist}
 License: GPLv2+
 Group: Applications/System
 URL: http://www.bluez.org/
@@ -337,6 +337,9 @@ fi
 %exclude /usr/lib/udev/rules.d/97-bluetooth-hid2hci.rules
 
 %changelog
+* Tue Jul 23 2013 Bastien Nocera <bnocera at redhat.com> 4.101-9
+- Fix trust setting in Sixaxis devices
+
 * Wed Jun 26 2013 Bastien Nocera <bnocera at redhat.com> 4.101-8
 - Another pass at fixing A2DP support (#964031)
 


More information about the scm-commits mailing list