Carve out SDP API and callback interface

Bug: 267248792
Test: None
No-Typo-Check: legacy code

Change-Id: I2968f960f46e32472ce002694a2649a8b19cf883
diff --git a/system/stack/include/sdp_api.h b/system/stack/include/sdp_api.h
index 37ae2f7..8cceb04 100644
--- a/system/stack/include/sdp_api.h
+++ b/system/stack/include/sdp_api.h
@@ -15,8 +15,8 @@
  *  limitations under the License.
  *
  ******************************************************************************/
-#ifndef SDP_API_H
-#define SDP_API_H
+
+#pragma once
 
 #include <base/strings/stringprintf.h>
 
@@ -629,7 +629,8 @@
  * Description      Read the service UUID within a record,
  *                  if there is any.
  *
- * Parameters:      p_rec      - pointer to a SDP record.
+ * Parameters:      p_rec  - pointer to a SDP record.
+ *                  p_uuid - pointer to a UUID
  *
  * Returns          true if found, otherwise false.
  *
@@ -637,4 +638,571 @@
 bool SDP_FindServiceUUIDInRec(const tSDP_DISC_REC* p_rec,
                               bluetooth::Uuid* p_uuid);
 
-#endif /* SDP_API_H */
+namespace bluetooth {
+namespace legacy {
+namespace stack {
+namespace sdp {
+
+struct tSdpApi {
+  struct {
+    /*******************************************************************************
+      Function         SDP_InitDiscoveryDb
+
+      Description      This function is called to initialize a discovery
+                       database.
+
+      Parameters:      p_db        - (input) address of an area of memory where
+                                             the discovery database is managed.
+                       len         - (input) size (in bytes) of the memory
+                        NOTE: This must be larger than sizeof(tSDP_DISCOVERY_DB)
+                       num_uuid    - (input) number of UUID filters applied
+                       p_uuid_list - (input) list of UUID filters
+                       num_attr    - (input) number of attribute filters
+                                             applied
+                       p_attr_list - (input) list of attribute filters
+
+      Returns          true if successful, false if one or more parameters are
+                       bad
+     ******************************************************************************/
+    bool (*SDP_InitDiscoveryDb)(tSDP_DISCOVERY_DB*, uint32_t, uint16_t,
+                                const bluetooth::Uuid*, uint16_t,
+                                const uint16_t*);
+
+    /*******************************************************************************
+
+      Function         SDP_CancelServiceSearch
+
+      Description      This function cancels an active query to an SDP server.
+
+      Parameters:      p_db        - (input) address of an area of memory where
+                                             the discovery database is managed.
+
+      Returns          true if discovery cancelled, false if a matching
+                       activity is not found.
+
+     ******************************************************************************/
+    bool (*SDP_CancelServiceSearch)(const tSDP_DISCOVERY_DB*);
+
+    /*******************************************************************************
+
+      Function         SDP_ServiceSearchRequest
+
+      Description      This function queries an SDP server for information.
+
+      Parameters:      p_db        - (input) address of an area of memory where
+                                             the discovery database is managed.
+                       p_cb        - (input) callback executed when complete
+
+      Returns          true if discovery started, false if failed.
+
+     ******************************************************************************/
+    bool (*SDP_ServiceSearchRequest)(const RawAddress&, tSDP_DISCOVERY_DB*,
+                                     tSDP_DISC_CMPL_CB*);
+
+    /*******************************************************************************
+
+      Function         SDP_ServiceSearchAttributeRequest
+
+      Description      This function queries an SDP server for information.
+
+                       The difference between this API function and the
+                       function SDP_ServiceSearchRequest is that this one does
+                       a combined ServiceSearchAttributeRequest SDP function.
+
+      Parameters:      bd_addr     - (input) device address for service search
+                       p_db        - (input) address of an area of memory where
+                                             the discovery database is managed.
+                       p_cb        - (input) callback executed when complete
+
+      Returns          true if discovery started, false if failed.
+
+     ******************************************************************************/
+    bool (*SDP_ServiceSearchAttributeRequest)(const RawAddress&,
+                                              tSDP_DISCOVERY_DB*,
+                                              tSDP_DISC_CMPL_CB*);
+
+    /*******************************************************************************
+
+      Function         SDP_ServiceSearchAttributeRequest2
+
+      Description      This function queries an SDP server for information.
+
+                       The difference between this API function and the
+                       function SDP_ServiceSearchRequest is that this one does
+                       a combined ServiceSearchAttributeRequest SDP function
+                       with the user data piggyback
+
+      parameters:      bd_addr     - (input) device address for service search
+                       p_db        - (input) address of an area of memory where
+                                             the discovery database is managed.
+                       p_cb2       - (input) callback executed when complete
+                       p_data      - (input) user data
+
+      Returns          true if discovery started, false if failed.
+
+     ******************************************************************************/
+    bool (*SDP_ServiceSearchAttributeRequest2)(const RawAddress&,
+                                               tSDP_DISCOVERY_DB*,
+                                               tSDP_DISC_CMPL_CB2*,
+                                               const void*);
+  } service;
+
+  struct {
+    /*******************************************************************************
+
+      Function         SDP_FindServiceInDb
+
+      Description      This function queries an SDP database for a specific
+                       service. If the p_start_rec pointer is NULL, it looks
+                       from the beginning of the database, else it continues
+                       from the next record after p_start_rec.
+
+      parameters:      p_db        - (input) address of an area of memory where
+                                             the discovery database is managed.
+                       uuid16      - (input) Uuid to search in db
+                       disc_rec    - (output) Record found, null otherwise
+
+      Returns          Pointer to record containing service class, or NULL
+
+     ******************************************************************************/
+    tSDP_DISC_REC* (*SDP_FindServiceInDb)(const tSDP_DISCOVERY_DB*, uint16_t,
+                                          tSDP_DISC_REC*);
+
+    /*******************************************************************************
+
+      Function         SDP_FindServiceUUIDInDb
+
+      Description      This function queries an SDP database for a specific
+                       service. If the p_start_rec pointer is NULL, it looks
+                       from the beginning of the database, else it continues
+                       from the next record after p_start_rec.
+
+      NOTE             the only difference between this function and the
+                       previous function "SDP_FindServiceInDb()" is that this
+                       function takes a Uuid input.
+
+      parameters:      p_db        - (input) address of an area of memory where
+                                             the discovery database is managed.
+                       uuid        - (input) Uuid to search in db
+                       disc_rec    - (input) Start record, null from beginning
+
+      Returns          Pointer to record containing service class, or NULL
+
+     ******************************************************************************/
+    tSDP_DISC_REC* (*SDP_FindServiceUUIDInDb)(const tSDP_DISCOVERY_DB*,
+                                              const bluetooth::Uuid&,
+                                              tSDP_DISC_REC*);
+
+    /*******************************************************************************
+
+      Function         SDP_FindServiceInDb_128bit
+
+      Description      Query an SDP database for a specific service.
+                       If the p_start_rec pointer is NULL, look from the
+                       beginning of the database, else continue from the next
+                       record after p_start_rec.
+
+      parameters:      p_db        - (input) address of an area of memory where
+                                             the discovery database is managed.
+                       disc_rec    - (input) Start record, null from beginning
+
+      Returns          Pointer to record containing service class, or NULL
+
+     ******************************************************************************/
+    tSDP_DISC_REC* (*SDP_FindServiceInDb_128bit)(const tSDP_DISCOVERY_DB*,
+                                                 tSDP_DISC_REC*);
+  } db;
+
+  struct {
+    /*******************************************************************************
+
+      Local discovery database API
+
+      Function         SDP_FindAttributeInRec
+
+      Description      This function searches an SDP discovery record for a
+                       specific attribute.
+
+      parameters:      disc_rec    - (input) Start record must not be null
+                       attr_id     - (input) Attribute id to search
+
+      Returns          Pointer to matching attribute entry, or NULL
+
+     ******************************************************************************/
+    tSDP_DISC_ATTR* (*SDP_FindAttributeInRec)(const tSDP_DISC_REC*, uint16_t);
+
+    /*******************************************************************************
+
+      Function         SDP_FindServiceUUIDInRec_128bit
+
+      Description      Read the 128-bit service UUID within a record;
+                       if there is any.
+
+      Parameters:      p_rec      - (input) pointer to a SDP record.
+                       p_uuid     - (output) parameter to save the UUID found.
+
+      Returns          true if found, otherwise false.
+
+     ******************************************************************************/
+    bool (*SDP_FindServiceUUIDInRec_128bit)(const tSDP_DISC_REC*,
+                                            bluetooth::Uuid*);
+
+    /*******************************************************************************
+
+      Function         SDP_FindProtocolListElemInRec
+
+      Description      This function looks at a specific discovery record for a
+                       protocol list element.
+
+      Parameters:      p_rec      - (input) pointer to a SDP record.
+                       p_uuid     - (input) layer UUID.
+                       p_elem     - (output) protocol element
+
+      Returns          true if found, false if not
+                       If found, the passed protocol list element is filled in.
+
+     ******************************************************************************/
+    bool (*SDP_FindProtocolListElemInRec)(const tSDP_DISC_REC*, uint16_t,
+                                          tSDP_PROTOCOL_ELEM*);
+
+    /*******************************************************************************
+
+      Function         SDP_FindProfileVersionInRec
+
+      Description      This function looks at a specific discovery record for
+                       the Profile list descriptor, and pulls out the version
+                       number. The version number consists of an 8-bit major
+                       version and an 8-bit minor version.
+
+      Parameters:      p_rec      - (input) pointer to a SDP record.
+                       p_uuid     - (input) profile UUID.
+                       p_elem     - (output) major and minor version numbers
+
+      Returns          true if found, false if not
+
+     ******************************************************************************/
+    bool (*SDP_FindProfileVersionInRec)(const tSDP_DISC_REC*, uint16_t,
+                                        uint16_t*);
+
+    /*******************************************************************************
+
+      Function         SDP_FindServiceUUIDInRec
+
+      Description      Read the service UUID within a record;
+                       if there is any.
+
+      Parameters:      p_rec      - (input) pointer to a SDP record.
+                       p_uuid     - (output) found UUID or null.
+
+      Returns          true if found, otherwise false.
+
+     ******************************************************************************/
+    bool (*SDP_FindServiceUUIDInRec)(const tSDP_DISC_REC* p_rec,
+                                     bluetooth::Uuid* p_uuid);
+  } record;
+
+  struct {
+    /*******************************************************************************
+
+      API into SDP for Local service database updates
+
+      Function         SDP_CreateRecord
+
+      Description      This function is called to create a record in the
+                       database. This would be through the SDP database
+                       maintenance API. The record is created empty, teh
+                       application should then call "add_attribute" *to add
+                       the record's attributes.
+
+      Returns          Record handle if OK, else 0.
+
+     ******************************************************************************/
+    uint32_t (*SDP_CreateRecord)(void);
+
+    /*******************************************************************************
+
+      Function         SDP_DeleteRecord
+
+      Description      This function is called to add a record (or all records)
+                       from the database. This would be through the SDP
+                       database maintenance API.
+
+      Parameters:      handle     - (input) Handle to delete, 0 for all records
+                                            to be deleted
+
+      Returns          true if succeeded, else false
+
+     ******************************************************************************/
+    bool (*SDP_DeleteRecord)(uint32_t);
+
+    /*******************************************************************************
+
+      Function         SDP_AddAttribute
+
+      Description      This function is called to add an attribute to a record.
+                       This would be through the SDP database maintenance API.
+                       If the attribute already exists in the record, it is
+                       replaced with the new value.
+
+      NOTE             Attribute values must be passed as a Big Endian stream.
+
+      Parameters:      handle     - (input) Handle to add
+                       attr_id    - (input) Attribute id to add
+                       attr_type  - (input) Attribute type to add
+                       attr_len   - (input) Attribute data length
+                       p_val      - (input) Attribute data value
+
+      Returns          true if added OK, else false
+
+     ******************************************************************************/
+    bool (*SDP_AddAttribute)(uint32_t handle, uint16_t attr_id,
+                             uint8_t attr_type, uint32_t attr_len,
+                             uint8_t* p_val);
+
+    /*******************************************************************************
+
+      Function         SDP_AddSequence
+
+      Description      This function is called to add a sequence to a record.
+                       This would be through the SDP database maintenance API.
+                       If the sequence already exists in the record, it is
+                       replaced with the new sequence.
+
+      NOTE             Element values must be passed as a Big Endian stream.
+
+      Parameters:      handle     - (input) Handle to add
+                       attr_id    - (input) Attribute id to add
+                       num_elem   - (input) Number of elements in array
+                       type[]     - (input) Element type
+                       len[]      - (input) Element data length
+                       p_val[]    - (input) Element data value
+
+      Returns          true if added OK, else false
+
+     ******************************************************************************/
+    bool (*SDP_AddSequence)(uint32_t handle, uint16_t attr_id,
+                            uint16_t num_elem, uint8_t type[], uint8_t len[],
+                            uint8_t* p_val[]);
+
+    /*******************************************************************************
+
+      Function         SDP_AddUuidSequence
+
+      Description      This function is called to add a UUID sequence to a
+                       record. This would be through the SDP database
+                       maintenance API. If the sequence already exists in the
+                      record, it is replaced with the new sequence.
+
+      Parameters:      handle     - (input) Handle to add
+                       attr_id    - (input) Attribute id to add
+                       num_uuids  - (input) Number of uuids in array
+                       p_uuids[]  - (input) Array uuid
+
+      Returns          true if added OK, else false
+
+     ******************************************************************************/
+    bool (*SDP_AddUuidSequence)(uint32_t handle, uint16_t attr_id,
+                                uint16_t num_uuids, uint16_t* p_uuids);
+
+    /*******************************************************************************
+
+      Function         SDP_AddProtocolList
+
+      Description      This function is called to add a protocol descriptor
+                       list to a record. This would be through the SDP database
+                       maintenance API. If the protocol list already exists in
+                       the record, it is replaced with the new list.
+
+      Parameters:      handle     - (input) Handle to add
+                       num_elem   - (input) Number of elements to add
+                       elem_list[]- (input) Element data list to add
+
+      Returns          true if added OK, else false
+
+     ******************************************************************************/
+    bool (*SDP_AddProtocolList)(uint32_t handle, uint16_t num_elem,
+                                tSDP_PROTOCOL_ELEM* p_elem_list);
+
+    /*******************************************************************************
+
+      Function         SDP_AddAdditionProtoLists
+
+      Description      This function is called to add a protocol descriptor
+                       list to a record. This would be through the SDP database
+                       maintenance API. If the protocol list already exists in
+                       the record, it is replaced with the new list.
+
+      Parameters:      handle     - (input) Handle to add
+                       num_elem   - (input) Number of elements to add
+                       proto_list[]- (input) Element data list to add
+
+      Returns          true if added OK, else false
+
+     ******************************************************************************/
+    bool (*SDP_AddAdditionProtoLists)(uint32_t handle, uint16_t num_elem,
+                                      tSDP_PROTO_LIST_ELEM* p_proto_list);
+
+    /*******************************************************************************
+
+      Function         SDP_AddProfileDescriptorList
+
+      Description      This function is called to add a profile descriptor list
+                       to a record. This would be through the SDP database
+                       maintenance API. If the version already exists in the
+                       record, it is replaced with the new one.
+
+      Parameters:      handle     - (input) Handle to add
+                       uuid       - (input) Uuid to add
+                       version    - (input) major and minor version
+
+      Returns          true if added OK, else false
+
+     ******************************************************************************/
+    bool (*SDP_AddProfileDescriptorList)(uint32_t handle, uint16_t profile_uuid,
+                                         uint16_t version);
+
+    /*******************************************************************************
+
+      Function         SDP_AddLanguageBaseAttrIDList
+
+      Description      This function is called to add a language base attr list
+                       to a record. This would be through the SDP database
+                       maintenance API. If the version already exists in the
+                       record, it is replaced with the new one.
+
+      Parameters:      handle     - (input) Handle to add
+                       lang       - (input) language base descriptor
+                       char_enc   - (input) character encoding
+                       base_id    - (input) base id
+
+      Returns          true if added OK, else false
+
+     ******************************************************************************/
+    bool (*SDP_AddLanguageBaseAttrIDList)(uint32_t handle, uint16_t lang,
+                                          uint16_t char_enc, uint16_t base_id);
+
+    /*******************************************************************************
+
+      Function         SDP_AddServiceClassIdList
+
+      Description      This function is called to add a service list to a
+                       record. This would be through the SDP database
+                       maintenance API. If the service list already exists in
+                       the record, it is replaced with the new list.
+
+      Parameters:      handle       - (input) Handle to add
+                       num_services - (input) number of services to add
+                       uuids[]      - (input) list of service uuids to add
+
+      Returns          true if added OK, else false
+
+     ******************************************************************************/
+    bool (*SDP_AddServiceClassIdList)(uint32_t handle, uint16_t num_services,
+                                      uint16_t* p_service_uuids);
+
+    /*******************************************************************************
+
+      Function         SDP_DeleteAttribute
+
+      Description      Delete an attribute from a record.
+                       This would be through the SDP database maintenance API.
+
+      Parameters:      handle       - (input) Handle to add
+                       attr_id      - (input) attribute id to delete
+
+      Returns          true if deleted OK, else false if not found
+
+     ******************************************************************************/
+    bool (*SDP_DeleteAttribute)(uint32_t handle, uint16_t attr_id);
+  } handle;
+
+  struct {
+    /*******************************************************************************
+
+      Device Identification API
+
+      Function         SDP_SetLocalDiRecord
+
+      Description      This function adds a DI record to the local SDP
+                       database.
+
+      Parameters:      info         - (input) device identification record
+                       p_handle     - (output) handle of record if successful
+
+      Returns          Returns SDP_SUCCESS if record added successfully, else
+                       error
+
+     ******************************************************************************/
+    uint16_t (*SDP_SetLocalDiRecord)(const tSDP_DI_RECORD* device_info,
+                                     uint32_t* p_handle);
+
+    /*******************************************************************************
+
+      Device Identification API
+
+      Function         SDP_DiDiscover
+
+      Description      This function queries a remote device for DI
+                       information.
+
+      Parameters:      bd_addr      - (input) remote device
+                       p_db         - (input) dicovery database
+                       len          - (input ) data base length
+                       p_cb         - (input) callback when complete
+
+      Returns          SDP_SUCCESS if query started successfully, else error
+
+     ******************************************************************************/
+    tSDP_STATUS (*SDP_DiDiscover)(const RawAddress& remote_device,
+                                  tSDP_DISCOVERY_DB* p_db, uint32_t len,
+                                  tSDP_DISC_CMPL_CB* p_cb);
+
+    /*******************************************************************************
+
+      Device Identification API
+
+      Function         SDP_GetNumDiRecords
+
+      Description      Searches specified database for DI records
+
+      Parameters:      p_db         - (input) dicovery database
+
+      Returns          number of DI records found
+
+     ******************************************************************************/
+    uint8_t (*SDP_GetNumDiRecords)(const tSDP_DISCOVERY_DB* p_db);
+
+    /*******************************************************************************
+
+      Device Identification API
+
+      Function         SDP_GetDiRecord
+
+      Description      This function retrieves a remote device's DI record from
+                       the specified database.
+
+      Parameters:      index        - (input) record index to retrieve
+                       device_info  - (input) dicovery database
+                       p_cb         - (input) callback when complete
+
+      Returns          SDP_SUCCESS if record retrieved, else error
+
+     ******************************************************************************/
+    uint16_t (*SDP_GetDiRecord)(uint8_t getRecordIndex,
+                                tSDP_DI_GET_RECORD* device_info,
+                                const tSDP_DISCOVERY_DB* p_db);
+
+  } device_id;
+};
+
+const struct tSdpApi* get_legacy_stack_sdp_api();
+
+struct tLegacyStackSdbCallback {
+  void(tSDP_DISC_CMPL_CB)(tSDP_RESULT result);
+  void(tSDP_DISC_CMPL_CB2)(tSDP_RESULT result, const void* user_data);
+};
+
+}  // namespace sdp
+}  // namespace stack
+}  // namespace legacy
+}  // namespace bluetooth
diff --git a/system/stack/sdp/sdp_api.cc b/system/stack/sdp/sdp_api.cc
index 3732c54..27c4a8f 100644
--- a/system/stack/sdp/sdp_api.cc
+++ b/system/stack/sdp/sdp_api.cc
@@ -31,6 +31,7 @@
 #include "bt_target.h"
 #include "osi/include/osi.h"  // PTR_TO_UINT
 #include "stack/include/bt_types.h"
