From 81fdab9c7eb725146a6de14b12cbd3fab2903625 Mon Sep 17 00:00:00 2001 From: Luiz Augusto von Dentz Date: Thu, 12 Feb 2009 16:41:23 -0300 Subject: Fix not handling properly local name changes. Changing adapter name via dbus was emitting PropertyChanged right away. This not only can cause consistency problems but also makes bluetoothd to not emit a PropertyChanged when a third application such as hciconfig changes the adapter name. --- src/adapter.c | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) (limited to 'src/adapter.c') diff --git a/src/adapter.c b/src/adapter.c index 08993858..4f35766b 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -814,6 +814,28 @@ static void update_ext_inquiry_response(int dd, struct hci_dev *dev) strerror(errno), errno); } +void adapter_name_changed(struct btd_adapter *adapter, const char *name) +{ + struct hci_dev *dev = &adapter->dev; + int dd; + + if (strncmp(name, (char *) dev->name, 248) == 0) + return; + + write_local_name(&adapter->bdaddr, (char *) name); + + strncpy((char *) dev->name, name, 248); + + dd = hci_open_dev(adapter->dev_id); + if (dd >= 0) { + update_ext_inquiry_response(dd, dev); + hci_close_dev(dd); + } + + emit_property_changed(connection, adapter->path, ADAPTER_INTERFACE, + "Name", DBUS_TYPE_STRING, &name); +} + static int adapter_set_name(struct btd_adapter *adapter, const char *name) { struct hci_dev *dev = &adapter->dev; @@ -854,7 +876,6 @@ static DBusMessage *set_name(DBusConnection *conn, DBusMessage *msg, { struct btd_adapter *adapter = data; int ecode; - const char *path; if (!g_utf8_validate(name, -1, NULL)) { error("Name change failed: supplied name isn't valid UTF-8"); @@ -865,10 +886,8 @@ static DBusMessage *set_name(DBusConnection *conn, DBusMessage *msg, if (ecode < 0) return failed_strerror(msg, -ecode); - path = dbus_message_get_path(msg); - - emit_property_changed(conn, path, ADAPTER_INTERFACE, "Name", - DBUS_TYPE_STRING, &name); + emit_property_changed(conn, adapter->path, ADAPTER_INTERFACE, + "Name", DBUS_TYPE_STRING, &name); return dbus_message_new_method_return(msg); } -- cgit