diff options
author | Luiz Augusto von Dentz <luiz.dentz@openbossa.org> | 2009-02-12 16:41:23 -0300 |
---|---|---|
committer | Luiz Augusto von Dentz <luiz.dentz@openbossa.org> | 2009-02-12 16:41:23 -0300 |
commit | 81fdab9c7eb725146a6de14b12cbd3fab2903625 (patch) | |
tree | fade6a0eccd52b0c5677ac12516b9604526ad505 /src/adapter.c | |
parent | 13fd71450abf7f4ac2d6b1d6c2c70b81b0796f80 (diff) |
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.
Diffstat (limited to 'src/adapter.c')
-rw-r--r-- | src/adapter.c | 29 |
1 files changed, 24 insertions, 5 deletions
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); } |