diff options
| -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  | 
