diff --git a/example/hid_host_demo.c b/example/hid_host_demo.c index e17224178..ff1abc14f 100644 --- a/example/hid_host_demo.c +++ b/example/hid_host_demo.c @@ -182,12 +182,13 @@ static void handle_sdp_client_query_result(uint8_t packet_type, uint16_t channel des_element = des_iterator_get_element(&attribute_list_it); des_iterator_init(&prot_it, des_element); element = des_iterator_get_element(&prot_it); + if (!element) continue; if (de_get_element_type(element) != DE_UUID) continue; uuid = de_get_uuid32(element); + des_iterator_next(&prot_it); switch (uuid){ case BLUETOOTH_PROTOCOL_L2CAP: if (!des_iterator_has_more(&prot_it)) continue; - des_iterator_next(&prot_it); de_element_get_uint16(des_iterator_get_element(&prot_it), &hid_control_psm); printf("HID Control PSM: 0x%04x\n", (int) hid_control_psm); break; @@ -205,12 +206,13 @@ static void handle_sdp_client_query_result(uint8_t packet_type, uint16_t channel des_element = des_iterator_get_element(&additional_des_it); des_iterator_init(&prot_it, des_element); element = des_iterator_get_element(&prot_it); + if (!element) continue; if (de_get_element_type(element) != DE_UUID) continue; uuid = de_get_uuid32(element); + des_iterator_next(&prot_it); switch (uuid){ case BLUETOOTH_PROTOCOL_L2CAP: if (!des_iterator_has_more(&prot_it)) continue; - des_iterator_next(&prot_it); de_element_get_uint16(des_iterator_get_element(&prot_it), &hid_interrupt_psm); printf("HID Interrupt PSM: 0x%04x\n", (int) hid_interrupt_psm); break; diff --git a/example/panu_demo.c b/example/panu_demo.c index 03e0bac1b..9919ea398 100644 --- a/example/panu_demo.c +++ b/example/panu_demo.c @@ -216,18 +216,18 @@ static void handle_sdp_client_query_result(uint8_t packet_type, uint16_t channel des_iterator_init(&prot_it, des_element); element = des_iterator_get_element(&prot_it); + if (!element) continue; if (de_get_element_type(element) != DE_UUID) continue; uuid = de_get_uuid32(element); + des_iterator_next(&prot_it); switch (uuid){ case BLUETOOTH_PROTOCOL_L2CAP: if (!des_iterator_has_more(&prot_it)) continue; - des_iterator_next(&prot_it); de_element_get_uint16(des_iterator_get_element(&prot_it), &sdp_bnep_l2cap_psm); break; case BLUETOOTH_PROTOCOL_BNEP: if (!des_iterator_has_more(&prot_it)) continue; - des_iterator_next(&prot_it); de_element_get_uint16(des_iterator_get_element(&prot_it), &sdp_bnep_version); break; default: diff --git a/example/sdp_bnep_query.c b/example/sdp_bnep_query.c index d2747f3ad..52ad80771 100644 --- a/example/sdp_bnep_query.c +++ b/example/sdp_bnep_query.c @@ -231,15 +231,14 @@ static void handle_sdp_client_query_result(uint8_t packet_type, uint16_t channel if (de_get_element_type(element) != DE_UUID) continue; uint32_t uuid = de_get_uuid32(element); + des_iterator_next(&prot_it); switch (uuid){ case BLUETOOTH_PROTOCOL_L2CAP: if (!des_iterator_has_more(&prot_it)) continue; - des_iterator_next(&prot_it); de_element_get_uint16(des_iterator_get_element(&prot_it), &l2cap_psm); break; case BLUETOOTH_PROTOCOL_BNEP: if (!des_iterator_has_more(&prot_it)) continue; - des_iterator_next(&prot_it); de_element_get_uint16(des_iterator_get_element(&prot_it), &bnep_version); break; default: diff --git a/src/classic/avdtp.c b/src/classic/avdtp.c index 8a9e00211..6fe7a3fbe 100644 --- a/src/classic/avdtp.c +++ b/src/classic/avdtp.c @@ -428,15 +428,14 @@ static void avdtp_handle_sdp_client_query_result(uint8_t packet_type, uint16_t c if (de_get_element_type(element) != DE_UUID) continue; uuid = de_get_uuid32(element); + des_iterator_next(&prot_it); switch (uuid){ case BLUETOOTH_PROTOCOL_L2CAP: if (!des_iterator_has_more(&prot_it)) continue; - des_iterator_next(&prot_it); de_element_get_uint16(des_iterator_get_element(&prot_it), &sdp_query_context->avdtp_l2cap_psm); break; case BLUETOOTH_PROTOCOL_AVDTP: if (!des_iterator_has_more(&prot_it)) continue; - des_iterator_next(&prot_it); de_element_get_uint16(des_iterator_get_element(&prot_it), &sdp_query_context->avdtp_version); break; default: diff --git a/src/classic/avrcp.c b/src/classic/avrcp.c index 9d7df7211..8dc411030 100644 --- a/src/classic/avrcp.c +++ b/src/classic/avrcp.c @@ -483,15 +483,14 @@ void avrcp_handle_sdp_client_query_result(uint8_t packet_type, uint16_t channel, if (de_get_element_type(element) != DE_UUID) continue; uuid = de_get_uuid32(element); + des_iterator_next(&prot_it); switch (uuid){ case BLUETOOTH_PROTOCOL_L2CAP: if (!des_iterator_has_more(&prot_it)) continue; - des_iterator_next(&prot_it); de_element_get_uint16(des_iterator_get_element(&prot_it), &sdp_query_context->avrcp_l2cap_psm); break; case BLUETOOTH_PROTOCOL_AVCTP: if (!des_iterator_has_more(&prot_it)) continue; - des_iterator_next(&prot_it); de_element_get_uint16(des_iterator_get_element(&prot_it), &sdp_query_context->avrcp_version); break; default: @@ -525,15 +524,14 @@ void avrcp_handle_sdp_client_query_result(uint8_t packet_type, uint16_t channel, if (de_get_element_type(element) != DE_UUID) continue; uuid = de_get_uuid32(element); + des_iterator_next(&prot_it); switch (uuid){ case BLUETOOTH_PROTOCOL_L2CAP: if (!des_iterator_has_more(&prot_it)) continue; - des_iterator_next(&prot_it); de_element_get_uint16(des_iterator_get_element(&prot_it), &connection->browsing_l2cap_psm); break; case BLUETOOTH_PROTOCOL_AVCTP: if (!des_iterator_has_more(&prot_it)) continue; - des_iterator_next(&prot_it); de_element_get_uint16(des_iterator_get_element(&prot_it), &connection->browsing_version); break; default: