summaryrefslogtreecommitdiffstats
path: root/src/adapter.c
diff options
context:
space:
mode:
authorLuiz Augusto von Dentz <luiz.dentz@openbossa.org>2009-02-12 16:41:23 -0300
committerLuiz Augusto von Dentz <luiz.dentz@openbossa.org>2009-02-12 16:41:23 -0300
commit81fdab9c7eb725146a6de14b12cbd3fab2903625 (patch)
treefade6a0eccd52b0c5677ac12516b9604526ad505 /src/adapter.c
parent13fd71450abf7f4ac2d6b1d6c2c70b81b0796f80 (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.c29
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);
}