diff options
| -rw-r--r-- | hcid/dbus.c | 6 | ||||
| -rw-r--r-- | hcid/hcid.h | 4 | ||||
| -rw-r--r-- | hcid/security.c | 21 | 
3 files changed, 23 insertions, 8 deletions
| diff --git a/hcid/dbus.c b/hcid/dbus.c index 69a3a6cb..d8a07dd9 100644 --- a/hcid/dbus.c +++ b/hcid/dbus.c @@ -170,7 +170,7 @@ failed:  				OCF_PIN_CODE_NEG_REPLY, 6, &ci->bdaddr);  } -void hcid_dbus_inquiry_result(const bdaddr_t *local, const bdaddr_t *peer) +void hcid_dbus_inquiry_result(const bdaddr_t *local, const bdaddr_t *peer, const uint32_t class, const int8_t rssi)  {  	DBusMessage *message;  #ifndef HAVE_DBUS_MESSAGE_APPEND_ARGS @@ -192,12 +192,16 @@ void hcid_dbus_inquiry_result(const bdaddr_t *local, const bdaddr_t *peer)  	dbus_message_append_args(message,  					DBUS_TYPE_STRING, local_addr,  					DBUS_TYPE_STRING, peer_addr, +					DBUS_TYPE_UINT32, class, +					DBUS_TYPE_INT32, rssi,  					DBUS_TYPE_INVALID);  #else  	dbus_message_append_iter_init(message, &iter);  	dbus_message_iter_append_string(&iter, local_addr);  	dbus_message_iter_append_string(&iter, peer_addr); +	dbus_message_iter_append_uint32(&iter, class); +	dbus_message_iter_append_int32(&iter, rssi);  #endif  	if (dbus_connection_send(connection, message, NULL) == FALSE) { diff --git a/hcid/hcid.h b/hcid/hcid.h index 5e835807..3ba69833 100644 --- a/hcid/hcid.h +++ b/hcid/hcid.h @@ -123,10 +123,10 @@ void toggle_pairing(int enable);  #ifdef ENABLE_DBUS  gboolean hcid_dbus_init(void);  void hcid_dbus_request_pin(int dev, struct hci_conn_info *ci); -void hcid_dbus_inquiry_result(const bdaddr_t *local, const bdaddr_t *peer); +void hcid_dbus_inquiry_result(const bdaddr_t *local, const bdaddr_t *peer, const uint32_t class, const int8_t rssi);  void hcid_dbus_remote_name(const bdaddr_t *local, const bdaddr_t *peer, const char *name);  #else -static inline void hcid_dbus_inquiry_result(const bdaddr_t *local, const bdaddr_t *peer) +static inline void hcid_dbus_inquiry_result(const bdaddr_t *local, const bdaddr_t *peer, uint32_t class, const int8_t rssi)  {  }  static inline void hcid_dbus_remote_name(const bdaddr_t *local, const bdaddr_t *peer, const char *name) diff --git a/hcid/security.c b/hcid/security.c index 148c3237..108887ce 100644 --- a/hcid/security.c +++ b/hcid/security.c @@ -493,13 +493,16 @@ static void remote_version_information(int dev, bdaddr_t *sba, void *ptr)  static void inquiry_result(int dev, bdaddr_t *sba, int plen, void *ptr)  { -	uint8_t num = *(uint8_t *)ptr++; +	uint8_t num = *(uint8_t *) ptr++;  	int i;  	for (i = 0; i < num; i++) {  		inquiry_info *info = ptr; +		uint32_t class = info->dev_class[0] +			| (info->dev_class[1] << 8) +			| (info->dev_class[2] << 16); -		hcid_dbus_inquiry_result(sba, &info->bdaddr); +		hcid_dbus_inquiry_result(sba, &info->bdaddr, class, 0);  		ptr += INQUIRY_INFO_SIZE;  	} @@ -507,7 +510,7 @@ static void inquiry_result(int dev, bdaddr_t *sba, int plen, void *ptr)  static void inquiry_result_with_rssi(int dev, bdaddr_t *sba, int plen, void *ptr)  { -	uint8_t num = *(uint8_t *)ptr++;  +	uint8_t num = *(uint8_t *) ptr++;  	int i;  	if (!num) @@ -516,16 +519,24 @@ static void inquiry_result_with_rssi(int dev, bdaddr_t *sba, int plen, void *ptr  	if ((plen - 1) / num == INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE) {  		for (i = 0; i < num; i++) {  			inquiry_info_with_rssi_and_pscan_mode *info = ptr; +			uint32_t class = info->dev_class[0] +				| (info->dev_class[1] << 8) +				| (info->dev_class[2] << 16); -			hcid_dbus_inquiry_result(sba, &info->bdaddr); +			hcid_dbus_inquiry_result(sba, &info->bdaddr, +							class, info->rssi);  			ptr += INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE;  		}  	} else {  		for (i = 0; i < num; i++) {  			inquiry_info_with_rssi *info = ptr; +			uint32_t class = info->dev_class[0] +				| (info->dev_class[1] << 8) +				| (info->dev_class[2] << 16); -			hcid_dbus_inquiry_result(sba, &info->bdaddr); +			hcid_dbus_inquiry_result(sba, &info->bdaddr, +							class, info->rssi);  			ptr += INQUIRY_INFO_WITH_RSSI_SIZE;  		} | 
