summaryrefslogtreecommitdiffstats
path: root/src/dbus-hci.c
diff options
context:
space:
mode:
authorJohan Hedberg <johan.hedberg@nokia.com>2008-10-28 23:17:56 +0200
committerJohan Hedberg <johan.hedberg@nokia.com>2008-10-28 23:17:56 +0200
commitb12f6eaa5b3f65a5b5f9c98e358f2f6ca912ef97 (patch)
tree6eeae2b466fa238ccfbade25869578152b833cb1 /src/dbus-hci.c
parent6fa921829d4fd308cba21ccc173853e6397f43ac (diff)
Send DeviceFound signals also the first time the name gets resolved
This patch makes sure that we send the DeviceFound with the Name property for newly found pre-2.1 devices when their names gets resolved for the first time.
Diffstat (limited to 'src/dbus-hci.c')
-rw-r--r--src/dbus-hci.c70
1 files changed, 50 insertions, 20 deletions
diff --git a/src/dbus-hci.c b/src/dbus-hci.c
index a043406d..c830f6c2 100644
--- a/src/dbus-hci.c
+++ b/src/dbus-hci.c
@@ -886,6 +886,7 @@ void hcid_dbus_inquiry_result(bdaddr_t *local, bdaddr_t *peer, uint32_t class,
char filename[PATH_MAX + 1];
struct btd_adapter *adapter;
char local_addr[18], peer_addr[18], *alias, *name, *tmp_name;
+ const char *real_alias;
const char *path, *icon, *paddr = peer_addr;
struct remote_dev_info *dev, match;
dbus_int16_t tmp_rssi = rssi;
@@ -942,12 +943,15 @@ void hcid_dbus_inquiry_result(bdaddr_t *local, bdaddr_t *peer, uint32_t class,
name = textfile_get(filename, peer_addr);
if (!alias) {
+ real_alias = NULL;
+
if (!name) {
alias = g_strdup(peer_addr);
g_strdelimit(alias, ":", '-');
} else
alias = g_strdup(name);
- }
+ } else
+ real_alias = alias;
tmp_name = extract_eir_name(data, &name_type);
if (tmp_name) {
@@ -992,10 +996,11 @@ void hcid_dbus_inquiry_result(bdaddr_t *local, bdaddr_t *peer, uint32_t class,
"Alias", DBUS_TYPE_STRING, &alias, NULL);
}
- g_free(alias);
-
/* add in the list to track name sent/pending */
- adapter_add_found_device(adapter, peer, rssi, name_status);
+ adapter_add_found_device(adapter, peer, rssi, class, real_alias,
+ name_status);
+
+ g_free(alias);
}
void hcid_dbus_remote_class(bdaddr_t *local, bdaddr_t *peer, uint32_t class)
@@ -1035,8 +1040,9 @@ void hcid_dbus_remote_name(bdaddr_t *local, bdaddr_t *peer, uint8_t status,
{
struct btd_adapter *adapter;
char srcaddr[18], dstaddr[18];
- const gchar *dev_path;
int state;
+ struct btd_device *device;
+ struct remote_dev_info match, *dev_info;
adapter = manager_find_adapter(local);
if (!adapter) {
@@ -1047,27 +1053,51 @@ void hcid_dbus_remote_name(bdaddr_t *local, bdaddr_t *peer, uint8_t status,
ba2str(local, srcaddr);
ba2str(peer, dstaddr);
- if (!status) {
- struct btd_device *device;
+ if (status != 0)
+ goto proceed;
+
+ bacpy(&match.bdaddr, peer);
+ match.name_status = NAME_ANY;
- device = adapter_find_device(adapter, dstaddr);
- if (device) {
- char alias[248];
+ dev_info = adapter_search_found_devices(adapter, &match);
+ if (dev_info) {
+ const char *adapter_path = adapter_get_path(adapter);
+ const char *icon = class_to_icon(dev_info->class);
+ const char *alias, *paddr = dstaddr;
+ dbus_int16_t rssi = dev_info->rssi;
- dev_path = device_get_path(device);
+ if (dev_info->alias)
+ alias = dev_info->alias;
+ else
+ alias = name;
+ emit_device_found(adapter_path, dstaddr,
+ "Address", DBUS_TYPE_STRING, &paddr,
+ "Class", DBUS_TYPE_UINT32, &dev_info->class,
+ "Icon", DBUS_TYPE_STRING, &icon,
+ "RSSI", DBUS_TYPE_INT16, &rssi,
+ "Name", DBUS_TYPE_STRING, &name,
+ "Alias", DBUS_TYPE_STRING, &alias,
+ NULL);
+ }
+
+ device = adapter_find_device(adapter, dstaddr);
+ if (device) {
+ char alias[248];
+ const char *dev_path = device_get_path(device);
+
+ emit_property_changed(connection, dev_path,
+ DEVICE_INTERFACE, "Name",
+ DBUS_TYPE_STRING, &name);
+
+ if (read_device_alias(srcaddr, dstaddr,
+ alias, sizeof(alias)) < 1)
emit_property_changed(connection, dev_path,
- DEVICE_INTERFACE, "Name",
- DBUS_TYPE_STRING, &name);
-
- if (read_device_alias(srcaddr, dstaddr,
- alias, sizeof(alias)) < 1)
- emit_property_changed(connection, dev_path,
- DEVICE_INTERFACE, "Alias",
- DBUS_TYPE_STRING, &name);
- }
+ DEVICE_INTERFACE, "Alias",
+ DBUS_TYPE_STRING, &name);
}
+proceed:
/* remove from remote name request list */
adapter_remove_found_device(adapter, peer);