Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2d36000b authored by Hui Peng's avatar Hui Peng Committed by Automerger Merge Worker
Browse files

Merge "Reland ag/24529645" into tm-dev am: ee7aff61 am: 14ac3560

parents 4d63285d 14ac3560
Loading
Loading
Loading
Loading
+48 −18
Original line number Diff line number Diff line
@@ -22,13 +22,18 @@
 *
 ******************************************************************************/

#ifndef LOG_TAG
#define LOG_TAG "sdp_api"
#endif


#include "stack/include/sdp_api.h"

#include <string.h>

#include <cstdint>

#include "bt_target.h"
#include "osi/include/log.h"
#include "osi/include/osi.h"  // PTR_TO_UINT
#include "stack/include/bt_types.h"
#include "stack/sdp/sdpint.h"
@@ -783,9 +788,17 @@ uint8_t SDP_GetNumDiRecords(const tSDP_DISCOVERY_DB* p_db) {
 *
 ******************************************************************************/
static void SDP_AttrStringCopy(char* dst, const tSDP_DISC_ATTR* p_attr,
                               uint16_t dst_size) {
  if (dst == NULL) return;
                               uint16_t dst_size,
                               uint8_t expected_type) {
  if (dst == NULL)
    return;

  dst[0] = '\0';

  if (p_attr) {
    uint8_t type = SDP_DISC_ATTR_TYPE(p_attr->attr_len_type);

    if (type == expected_type) {
      uint16_t len = SDP_DISC_ATTR_LEN(p_attr->attr_len_type);
      if (len > dst_size - 1) {
        len = dst_size - 1;
@@ -793,7 +806,11 @@ static void SDP_AttrStringCopy(char* dst, const tSDP_DISC_ATTR* p_attr,
      memcpy(dst, (const void*)p_attr->attr_value.v.array, len);
      dst[len] = '\0';
    } else {
    dst[0] = '\0';
      LOG_ERROR("unexpected attr type=%d, expected=%d",
                type, expected_type);
    }
  } else {
    LOG_ERROR("p_attr is NULL");
  }
}

@@ -834,55 +851,68 @@ uint16_t SDP_GetDiRecord(uint8_t get_record_index,
    /* ClientExecutableURL is optional */
    p_curr_attr = SDP_FindAttributeInRec(p_curr_record, ATTR_ID_CLIENT_EXE_URL);
    SDP_AttrStringCopy(p_device_info->rec.client_executable_url, p_curr_attr,
                       SDP_MAX_ATTR_LEN);
                       SDP_MAX_ATTR_LEN, URL_DESC_TYPE);

    /* Service Description is optional */
    /* 5.1.16 ServiceDescription attribute */
    p_curr_attr =
        SDP_FindAttributeInRec(p_curr_record, ATTR_ID_SERVICE_DESCRIPTION);
    SDP_AttrStringCopy(p_device_info->rec.service_description, p_curr_attr,
                       SDP_MAX_ATTR_LEN);
                       SDP_MAX_ATTR_LEN, TEXT_STR_DESC_TYPE);

    /* DocumentationURL is optional */
    p_curr_attr =
        SDP_FindAttributeInRec(p_curr_record, ATTR_ID_DOCUMENTATION_URL);
    SDP_AttrStringCopy(p_device_info->rec.documentation_url, p_curr_attr,
                       SDP_MAX_ATTR_LEN);
                       SDP_MAX_ATTR_LEN, URL_DESC_TYPE);

    p_curr_attr =
        SDP_FindAttributeInRec(p_curr_record, ATTR_ID_SPECIFICATION_ID);
    if (p_curr_attr)
    if (p_curr_attr &&
        SDP_DISC_ATTR_TYPE(p_curr_attr->attr_len_type) == UINT_DESC_TYPE &&
        SDP_DISC_ATTR_LEN(p_curr_attr->attr_len_type) >= 2)
      p_device_info->spec_id = p_curr_attr->attr_value.v.u16;
    else
      result = SDP_ERR_ATTR_NOT_PRESENT;

    p_curr_attr = SDP_FindAttributeInRec(p_curr_record, ATTR_ID_VENDOR_ID);
    if (p_curr_attr)
    if (p_curr_attr &&
        SDP_DISC_ATTR_TYPE(p_curr_attr->attr_len_type) == UINT_DESC_TYPE &&
        SDP_DISC_ATTR_LEN(p_curr_attr->attr_len_type) >= 2)
      p_device_info->rec.vendor = p_curr_attr->attr_value.v.u16;
    else
      result = SDP_ERR_ATTR_NOT_PRESENT;

    p_curr_attr =
        SDP_FindAttributeInRec(p_curr_record, ATTR_ID_VENDOR_ID_SOURCE);
    if (p_curr_attr)
    if (p_curr_attr &&
        SDP_DISC_ATTR_TYPE(p_curr_attr->attr_len_type) == UINT_DESC_TYPE &&
        SDP_DISC_ATTR_LEN(p_curr_attr->attr_len_type) >= 2)
      p_device_info->rec.vendor_id_source = p_curr_attr->attr_value.v.u16;
    else
      result = SDP_ERR_ATTR_NOT_PRESENT;

    p_curr_attr = SDP_FindAttributeInRec(p_curr_record, ATTR_ID_PRODUCT_ID);
    if (p_curr_attr)
    if (p_curr_attr &&
        SDP_DISC_ATTR_TYPE(p_curr_attr->attr_len_type) == UINT_DESC_TYPE &&
        SDP_DISC_ATTR_LEN(p_curr_attr->attr_len_type) >= 2)
      p_device_info->rec.product = p_curr_attr->attr_value.v.u16;
    else
      result = SDP_ERR_ATTR_NOT_PRESENT;

    p_curr_attr =
        SDP_FindAttributeInRec(p_curr_record, ATTR_ID_PRODUCT_VERSION);
    if (p_curr_attr)
    if (p_curr_attr &&
        SDP_DISC_ATTR_TYPE(p_curr_attr->attr_len_type) == UINT_DESC_TYPE &&
        SDP_DISC_ATTR_LEN(p_curr_attr->attr_len_type) >= 2)
      p_device_info->rec.version = p_curr_attr->attr_value.v.u16;
    else
      result = SDP_ERR_ATTR_NOT_PRESENT;

    p_curr_attr = SDP_FindAttributeInRec(p_curr_record, ATTR_ID_PRIMARY_RECORD);
    if (p_curr_attr)
    if (p_curr_attr &&
        SDP_DISC_ATTR_TYPE(p_curr_attr->attr_len_type) == BOOLEAN_DESC_TYPE &&
        SDP_DISC_ATTR_LEN(p_curr_attr->attr_len_type) >= 1)
      p_device_info->rec.primary_record = (bool)p_curr_attr->attr_value.v.u8;
    else
      result = SDP_ERR_ATTR_NOT_PRESENT;
+9 −3
Original line number Diff line number Diff line
@@ -238,7 +238,9 @@ void sdpu_log_attribute_metrics(const RawAddress& bda,
      case UUID_SERVCLASS_AUDIO_SINK: {
        tSDP_DISC_ATTR* p_attr =
            SDP_FindAttributeInRec(p_rec, ATTR_ID_SUPPORTED_FEATURES);
        if (p_attr == nullptr) {
        if (p_attr == nullptr ||
            SDP_DISC_ATTR_TYPE(p_attr->attr_len_type) != UINT_DESC_TYPE ||
            SDP_DISC_ATTR_LEN(p_attr->attr_len_type) < 2) {
          break;
        }
        uint16_t supported_features = p_attr->attr_value.v.u16;
@@ -251,7 +253,9 @@ void sdpu_log_attribute_metrics(const RawAddress& bda,
      case UUID_SERVCLASS_MESSAGE_ACCESS: {
        tSDP_DISC_ATTR* p_attr =
            SDP_FindAttributeInRec(p_rec, ATTR_ID_MAP_SUPPORTED_FEATURES);
        if (p_attr == nullptr) {
        if (p_attr == nullptr ||
            SDP_DISC_ATTR_TYPE(p_attr->attr_len_type) != UINT_DESC_TYPE ||
            SDP_DISC_ATTR_LEN(p_attr->attr_len_type) < 4) {
          break;
        }
        uint32_t map_supported_features = p_attr->attr_value.v.u32;
@@ -264,7 +268,9 @@ void sdpu_log_attribute_metrics(const RawAddress& bda,
      case UUID_SERVCLASS_PBAP_PSE: {
        tSDP_DISC_ATTR* p_attr =
            SDP_FindAttributeInRec(p_rec, ATTR_ID_PBAP_SUPPORTED_FEATURES);
        if (p_attr == nullptr) {
        if (p_attr == nullptr ||
            SDP_DISC_ATTR_TYPE(p_attr->attr_len_type) != UINT_DESC_TYPE ||
            SDP_DISC_ATTR_LEN(p_attr->attr_len_type) < 4) {
          break;
        }
        uint32_t pbap_supported_features = p_attr->attr_value.v.u32;