diff options
Diffstat (limited to 'hcid')
-rw-r--r-- | hcid/dbus-adapter.c | 8 | ||||
-rw-r--r-- | hcid/dbus.c | 49 | ||||
-rw-r--r-- | hcid/dbus.h | 18 |
3 files changed, 55 insertions, 20 deletions
diff --git a/hcid/dbus-adapter.c b/hcid/dbus-adapter.c index 51eed18a..41cd1037 100644 --- a/hcid/dbus-adapter.c +++ b/hcid/dbus-adapter.c @@ -1126,7 +1126,7 @@ static DBusMessage *handle_dev_get_encryption_key_size_req(DBusMessage *msg, voi return reply; } -static DBusMessage *handle_dev_discover_req(DBusMessage *msg, void *data) +static DBusMessage *handle_dev_discover_devices_req(DBusMessage *msg, void *data) { DBusMessage *reply = NULL; inquiry_cp cp; @@ -1172,7 +1172,7 @@ failed: return reply; } -static DBusMessage *handle_dev_discover_cancel_req(DBusMessage *msg, void *data) +static DBusMessage *handle_dev_cancel_discovery_req(DBusMessage *msg, void *data) { DBusMessage *reply = NULL; struct hci_request rq; @@ -1261,8 +1261,8 @@ static const struct service_data dev_services[] = { { DEV_GET_PIN_CODE_LENGTH, handle_dev_get_pin_code_length_req, DEV_GET_PIN_CODE_LENGTH_SIGNATURE }, { DEV_GET_ENCRYPTION_KEY_SIZE, handle_dev_get_encryption_key_size_req, DEV_GET_ENCRYPTION_KEY_SIZE_SIGNATURE }, - { DEV_DISCOVER, handle_dev_discover_req, DEV_DISCOVER_SIGNATURE }, - { DEV_DISCOVER_CANCEL, handle_dev_discover_cancel_req, DEV_DISCOVER_CANCEL_SIGNATURE }, + { DEV_DISCOVER_DEVICES, handle_dev_discover_devices_req, DEV_DISCOVER_DEVICES_SIGNATURE }, + { DEV_CANCEL_DISCOVERY, handle_dev_cancel_discovery_req, DEV_CANCEL_DISCOVERY_SIGNATURE }, { DEV_DISCOVER_CACHE, handle_dev_discover_cache_req, DEV_DISCOVER_CACHE_SIGNATURE }, { DEV_DISCOVER_SERVICE, handle_dev_discover_service_req, DEV_DISCOVER_SERVICE_SIGNATURE }, diff --git a/hcid/dbus.c b/hcid/dbus.c index 4f30a42c..c0834afb 100644 --- a/hcid/dbus.c +++ b/hcid/dbus.c @@ -45,6 +45,7 @@ #include "hcid.h" #include "dbus.h" +#include "textfile.h" #ifndef DBUS_NAME_FLAG_PROHIBIT_REPLACEMENT #define DBUS_NAME_FLAG_PROHIBIT_REPLACEMENT 0x00 @@ -582,11 +583,14 @@ failed: void hcid_dbus_inquiry_result(bdaddr_t *local, bdaddr_t *peer, uint32_t class, int8_t rssi) { + char filename[PATH_MAX + 1]; DBusMessage *message = NULL; char path[MAX_PATH_LENGTH]; - char *local_addr, *peer_addr; - dbus_uint32_t tmp_class = class; - dbus_int32_t tmp_rssi = rssi; + char *local_addr, *peer_addr, *name = NULL; + const char *service = "none"; + const char *major_class = "none"; + const char *minor_class = "none"; + dbus_int16_t tmp_rssi = rssi; bdaddr_t tmp; int id; @@ -602,7 +606,7 @@ void hcid_dbus_inquiry_result(bdaddr_t *local, bdaddr_t *peer, uint32_t class, i snprintf(path, sizeof(path), "%s/hci%d", ADAPTER_PATH, id); message = dbus_message_new_signal(path, ADAPTER_INTERFACE, - DEV_SIG_DISCOVER_RESULT); + DEV_SIG_REMOTE_DEVICE_FOUND); if (message == NULL) { syslog(LOG_ERR, "Can't allocate D-Bus inquiry result message"); goto failed; @@ -610,8 +614,35 @@ void hcid_dbus_inquiry_result(bdaddr_t *local, bdaddr_t *peer, uint32_t class, i dbus_message_append_args(message, DBUS_TYPE_STRING, &peer_addr, - DBUS_TYPE_UINT32, &tmp_class, - DBUS_TYPE_INT32, &tmp_rssi, + DBUS_TYPE_INT16, &tmp_rssi, + DBUS_TYPE_STRING, &major_class, + DBUS_TYPE_STRING, &minor_class, + DBUS_TYPE_STRING, &service, + DBUS_TYPE_INVALID); + + if (dbus_connection_send(connection, message, NULL) == FALSE) { + syslog(LOG_ERR, "Can't send D-Bus inquiry result message"); + goto failed; + } + + snprintf(filename, PATH_MAX, "%s/%s/names", STORAGEDIR, local_addr); + + name = textfile_get(filename, peer_addr); + + if (!name) + goto failed; + + dbus_message_unref(message); + + message = dbus_message_new_signal(path, ADAPTER_INTERFACE, + DEV_SIG_REMOTE_DEVICE_FOUND); + if (message == NULL) { + syslog(LOG_ERR, "Can't allocate D-Bus inquiry result message"); + goto failed; + } + + dbus_message_append_args(message, + DBUS_TYPE_STRING, &name, DBUS_TYPE_INVALID); if (dbus_connection_send(connection, message, NULL) == FALSE) { @@ -626,6 +657,10 @@ failed: bt_free(local_addr); bt_free(peer_addr); + + if (name) + bt_free(name); + } void hcid_dbus_remote_name(bdaddr_t *local, bdaddr_t *peer, char *name) @@ -648,7 +683,7 @@ void hcid_dbus_remote_name(bdaddr_t *local, bdaddr_t *peer, char *name) snprintf(path, sizeof(path), "%s/hci%d", ADAPTER_PATH, id); message = dbus_message_new_signal(path, ADAPTER_INTERFACE, - DEV_SIG_REMOTE_NAME_CHANGED); + DEV_SIG_REMOTE_NAME_UPDATED); if (message == NULL) { syslog(LOG_ERR, "Can't allocate D-Bus remote name message"); goto failed; diff --git a/hcid/dbus.h b/hcid/dbus.h index 05efeb18..8c20c4a3 100644 --- a/hcid/dbus.h +++ b/hcid/dbus.h @@ -165,8 +165,8 @@ int name_listener_remove(DBusConnection *connection, const char *name, #define DEV_LIST_BONDINGS "ListBondings" #define DEV_GET_PIN_CODE_LENGTH "GetPinCodeLength" #define DEV_GET_ENCRYPTION_KEY_SIZE "GetEncryptionKeySize" -#define DEV_DISCOVER "Discover" -#define DEV_DISCOVER_CANCEL "DiscoverCancel" +#define DEV_DISCOVER_DEVICES "DiscoverdDevices" +#define DEV_CANCEL_DISCOVERY "CancelDiscovery" #define DEV_DISCOVER_CACHE "DiscoverCache" #define DEV_DISCOVER_SERVICE "DiscoverService" @@ -224,24 +224,24 @@ int name_listener_remove(DBusConnection *connection, const char *name, __END_SIG__ #define DEV_GET_ENCRYPTION_KEY_SIZE_SIGNATURE DBUS_TYPE_STRING_AS_STRING \ __END_SIG__ -#define DEV_DISCOVER_SIGNATURE __END_SIG__ -#define DEV_DISCOVER_CANCEL_SIGNATURE __END_SIG__ +#define DEV_DISCOVER_DEVICES_SIGNATURE __END_SIG__ +#define DEV_CANCEL_DISCOVERY_SIGNATURE __END_SIG__ #define DEV_DISCOVER_CACHE_SIGNATURE __END_SIG__ #define DEV_DISCOVER_SERVICE_SIGNATURE DBUS_TYPE_STRING_AS_STRING \ __END_SIG__ -/* Signals sent in the Manager path */ +/* Signals sent in the adapter based path /org/bluez/Adapter/{hci0, hci1, ...} */ #define DEV_SIG_MODE_CHANGED "ModeChanged" #define DEV_SIG_NAME_CHANGED "NameChanged" #define DEV_SIG_MINOR_CLASS_CHANGED "MinorClassChanged" -#define DEV_SIG_REMOTE_NAME_CHANGED "RemoteNameChange" +#define DEV_SIG_REMOTE_NAME_UPDATED "RemoteNameUpdated" #define DEV_SIG_REMOTE_ALIAS_CHANGED "RemoteAliasChanged" #define DEV_SIG_BONDING_CREATED "BondingCreated" #define DEV_SIG_BONDING_FAILED "BondingFailed" #define DEV_SIG_BONDING_REMOVED "BondingRemoved" -#define DEV_SIG_DISCOVER_START "DiscoverStart" -#define DEV_SIG_DISCOVER_COMPLETE "DiscoverComplete" -#define DEV_SIG_DISCOVER_RESULT "DiscoverResult" +#define DEV_SIG_DISCOVER_START "DiscoveryStart" +#define DEV_SIG_DISCOVER_COMPLETE "DiscoveryCompleted" +#define DEV_SIG_REMOTE_DEVICE_FOUND "RemoteDeviceFound" /* * Scanning modes, used by DEV_SET_MODE |