1/****************************************************************************** 2 * 3 * Copyright (C) 1999-2012 Broadcom Corporation 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at: 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 * 17 ******************************************************************************/ 18#ifndef SDP_API_H 19#define SDP_API_H 20 21#include "bt_target.h" 22#include "sdpdefs.h" 23 24/***************************************************************************** 25** Constants 26*****************************************************************************/ 27 28/* Success code and error codes */ 29#define SDP_SUCCESS 0x0000 30#define SDP_INVALID_VERSION 0x0001 31#define SDP_INVALID_SERV_REC_HDL 0x0002 32#define SDP_INVALID_REQ_SYNTAX 0x0003 33#define SDP_INVALID_PDU_SIZE 0x0004 34#define SDP_INVALID_CONT_STATE 0x0005 35#define SDP_NO_RESOURCES 0x0006 36#define SDP_DI_REG_FAILED 0x0007 37#define SDP_DI_DISC_FAILED 0x0008 38#define SDP_NO_DI_RECORD_FOUND 0x0009 39#define SDP_ERR_ATTR_NOT_PRESENT 0x000A 40#define SDP_ILLEGAL_PARAMETER 0x000B 41 42#define SDP_NO_RECS_MATCH 0xFFF0 43#define SDP_CONN_FAILED 0xFFF1 44#define SDP_CFG_FAILED 0xFFF2 45#define SDP_GENERIC_ERROR 0xFFF3 46#define SDP_DB_FULL 0xFFF4 47#define SDP_INVALID_PDU 0xFFF5 48#define SDP_SECURITY_ERR 0xFFF6 49#define SDP_CONN_REJECTED 0xFFF7 50#define SDP_CANCEL 0xFFF8 51 52/* Define the PSM that SDP uses */ 53#define SDP_PSM 0x0001 54 55/* Legacy #define to avoid code changes - SDP UUID is same as BT UUID */ 56#define tSDP_UUID tBT_UUID 57 58/* Masks for attr_value field of tSDP_DISC_ATTR */ 59#define SDP_DISC_ATTR_LEN_MASK 0x0FFF 60#define SDP_DISC_ATTR_TYPE(len_type) (len_type >> 12) 61#define SDP_DISC_ATTR_LEN(len_type) (len_type & SDP_DISC_ATTR_LEN_MASK) 62 63/* Maximum number of protocol list items (list_elem in tSDP_PROTOCOL_ELEM) */ 64#define SDP_MAX_LIST_ELEMS 3 65 66 67/***************************************************************************** 68** Type Definitions 69*****************************************************************************/ 70 71/* Define a callback function for when discovery is complete. */ 72typedef void (tSDP_DISC_CMPL_CB) (UINT16 result); 73typedef void (tSDP_DISC_CMPL_CB2) (UINT16 result, void* user_data); 74 75typedef struct 76{ 77 BD_ADDR peer_addr; 78 UINT16 peer_mtu; 79} tSDP_DR_OPEN; 80 81typedef struct 82{ 83 UINT8 *p_data; 84 UINT16 data_len; 85} tSDP_DR_DATA; 86 87typedef union 88{ 89 tSDP_DR_OPEN open; 90 tSDP_DR_DATA data; 91} tSDP_DATA; 92 93/* Define a callback function for when discovery result is received. */ 94typedef void (tSDP_DISC_RES_CB) (UINT16 event, tSDP_DATA *p_data); 95 96/* Define a structure to hold the discovered service information. */ 97typedef struct 98{ 99 union 100 { 101 UINT8 u8; /* 8-bit integer */ 102 UINT16 u16; /* 16-bit integer */ 103 UINT32 u32; /* 32-bit integer */ 104 UINT8 array[4]; /* Variable length field */ 105 struct t_sdp_disc_attr *p_sub_attr; /* Addr of first sub-attr (list)*/ 106 } v; 107 108} tSDP_DISC_ATVAL; 109 110typedef struct t_sdp_disc_attr 111{ 112 struct t_sdp_disc_attr *p_next_attr; /* Addr of next linked attr */ 113 UINT16 attr_id; /* Attribute ID */ 114 UINT16 attr_len_type; /* Length and type fields */ 115 tSDP_DISC_ATVAL attr_value; /* Variable length entry data */ 116} tSDP_DISC_ATTR; 117 118typedef struct t_sdp_disc_rec 119{ 120 tSDP_DISC_ATTR *p_first_attr; /* First attribute of record */ 121 struct t_sdp_disc_rec *p_next_rec; /* Addr of next linked record */ 122 UINT32 time_read; /* The time the record was read */ 123 BD_ADDR remote_bd_addr; /* Remote BD address */ 124} tSDP_DISC_REC; 125 126typedef struct 127{ 128 UINT32 mem_size; /* Memory size of the DB */ 129 UINT32 mem_free; /* Memory still available */ 130 tSDP_DISC_REC *p_first_rec; /* Addr of first record in DB */ 131 UINT16 num_uuid_filters; /* Number of UUIds to filter */ 132 tSDP_UUID uuid_filters[SDP_MAX_UUID_FILTERS]; /* UUIDs to filter */ 133 UINT16 num_attr_filters; /* Number of attribute filters */ 134 UINT16 attr_filters[SDP_MAX_ATTR_FILTERS]; /* Attributes to filter */ 135 UINT8 *p_free_mem; /* Pointer to free memory */ 136#if (SDP_RAW_DATA_INCLUDED == TRUE) 137 UINT8 *raw_data; /* Received record from server. allocated/released by client */ 138 UINT32 raw_size; /* size of raw_data */ 139 UINT32 raw_used; /* length of raw_data used */ 140#endif 141}tSDP_DISCOVERY_DB; 142 143/* This structure is used to add protocol lists and find protocol elements */ 144typedef struct 145{ 146 UINT16 protocol_uuid; 147 UINT16 num_params; 148 UINT16 params[SDP_MAX_PROTOCOL_PARAMS]; 149} tSDP_PROTOCOL_ELEM; 150 151typedef struct 152{ 153 UINT16 num_elems; 154 tSDP_PROTOCOL_ELEM list_elem[SDP_MAX_LIST_ELEMS]; 155} tSDP_PROTO_LIST_ELEM; 156 157/* Device Identification (DI) data structure 158*/ 159/* Used to set the DI record */ 160typedef struct t_sdp_di_record 161{ 162 UINT16 vendor; 163 UINT16 vendor_id_source; 164 UINT16 product; 165 UINT16 version; 166 BOOLEAN primary_record; 167 char client_executable_url[SDP_MAX_ATTR_LEN]; /* optional */ 168 char service_description[SDP_MAX_ATTR_LEN]; /* optional */ 169 char documentation_url[SDP_MAX_ATTR_LEN]; /* optional */ 170}tSDP_DI_RECORD; 171 172/* Used to get the DI record */ 173typedef struct t_sdp_di_get_record 174{ 175 UINT16 spec_id; 176 tSDP_DI_RECORD rec; 177}tSDP_DI_GET_RECORD; 178 179 180/***************************************************************************** 181** External Function Declarations 182*****************************************************************************/ 183#ifdef __cplusplus 184extern "C" 185{ 186#endif 187 188/* API into the SDP layer for service discovery. */ 189 190/******************************************************************************* 191** 192** Function SDP_InitDiscoveryDb 193** 194** Description This function is called to initialize a discovery database. 195** 196** Returns TRUE if successful, FALSE if one or more parameters are bad 197** 198*******************************************************************************/ 199extern BOOLEAN SDP_InitDiscoveryDb (tSDP_DISCOVERY_DB *p_db, UINT32 len, 200 UINT16 num_uuid, 201 tSDP_UUID *p_uuid_list, 202 UINT16 num_attr, 203 UINT16 *p_attr_list); 204 205/******************************************************************************* 206** 207** Function SDP_CancelServiceSearch 208** 209** Description This function cancels an active query to an SDP server. 210** 211** Returns TRUE if discovery cancelled, FALSE if a matching activity is not found. 212** 213*******************************************************************************/ 214extern BOOLEAN SDP_CancelServiceSearch (tSDP_DISCOVERY_DB *p_db); 215 216/******************************************************************************* 217** 218** Function SDP_ServiceSearchRequest 219** 220** Description This function queries an SDP server for information. 221** 222** Returns TRUE if discovery started, FALSE if failed. 223** 224*******************************************************************************/ 225extern BOOLEAN SDP_ServiceSearchRequest (UINT8 *p_bd_addr, 226 tSDP_DISCOVERY_DB *p_db, 227 tSDP_DISC_CMPL_CB *p_cb); 228 229 230/******************************************************************************* 231** 232** Function SDP_ServiceSearchAttributeRequest 233** 234** Description This function queries an SDP server for information. 235** 236** The difference between this API function and the function 237** SDP_ServiceSearchRequest is that this one does a 238** combined ServiceSearchAttributeRequest SDP function. 239** 240** Returns TRUE if discovery started, FALSE if failed. 241** 242*******************************************************************************/ 243extern BOOLEAN SDP_ServiceSearchAttributeRequest (UINT8 *p_bd_addr, 244 tSDP_DISCOVERY_DB *p_db, 245 tSDP_DISC_CMPL_CB *p_cb); 246 247/******************************************************************************* 248** 249** Function SDP_ServiceSearchAttributeRequest2 250** 251** Description This function queries an SDP server for information. 252** 253** The difference between this API function and the function 254** SDP_ServiceSearchRequest is that this one does a 255** combined ServiceSearchAttributeRequest SDP function with the 256** user data piggyback 257** 258** Returns TRUE if discovery started, FALSE if failed. 259** 260*******************************************************************************/ 261extern BOOLEAN SDP_ServiceSearchAttributeRequest2 (UINT8 *p_bd_addr, 262 tSDP_DISCOVERY_DB *p_db, 263 tSDP_DISC_CMPL_CB2 *p_cb, void * user_data); 264 265/* API of utilities to find data in the local discovery database */ 266 267/******************************************************************************* 268** 269** Function SDP_FindAttributeInDb 270** 271** Description This function queries an SDP database for a specific attribute. 272** If the p_start_rec pointer is NULL, it looks from the beginning 273** of the database, else it continues from the next record after 274** p_start_rec. 275** 276** Returns Pointer to matching record, or NULL 277** 278*******************************************************************************/ 279extern tSDP_DISC_REC *SDP_FindAttributeInDb (tSDP_DISCOVERY_DB *p_db, 280 UINT16 attr_id, 281 tSDP_DISC_REC *p_start_rec); 282 283 284/******************************************************************************* 285** 286** Function SDP_FindAttributeInRec 287** 288** Description This function searches an SDP discovery record for a 289** specific attribute. 290** 291** Returns Pointer to matching attribute entry, or NULL 292** 293*******************************************************************************/ 294extern tSDP_DISC_ATTR *SDP_FindAttributeInRec (tSDP_DISC_REC *p_rec, 295 UINT16 attr_id); 296 297 298/******************************************************************************* 299** 300** Function SDP_FindServiceInDb 301** 302** Description This function queries an SDP database for a specific service. 303** If the p_start_rec pointer is NULL, it looks from the beginning 304** of the database, else it continues from the next record after 305** p_start_rec. 306** 307** Returns Pointer to record containing service class, or NULL 308** 309*******************************************************************************/ 310extern tSDP_DISC_REC *SDP_FindServiceInDb (tSDP_DISCOVERY_DB *p_db, 311 UINT16 service_uuid, 312 tSDP_DISC_REC *p_start_rec); 313 314 315/******************************************************************************* 316** 317** Function SDP_FindServiceUUIDInDb 318** 319** Description This function queries an SDP database for a specific service. 320** If the p_start_rec pointer is NULL, it looks from the beginning 321** of the database, else it continues from the next record after 322** p_start_rec. 323** 324** NOTE the only difference between this function and the previous 325** function "SDP_FindServiceInDb()" is that this function takes 326** a tBT_UUID input. 327** 328** Returns Pointer to record containing service class, or NULL 329** 330*******************************************************************************/ 331extern tSDP_DISC_REC *SDP_FindServiceUUIDInDb (tSDP_DISCOVERY_DB *p_db, 332 tBT_UUID *p_uuid, 333 tSDP_DISC_REC *p_start_rec); 334 335/******************************************************************************* 336** 337** Function SDP_FindServiceUUIDInRec_128bit 338** 339** Description This function is called to read the 128-bit service UUID within a record 340** if there is any. 341** 342** Parameters: p_rec - pointer to a SDP record. 343** p_uuid - output parameter to save the UUID found. 344** 345** Returns TRUE if found, otherwise FALSE. 346** 347*******************************************************************************/ 348extern BOOLEAN SDP_FindServiceUUIDInRec_128bit(tSDP_DISC_REC *p_rec, tBT_UUID * p_uuid); 349 350/******************************************************************************* 351** 352** Function SDP_FindServiceInDb_128bit 353** 354** Description This function queries an SDP database for a specific service. 355** If the p_start_rec pointer is NULL, it looks from the beginning 356** of the database, else it continues from the next record after 357** p_start_rec. 358** 359** Returns Pointer to record containing service class, or NULL 360** 361*******************************************************************************/ 362extern tSDP_DISC_REC *SDP_FindServiceInDb_128bit(tSDP_DISCOVERY_DB *p_db, 363 tSDP_DISC_REC *p_start_rec); 364 365/******************************************************************************* 366** 367** Function SDP_FindProtocolListElemInRec 368** 369** Description This function looks at a specific discovery record for a 370** protocol list element. 371** 372** Returns TRUE if found, FALSE if not 373** If found, the passed protocol list element is filled in. 374** 375*******************************************************************************/ 376extern BOOLEAN SDP_FindProtocolListElemInRec (tSDP_DISC_REC *p_rec, 377 UINT16 layer_uuid, 378 tSDP_PROTOCOL_ELEM *p_elem); 379 380 381/******************************************************************************* 382** 383** Function SDP_FindAddProtoListsElemInRec 384** 385** Description This function looks at a specific discovery record for a 386** protocol list element. 387** 388** Returns TRUE if found, FALSE if not 389** If found, the passed protocol list element is filled in. 390** 391*******************************************************************************/ 392extern BOOLEAN SDP_FindAddProtoListsElemInRec (tSDP_DISC_REC *p_rec, 393 UINT16 layer_uuid, 394 tSDP_PROTOCOL_ELEM *p_elem); 395 396 397/******************************************************************************* 398** 399** Function SDP_FindProfileVersionInRec 400** 401** Description This function looks at a specific discovery record for the 402** Profile list descriptor, and pulls out the version number. 403** The version number consists of an 8-bit major version and 404** an 8-bit minor version. 405** 406** Returns TRUE if found, FALSE if not 407** If found, the major and minor version numbers that were passed 408** in are filled in. 409** 410*******************************************************************************/ 411extern BOOLEAN SDP_FindProfileVersionInRec (tSDP_DISC_REC *p_rec, 412 UINT16 profile_uuid, 413 UINT16 *p_version); 414 415 416/* API into SDP for local service database updates */ 417 418/******************************************************************************* 419** 420** Function SDP_CreateRecord 421** 422** Description This function is called to create a record in the database. 423** This would be through the SDP database maintenance API. The 424** record is created empty, teh application should then call 425** "add_attribute" to add the record's attributes. 426** 427** Returns Record handle if OK, else 0. 428** 429*******************************************************************************/ 430extern UINT32 SDP_CreateRecord (void); 431 432 433/******************************************************************************* 434** 435** Function SDP_DeleteRecord 436** 437** Description This function is called to add a record (or all records) 438** from the database. This would be through the SDP database 439** maintenance API. 440** 441** If a record handle of 0 is passed, all records are deleted. 442** 443** Returns TRUE if succeeded, else FALSE 444** 445*******************************************************************************/ 446extern BOOLEAN SDP_DeleteRecord (UINT32 handle); 447 448 449/******************************************************************************* 450** 451** Function SDP_ReadRecord 452** 453** Description This function is called to get the raw data of the record 454** with the given handle from the database. 455** 456** Returns -1, if the record is not found. 457** Otherwise, the offset (0 or 1) to start of data in p_data. 458** 459** The size of data copied into p_data is in *p_data_len. 460** 461*******************************************************************************/ 462extern INT32 SDP_ReadRecord(UINT32 handle, UINT8 *p_data, INT32 *p_data_len); 463 464/******************************************************************************* 465** 466** Function SDP_AddAttribute 467** 468** Description This function is called to add an attribute to a record. 469** This would be through the SDP database maintenance API. 470** If the attribute already exists in the record, it is replaced 471** with the new value. 472** 473** NOTE Attribute values must be passed as a Big Endian stream. 474** 475** Returns TRUE if added OK, else FALSE 476** 477*******************************************************************************/ 478extern BOOLEAN SDP_AddAttribute (UINT32 handle, UINT16 attr_id, 479 UINT8 attr_type, UINT32 attr_len, 480 UINT8 *p_val); 481 482 483/******************************************************************************* 484** 485** Function SDP_AddSequence 486** 487** Description This function is called to add a sequence to a record. 488** This would be through the SDP database maintenance API. 489** If the sequence already exists in the record, it is replaced 490** with the new sequence. 491** 492** NOTE Element values must be passed as a Big Endian stream. 493** 494** Returns TRUE if added OK, else FALSE 495** 496*******************************************************************************/ 497extern BOOLEAN SDP_AddSequence (UINT32 handle, UINT16 attr_id, 498 UINT16 num_elem, UINT8 type[], 499 UINT8 len[], UINT8 *p_val[]); 500 501 502/******************************************************************************* 503** 504** Function SDP_AddUuidSequence 505** 506** Description This function is called to add a UUID sequence to a record. 507** This would be through the SDP database maintenance API. 508** If the sequence already exists in the record, it is replaced 509** with the new sequence. 510** 511** Returns TRUE if added OK, else FALSE 512** 513*******************************************************************************/ 514extern BOOLEAN SDP_AddUuidSequence (UINT32 handle, UINT16 attr_id, 515 UINT16 num_uuids, UINT16 *p_uuids); 516 517 518/******************************************************************************* 519** 520** Function SDP_AddProtocolList 521** 522** Description This function is called to add a protocol descriptor list to 523** a record. This would be through the SDP database maintenance API. 524** If the protocol list already exists in the record, it is replaced 525** with the new list. 526** 527** Returns TRUE if added OK, else FALSE 528** 529*******************************************************************************/ 530extern BOOLEAN SDP_AddProtocolList (UINT32 handle, UINT16 num_elem, 531 tSDP_PROTOCOL_ELEM *p_elem_list); 532 533 534/******************************************************************************* 535** 536** Function SDP_AddAdditionProtoLists 537** 538** Description This function is called to add a protocol descriptor list to 539** a record. This would be through the SDP database maintenance API. 540** If the protocol list already exists in the record, it is replaced 541** with the new list. 542** 543** Returns TRUE if added OK, else FALSE 544** 545*******************************************************************************/ 546extern BOOLEAN SDP_AddAdditionProtoLists (UINT32 handle, UINT16 num_elem, 547 tSDP_PROTO_LIST_ELEM *p_proto_list); 548 549 550/******************************************************************************* 551** 552** Function SDP_AddProfileDescriptorList 553** 554** Description This function is called to add a profile descriptor list to 555** a record. This would be through the SDP database maintenance API. 556** If the version already exists in the record, it is replaced 557** with the new one. 558** 559** Returns TRUE if added OK, else FALSE 560** 561*******************************************************************************/ 562extern BOOLEAN SDP_AddProfileDescriptorList (UINT32 handle, 563 UINT16 profile_uuid, 564 UINT16 version); 565 566 567/******************************************************************************* 568** 569** Function SDP_AddLanguageBaseAttrIDList 570** 571** Description This function is called to add a language base attr list to 572** a record. This would be through the SDP database maintenance API. 573** If the version already exists in the record, it is replaced 574** with the new one. 575** 576** Returns TRUE if added OK, else FALSE 577** 578*******************************************************************************/ 579extern BOOLEAN SDP_AddLanguageBaseAttrIDList (UINT32 handle, 580 UINT16 lang, UINT16 char_enc, 581 UINT16 base_id); 582 583 584/******************************************************************************* 585** 586** Function SDP_AddServiceClassIdList 587** 588** Description This function is called to add a service list to a record. 589** This would be through the SDP database maintenance API. 590** If the service list already exists in the record, it is replaced 591** with the new list. 592** 593** Returns TRUE if added OK, else FALSE 594** 595*******************************************************************************/ 596extern BOOLEAN SDP_AddServiceClassIdList (UINT32 handle, 597 UINT16 num_services, 598 UINT16 *p_service_uuids); 599 600 601/******************************************************************************* 602** 603** Function SDP_DeleteAttribute 604** 605** Description This function is called to delete an attribute from a record. 606** This would be through the SDP database maintenance API. 607** 608** Returns TRUE if deleted OK, else FALSE if not found 609** 610*******************************************************************************/ 611extern BOOLEAN SDP_DeleteAttribute (UINT32 handle, UINT16 attr_id); 612 613 614/* Device Identification APIs */ 615 616/******************************************************************************* 617** 618** Function SDP_SetLocalDiRecord 619** 620** Description This function adds a DI record to the local SDP database. 621** 622** Returns Returns SDP_SUCCESS if record added successfully, else error 623** 624*******************************************************************************/ 625extern UINT16 SDP_SetLocalDiRecord (tSDP_DI_RECORD *device_info, 626 UINT32 *p_handle); 627 628/******************************************************************************* 629** 630** Function SDP_DiDiscover 631** 632** Description This function queries a remote device for DI information. 633** 634** Returns SDP_SUCCESS if query started successfully, else error 635** 636*******************************************************************************/ 637extern UINT16 SDP_DiDiscover (BD_ADDR remote_device, 638 tSDP_DISCOVERY_DB *p_db, UINT32 len, 639 tSDP_DISC_CMPL_CB *p_cb); 640 641 642/******************************************************************************* 643** 644** Function SDP_GetNumDiRecords 645** 646** Description Searches specified database for DI records 647** 648** Returns number of DI records found 649** 650*******************************************************************************/ 651extern UINT8 SDP_GetNumDiRecords (tSDP_DISCOVERY_DB *p_db); 652 653 654/******************************************************************************* 655** 656** Function SDP_GetDiRecord 657** 658** Description This function retrieves a remote device's DI record from 659** the specified database. 660** 661** Returns SDP_SUCCESS if record retrieved, else error 662** 663*******************************************************************************/ 664extern UINT16 SDP_GetDiRecord (UINT8 getRecordIndex, 665 tSDP_DI_GET_RECORD *device_info, 666 tSDP_DISCOVERY_DB *p_db); 667 668 669/******************************************************************************* 670** 671** Function SDP_SetTraceLevel 672** 673** Description This function sets the trace level for SDP. If called with 674** a value of 0xFF, it simply reads the current trace level. 675** 676** Returns the new (current) trace level 677** 678*******************************************************************************/ 679extern UINT8 SDP_SetTraceLevel (UINT8 new_level); 680 681/******************************************************************************* 682** 683** Function SDP_ConnOpen 684** 685** Description This function creates a connection to the SDP server on the 686** given device. 687** 688** Returns 0, if failed to initiate connection. Otherwise, the handle. 689** 690*******************************************************************************/ 691UINT32 SDP_ConnOpen (UINT8 *p_bd_addr, tSDP_DISC_RES_CB *p_rcb, 692 tSDP_DISC_CMPL_CB *p_cb); 693 694/******************************************************************************* 695** 696** Function SDP_WriteData 697** 698** Description This function sends data to the connected SDP server. 699** 700** Returns TRUE if data is sent, FALSE if failed. 701** 702*******************************************************************************/ 703BOOLEAN SDP_WriteData (UINT32 handle, BT_HDR *p_msg); 704 705/******************************************************************************* 706** 707** Function SDP_ConnClose 708** 709** Description This function is called to close a SDP connection. 710** 711** Parameters: handle - Handle of the connection returned by SDP_ConnOpen 712** 713** Returns TRUE if connection is closed, FALSE if failed to find the handle. 714** 715*******************************************************************************/ 716BOOLEAN SDP_ConnClose (UINT32 handle); 717 718/******************************************************************************* 719** 720** Function SDP_FindServiceUUIDInRec 721** 722** Description This function is called to read the service UUID within a record 723** if there is any. 724** 725** Parameters: p_rec - pointer to a SDP record. 726** 727** Returns TRUE if found, otherwise FALSE. 728** 729*******************************************************************************/ 730BOOLEAN SDP_FindServiceUUIDInRec(tSDP_DISC_REC *p_rec, tBT_UUID *p_uuid); 731 732#ifdef __cplusplus 733} 734#endif 735 736#endif /* SDP_API_H */ 737