From 3286581f8afecebbdae8a9f9ae96fefda8c611a8 Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Tue, 24 Apr 2007 18:19:24 +0000 Subject: Send signal when requesting remote device name --- hcid/dbus-api.txt | 5 +++++ hcid/dbus-hci.c | 27 +++++++++++++++++++-------- 2 files changed, 24 insertions(+), 8 deletions(-) (limited to 'hcid') diff --git a/hcid/dbus-api.txt b/hcid/dbus-api.txt index 42aad463..bca8a2c8 100644 --- a/hcid/dbus-api.txt +++ b/hcid/dbus-api.txt @@ -1033,6 +1033,11 @@ Signals void ModeChanged(string mode) This signal will be sent every time the service daemon tries to resolve a remote and this fails. + void RemoteNameRequested(string address) + + This signal will be sent every time the service daemon + tries to resolve a remote name during discovery. + void RemoteAliasChanged(string address, string alias) After changing an alias with SetRemoteAlias this diff --git a/hcid/dbus-hci.c b/hcid/dbus-hci.c index ca25dd70..e9a03b22 100644 --- a/hcid/dbus-hci.c +++ b/hcid/dbus-hci.c @@ -1005,7 +1005,7 @@ int found_device_req_name(struct adapter *adapter) /* send at least one request or return failed if the list is empty */ do { - DBusMessage *failed_signal = NULL; + DBusMessage *signal = NULL; struct remote_dev_info *dev = l->data; char *peer_addr; bdaddr_t tmp; @@ -1023,7 +1023,7 @@ int found_device_req_name(struct adapter *adapter) if (hci_send_req(dd, &rq, 500) < 0) { error("Unable to send the HCI remote name request: %s (%d)", strerror(errno), errno); - failed_signal = dev_signal_factory(adapter->dev_id, + signal = dev_signal_factory(adapter->dev_id, "RemoteNameFailed", DBUS_TYPE_STRING, &peer_addr, DBUS_TYPE_INVALID); @@ -1032,21 +1032,32 @@ int found_device_req_name(struct adapter *adapter) if (rp.status) { error("Remote name request failed with status 0x%02x", rp.status); - failed_signal = dev_signal_factory(adapter->dev_id, + signal = dev_signal_factory(adapter->dev_id, "RemoteNameFailed", DBUS_TYPE_STRING, &peer_addr, DBUS_TYPE_INVALID); } + if (!signal) { + req_sent = 1; + /* if we are in discovery, inform application of getting name */ + if (adapter->discov_type & (STD_INQUIRY | PERIODIC_INQUIRY)) { + signal = dev_signal_factory(adapter->dev_id, + "RemoteNameRequested", + DBUS_TYPE_STRING, &peer_addr, + DBUS_TYPE_INVALID); + } + } + free(peer_addr); - if (!failed_signal) { - req_sent = 1; - break; + if (signal) { + send_message_and_unref(connection, signal); + signal = NULL; } - send_message_and_unref(connection, failed_signal); - failed_signal = NULL; + if (req_sent) + break; /* if failed, request the next element */ /* remove the element from the list */ -- cgit