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) | 
