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