aboutsummaryrefslogtreecommitdiffstats
path: root/net/bluetooth/hci_request.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/bluetooth/hci_request.c')
-rw-r--r--net/bluetooth/hci_request.c28
1 files changed, 20 insertions, 8 deletions
diff --git a/net/bluetooth/hci_request.c b/net/bluetooth/hci_request.c
index 9566ff8e3223..0ce6cdd278b2 100644
--- a/net/bluetooth/hci_request.c
+++ b/net/bluetooth/hci_request.c
@@ -971,14 +971,14 @@ void __hci_req_enable_advertising(struct hci_request *req)
971 hci_req_add(req, HCI_OP_LE_SET_ADV_ENABLE, sizeof(enable), &enable); 971 hci_req_add(req, HCI_OP_LE_SET_ADV_ENABLE, sizeof(enable), &enable);
972} 972}
973 973
974static u8 create_default_scan_rsp_data(struct hci_dev *hdev, u8 *ptr) 974static u8 append_local_name(struct hci_dev *hdev, u8 *ptr, u8 ad_len)
975{ 975{
976 u8 ad_len = 0;
977 size_t name_len; 976 size_t name_len;
977 int max_len;
978 978
979 max_len = HCI_MAX_AD_LENGTH - ad_len - 2;
979 name_len = strlen(hdev->dev_name); 980 name_len = strlen(hdev->dev_name);
980 if (name_len > 0) { 981 if (name_len > 0 && max_len > 0) {
981 size_t max_len = HCI_MAX_AD_LENGTH - ad_len - 2;
982 982
983 if (name_len > max_len) { 983 if (name_len > max_len) {
984 name_len = max_len; 984 name_len = max_len;
@@ -997,22 +997,34 @@ static u8 create_default_scan_rsp_data(struct hci_dev *hdev, u8 *ptr)
997 return ad_len; 997 return ad_len;
998} 998}
999 999
1000static u8 create_default_scan_rsp_data(struct hci_dev *hdev, u8 *ptr)
1001{
1002 return append_local_name(hdev, ptr, 0);
1003}
1004
1000static u8 create_instance_scan_rsp_data(struct hci_dev *hdev, u8 instance, 1005static u8 create_instance_scan_rsp_data(struct hci_dev *hdev, u8 instance,
1001 u8 *ptr) 1006 u8 *ptr)
1002{ 1007{
1003 struct adv_info *adv_instance; 1008 struct adv_info *adv_instance;
1009 u32 instance_flags;
1010 u8 scan_rsp_len = 0;
1004 1011
1005 adv_instance = hci_find_adv_instance(hdev, instance); 1012 adv_instance = hci_find_adv_instance(hdev, instance);
1006 if (!adv_instance) 1013 if (!adv_instance)
1007 return 0; 1014 return 0;
1008 1015
1009 /* TODO: Set the appropriate entries based on advertising instance flags 1016 instance_flags = adv_instance->flags;
1010 * here once flags other than 0 are supported. 1017
1011 */
1012 memcpy(ptr, adv_instance->scan_rsp_data, 1018 memcpy(ptr, adv_instance->scan_rsp_data,
1013 adv_instance->scan_rsp_len); 1019 adv_instance->scan_rsp_len);
1014 1020
1015 return adv_instance->scan_rsp_len; 1021 scan_rsp_len += adv_instance->scan_rsp_len;
1022 ptr += adv_instance->scan_rsp_len;
1023
1024 if (instance_flags & MGMT_ADV_FLAG_LOCAL_NAME)
1025 scan_rsp_len = append_local_name(hdev, ptr, scan_rsp_len);
1026
1027 return scan_rsp_len;
1016} 1028}
1017 1029
1018void __hci_req_update_scan_rsp_data(struct hci_request *req, u8 instance) 1030void __hci_req_update_scan_rsp_data(struct hci_request *req, u8 instance)