diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2008-08-29 23:51:00 +0200 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2008-08-29 23:51:00 +0200 |
commit | 41708dccb5d831adaf0862da9c1d7fe3c197db3c (patch) | |
tree | ca7b5d1e137becfed48de5609021c337459fdea8 /src/device.c | |
parent | 72994f35faec1a0b8f1f3d2a348f2f70d3611728 (diff) | |
parent | fe8e6804983fd09a3293c5d7ae9a64e03cbc80e0 (diff) |
Merge branch 'for-upstream' of git://gitorious.org/bluez/cktakahasis-clone
Diffstat (limited to 'src/device.c')
-rw-r--r-- | src/device.c | 101 |
1 files changed, 30 insertions, 71 deletions
diff --git a/src/device.c b/src/device.c index 3c75cedf..b41c6ff5 100644 --- a/src/device.c +++ b/src/device.c @@ -41,11 +41,10 @@ #include <dbus/dbus.h> #include <gdbus.h> -#include "hcid.h" - #include "logging.h" #include "textfile.h" +#include "hcid.h" #include "adapter.h" #include "device.h" #include "dbus-common.h" @@ -54,6 +53,7 @@ #include "glib-helper.h" #include "agent.h" #include "sdp-xml.h" +#include "storage.h" #define DEFAULT_XML_BUF_SIZE 1024 #define DISCONNECT_TIMER 2 @@ -136,16 +136,6 @@ static gboolean device_is_paired(struct btd_device *device) return ret; } -static char *device_get_name(struct btd_device *device) -{ - struct adapter *adapter = device->adapter; - char filename[PATH_MAX + 1]; - const gchar *source = adapter_get_address(adapter); - - create_name(filename, PATH_MAX, STORAGEDIR, source, "names"); - return textfile_caseget(filename, device->address); -} - static DBusMessage *get_properties(DBusConnection *conn, DBusMessage *msg, void *user_data) { @@ -155,16 +145,13 @@ static DBusMessage *get_properties(DBusConnection *conn, DBusMessageIter iter; DBusMessageIter dict; bdaddr_t src, dst; - char path[MAX_PATH_LENGTH]; - char buf[64]; - const char *ptr; - char *name, *ppath, **uuids; + char name[248]; + char **uuids; + const char *ptr, *source; dbus_bool_t boolean; uint32_t class; int i; GSList *l; - uint16_t dev_id = adapter_get_dev_id(adapter); - const gchar *source = adapter_get_address(adapter); reply = dbus_message_new_method_return(msg); if (!reply) @@ -182,12 +169,24 @@ static DBusMessage *get_properties(DBusConnection *conn, &device->address); /* Name */ - name = device_get_name(device); - if (name) { + ptr = NULL; + memset(name, 0, sizeof(name)); + source = adapter_get_address(adapter); + + if (read_device_name(source, device->address, name) == 0) { + ptr = name; dbus_message_iter_append_dict_entry(&dict, "Name", - DBUS_TYPE_STRING, &name); + DBUS_TYPE_STRING, &ptr); } + if (read_device_alias(source, device->address, name, sizeof(name)) > 0) + ptr = name; + + /* Alias: use Name if Alias doesn't exist */ + if (ptr) + dbus_message_iter_append_dict_entry(&dict, "Alias", + DBUS_TYPE_STRING, &ptr); + str2ba(source, &src); str2ba(device->address, &dst); @@ -197,17 +196,6 @@ static DBusMessage *get_properties(DBusConnection *conn, DBUS_TYPE_UINT32, &class); } - /* Alias */ - if (get_device_alias(dev_id, &dst, buf, sizeof(buf)) > 0) { - 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 */ boolean = device_is_paired(device); dbus_message_iter_append_dict_entry(&dict, "Paired", @@ -237,60 +225,34 @@ static DBusMessage *get_properties(DBusConnection *conn, g_free(uuids); /* Adapter */ - snprintf(path, sizeof(path), "%s/hci%d", "/org/bluez", dev_id); - ppath = path; + ptr = adapter_get_path(adapter); dbus_message_iter_append_dict_entry(&dict, "Adapter", - DBUS_TYPE_OBJECT_PATH, &ppath); + DBUS_TYPE_OBJECT_PATH, &ptr); dbus_message_iter_close_container(&iter, &dict); return reply; } -static int remove_device_alias(const char *source, const char *destination) -{ - char filename[PATH_MAX + 1]; - - create_name(filename, PATH_MAX, STORAGEDIR, source, "aliases"); - create_file(filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); - - return textfile_del(filename, destination); -} - static DBusMessage *set_alias(DBusConnection *conn, DBusMessage *msg, const char *alias, void *data) { struct btd_device *device = data; struct adapter *adapter = device->adapter; - bdaddr_t bdaddr; - int ecode; - char *str, filename[PATH_MAX + 1]; - uint16_t dev_id = adapter_get_dev_id(adapter); const gchar *source = adapter_get_address(adapter); - - str2ba(device->address, &bdaddr); + int err; /* Remove alias if empty string */ - if (g_str_equal(alias, "")) { - create_name(filename, PATH_MAX, STORAGEDIR, source, - "names"); - str = textfile_caseget(filename, device->address); - ecode = remove_device_alias(source, device->address); - } else { - str = g_strdup(alias); - ecode = set_device_alias(dev_id, &bdaddr, alias); - } - - if (ecode < 0) + err = write_device_alias(source, device->address, + g_str_equal(alias, "") ? NULL : alias); + if (err < 0) return g_dbus_create_error(msg, ERROR_INTERFACE ".Failed", - strerror(-ecode)); + strerror(-err)); dbus_connection_emit_property_changed(conn, dbus_message_get_path(msg), DEVICE_INTERFACE, "Alias", - DBUS_TYPE_STRING, &str); - - g_free(str); + DBUS_TYPE_STRING, &alias); return dbus_message_new_method_return(msg); } @@ -300,12 +262,9 @@ static DBusMessage *set_trust(DBusConnection *conn, DBusMessage *msg, { struct btd_device *device = data; struct adapter *adapter = device->adapter; - bdaddr_t local; const gchar *source = adapter_get_address(adapter); - str2ba(source, &local); - - write_trust(&local, device->address, GLOBAL_TRUST, value); + write_trust(source, device->address, GLOBAL_TRUST, value); dbus_connection_emit_property_changed(conn, dbus_message_get_path(msg), DEVICE_INTERFACE, "Trusted", @@ -350,7 +309,7 @@ static DBusMessage *set_property(DBusConnection *conn, return set_trust(conn, msg, value, data); } else if (g_str_equal("Alias", property)) { - char *alias; + const char *alias; if (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_STRING) return invalid_args(msg); |