+#include "stack/include/sdp_api.h"
 #include "stack/sdp/sdpint.h"
 #include "types/bluetooth/uuid.h"
 #include "types/raw_address.h"
@@ -1049,3 +1050,59 @@
 
   return (sdp_cb.trace_level);
 }
+
+namespace {
+bluetooth::legacy::stack::sdp::tSdpApi api_ = {
+    .service =
+        {
+            .SDP_InitDiscoveryDb = ::SDP_InitDiscoveryDb,
+            .SDP_CancelServiceSearch = ::SDP_CancelServiceSearch,
+            .SDP_ServiceSearchRequest = ::SDP_ServiceSearchRequest,
+            .SDP_ServiceSearchAttributeRequest =
+                ::SDP_ServiceSearchAttributeRequest,
+            .SDP_ServiceSearchAttributeRequest2 =
+                ::SDP_ServiceSearchAttributeRequest2,
+        },
+    .db =
+        {
+            .SDP_FindServiceInDb = ::SDP_FindServiceInDb,
+            .SDP_FindServiceUUIDInDb = ::SDP_FindServiceUUIDInDb,
+            .SDP_FindServiceInDb_128bit = ::SDP_FindServiceInDb_128bit,
+        },
+    .record =
+        {
+            .SDP_FindAttributeInRec = ::SDP_FindAttributeInRec,
+            .SDP_FindServiceUUIDInRec_128bit =
+                ::SDP_FindServiceUUIDInRec_128bit,
+            .SDP_FindProtocolListElemInRec = ::SDP_FindProtocolListElemInRec,
+            .SDP_FindProfileVersionInRec = ::SDP_FindProfileVersionInRec,
+            .SDP_FindServiceUUIDInRec = ::SDP_FindServiceUUIDInRec,
+        },
+    .handle =
+        {
+            .SDP_CreateRecord = ::SDP_CreateRecord,
+            .SDP_DeleteRecord = ::SDP_DeleteRecord,
+            .SDP_AddAttribute = ::SDP_AddAttribute,
+            .SDP_AddSequence = ::SDP_AddSequence,
+            .SDP_AddUuidSequence = ::SDP_AddUuidSequence,
+            .SDP_AddProtocolList = ::SDP_AddProtocolList,
+            .SDP_AddAdditionProtoLists = ::SDP_AddAdditionProtoLists,
+            .SDP_AddProfileDescriptorList = ::SDP_AddProfileDescriptorList,
+            .SDP_AddLanguageBaseAttrIDList = ::SDP_AddLanguageBaseAttrIDList,
+            .SDP_AddServiceClassIdList = ::SDP_AddServiceClassIdList,
+            .SDP_DeleteAttribute = ::SDP_DeleteAttribute,
+        },
+    .device_id =
+        {
+            .SDP_SetLocalDiRecord = ::SDP_SetLocalDiRecord,
+            .SDP_DiDiscover = ::SDP_DiDiscover,
+            .SDP_GetNumDiRecords = ::SDP_GetNumDiRecords,
+            .SDP_GetDiRecord = ::SDP_GetDiRecord,
+        },
+};
+}  // namespace
+
+const bluetooth::legacy::stack::sdp::tSdpApi*
+bluetooth::legacy::stack::sdp::get_legacy_stack_sdp_api() {
+  return &api_;
+}
diff --git a/system/test/mock/mock_stack_sdp_legacy_api.cc b/system/test/mock/mock_stack_sdp_legacy_api.cc
new file mode 100644
index 0000000..f339a26
--- /dev/null
+++ b/system/test/mock/mock_stack_sdp_legacy_api.cc
@@ -0,0 +1,69 @@
+
+
+#include <cstdint>
+
+#include "stack/include/sdp_api.h"
+#include "types/bluetooth/uuid.h"
+
+namespace test {
+namespace mock {
+namespace stack_sdp_legacy {
+
+bluetooth::legacy::stack::sdp::tSdpApi api_ = {
+    .service =
+        {
+            .SDP_InitDiscoveryDb = [](tSDP_DISCOVERY_DB*, uint32_t, uint16_t,
+                                      const bluetooth::Uuid*, uint16_t,
+                                      const uint16_t*) -> bool {
+              return false;
+            },
+            .SDP_CancelServiceSearch = nullptr,
+            .SDP_ServiceSearchRequest = nullptr,
+            .SDP_ServiceSearchAttributeRequest = nullptr,
+            .SDP_ServiceSearchAttributeRequest2 = nullptr,
+        },
+    .db =
+        {
+            .SDP_FindServiceInDb = nullptr,
+            .SDP_FindServiceUUIDInDb = nullptr,
+            .SDP_FindServiceInDb_128bit = nullptr,
+        },
+    .record =
+        {
+            .SDP_FindAttributeInRec = nullptr,
+            .SDP_FindServiceUUIDInRec_128bit = nullptr,
+            .SDP_FindProtocolListElemInRec = nullptr,
+            .SDP_FindProfileVersionInRec = nullptr,
+            .SDP_FindServiceUUIDInRec = nullptr,
+        },
+    .handle =
+        {
+            .SDP_CreateRecord = nullptr,
+            .SDP_DeleteRecord = nullptr,
+            .SDP_AddAttribute = nullptr,
+            .SDP_AddSequence = nullptr,
+            .SDP_AddUuidSequence = nullptr,
+            .SDP_AddProtocolList = nullptr,
+            .SDP_AddAdditionProtoLists = nullptr,
+            .SDP_AddProfileDescriptorList = nullptr,
+            .SDP_AddLanguageBaseAttrIDList = nullptr,
+            .SDP_AddServiceClassIdList = nullptr,
+            .SDP_DeleteAttribute = nullptr,
+        },
+    .device_id =
+        {
+            .SDP_SetLocalDiRecord = nullptr,
+            .SDP_DiDiscover = nullptr,
+            .SDP_GetNumDiRecords = nullptr,
+            .SDP_GetDiRecord = nullptr,
+        },
+};
+
+}  // namespace stack_sdp_legacy
+}  // namespace mock
+}  // namespace test
+
+const struct bluetooth::legacy::stack::sdp::tSdpApi*
+bluetooth::legacy::stack::sdp::get_legacy_stack_sdp_api() {
+  return &test::mock::stack_sdp_legacy::api_;
+}