diff options
-rw-r--r-- | src/adapter.c | 29 | ||||
-rw-r--r-- | src/adapter.h | 1 | ||||
-rw-r--r-- | src/dbus-hci.c | 14 |
3 files changed, 33 insertions, 11 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); } diff --git a/src/adapter.h b/src/adapter.h index 6c63b7e0..59b00f70 100644 --- a/src/adapter.h +++ b/src/adapter.h @@ -112,6 +112,7 @@ int adapter_remove_found_device(struct btd_adapter *adapter, bdaddr_t *bdaddr); void adapter_update_oor_devices(struct btd_adapter *adapter); void adapter_remove_oor_device(struct btd_adapter *adapter, char *peer_addr); void adapter_mode_changed(struct btd_adapter *adapter, uint8_t scan_mode); +void adapter_name_changed(struct btd_adapter *adapter, const char *name); struct agent *adapter_get_agent(struct btd_adapter *adapter); void adapter_add_connection(struct btd_adapter *adapter, struct btd_device *device, uint16_t handle); diff --git a/src/dbus-hci.c b/src/dbus-hci.c index ff89043f..6d6696f2 100644 --- a/src/dbus-hci.c +++ b/src/dbus-hci.c @@ -1047,20 +1047,20 @@ int set_major_and_minor_class(int dd, const uint8_t *cls, void hcid_dbus_setname_complete(bdaddr_t *local) { + struct btd_adapter *adapter; int id, dd = -1; read_local_name_rp rp; struct hci_request rq; const char *pname = (char *) rp.name; - char local_addr[18], name[249]; - - ba2str(local, local_addr); + char name[249]; - id = hci_devid(local_addr); - if (id < 0) { - error("No matching device id for %s", local_addr); + adapter = manager_find_adapter(local); + if (!adapter) { + error("No matching adapter found"); return; } + id = adapter_get_dev_id(adapter); dd = hci_open_dev(id); if (dd < 0) { error("HCI device open failed: hci%d", id); @@ -1088,6 +1088,8 @@ void hcid_dbus_setname_complete(bdaddr_t *local) strncpy(name, pname, sizeof(name) - 1); name[248] = '\0'; pname = name; + + adapter_name_changed(adapter, pname); } void hcid_dbus_setscan_enable_complete(bdaddr_t *local) |