summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLuiz Augusto von Dentz <luiz.dentz@openbossa.org>2008-03-13 20:40:46 +0000
committerLuiz Augusto von Dentz <luiz.dentz@openbossa.org>2008-03-13 20:40:46 +0000
commit8afa46e246f1598ebfac26725606823cee2dd0ec (patch)
tree04c2e565292598c7877f824136647cc50e80ea0c
parent9c821ad5194bc78888e08ef68ed8344d2b96c241 (diff)
Fix Alias device property to behave according the documentation and UUIDs typo.
-rw-r--r--hcid/device.c47
1 files changed, 39 insertions, 8 deletions
diff --git a/hcid/device.c b/hcid/device.c
index 94e657eb..308b15b1 100644
--- a/hcid/device.c
+++ b/hcid/device.c
@@ -694,6 +694,22 @@ int set_device_alias(uint16_t dev_id, const bdaddr_t *bdaddr, const char *alias)
return textfile_put(filename, addr, alias);
}
+int remove_device_alias(uint16_t dev_id, const bdaddr_t *bdaddr)
+{
+ char filename[PATH_MAX + 1], addr[18];
+
+ ASSERT_DEV_ID;
+
+ ba2str(&devices[dev_id].bdaddr, addr);
+ create_name(filename, PATH_MAX, STORAGEDIR, addr, "aliases");
+
+ create_file(filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
+
+ ba2str(bdaddr, addr);
+
+ return textfile_del(filename, addr);
+}
+
int get_encryption_key_size(uint16_t dev_id, const bdaddr_t *baddr)
{
struct hci_dev *dev;
@@ -744,7 +760,7 @@ static DBusHandlerResult get_properties(DBusConnection *conn,
char filename[PATH_MAX + 1];
char buf[64];
const char *ptr;
- char *str;
+ char *str, *name;
dbus_bool_t boolean;
uint32_t class;
@@ -769,10 +785,9 @@ static DBusHandlerResult get_properties(DBusConnection *conn,
/* Name */
create_name(filename, PATH_MAX, STORAGEDIR, adapter->address, "names");
str = textfile_caseget(filename, device->address);
- if (str) {
+ if (name) {
dbus_message_iter_append_dict_entry(&dict, "Name",
- DBUS_TYPE_STRING, &str);
- free(str);
+ DBUS_TYPE_STRING, &name);
}
str2ba(adapter->address, &src);
@@ -780,7 +795,6 @@ static DBusHandlerResult get_properties(DBusConnection *conn,
/* Class */
if (read_remote_class(&src, &dst, &class) == 0) {
-
dbus_message_iter_append_dict_entry(&dict, "Class",
DBUS_TYPE_UINT32, &class);
}
@@ -790,6 +804,10 @@ static DBusHandlerResult get_properties(DBusConnection *conn,
ptr = buf;
dbus_message_iter_append_dict_entry(&dict, "Alias",
DBUS_TYPE_STRING, &ptr);
+ } else if (name) {
+ dbus_message_iter_append_dict_entry(&dict, "Alias",
+ DBUS_TYPE_STRING, &name);
+ free(name);
}
/* Paired */
@@ -822,7 +840,7 @@ static DBusHandlerResult get_properties(DBusConnection *conn,
DBUS_TYPE_BOOLEAN, &boolean);
/* UUIDs */
- dbus_message_iter_append_dict_entry(&dict, "UUID",
+ dbus_message_iter_append_dict_entry(&dict, "UUIDs",
DBUS_TYPE_ARRAY, device->uuids);
dbus_message_iter_close_container(&iter, &dict);
@@ -838,10 +856,21 @@ static DBusHandlerResult set_alias(DBusConnection *conn, DBusMessage *msg,
DBusMessage *reply;
bdaddr_t bdaddr;
int ecode;
+ char *str, filename[PATH_MAX + 1];
str2ba(device->address, &bdaddr);
- ecode = set_device_alias(adapter->dev_id, &bdaddr, alias);
+ /* Remove alias if empty string */
+ if (g_str_equal(alias, "")) {
+ create_name(filename, PATH_MAX, STORAGEDIR, adapter->address,
+ "names");
+ str = textfile_caseget(filename, device->address);
+ ecode = remove_device_alias(adapter->dev_id, &bdaddr);
+ } else {
+ str = g_strdup(alias);
+ ecode = set_device_alias(adapter->dev_id, &bdaddr, alias);
+ }
+
if (ecode < 0)
return error_failed_errno(conn, msg, -ecode);
@@ -851,7 +880,9 @@ static DBusHandlerResult set_alias(DBusConnection *conn, DBusMessage *msg,
dbus_connection_emit_property_changed(conn, dbus_message_get_path(msg),
DEVICE_INTERFACE, "Alias",
- DBUS_TYPE_STRING, &alias);
+ DBUS_TYPE_STRING, &str);
+
+ free(str);
return send_message_and_unref(conn, reply);
}