summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/adapter.c29
-rw-r--r--src/adapter.h1
-rw-r--r--src/dbus-hci.c14
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)