/***************************************************************************
 *
 * Copyright 2015-2019 BES.
 * All rights reserved. All unpublished rights reserved.
 *
 * No part of this work may be used or reproduced in any form or by any
 * means, or stored in a database or retrieval system, without prior written
 * permission of BES.
 *
 * Use of this work is governed by a license granted by BES.
 * This work contains confidential and proprietary information of
 * BES. which is protected by copyright, trade secret,
 * trademark and other intellectual property rights.
 *
 ****************************************************************************/

#ifndef	__SDP_API_H__
#define	__SDP_API_H__

#include "me_api.h"

#define BTIF_SDP_RECORD_NUM_MAX (10)
#define BTIF_SDP_QUERY_TOKEN_NUM_MAX (4)

typedef void btif_sdp_record_t;

typedef uint8_t sdp_query_type;
#define BTIF_BSQT_ATTRIB_REQ                 0x04
#define BTIF_BSQT_SERVICE_SEARCH_ATTRIB_REQ  0x06
typedef uint8_t sdp_query_resp;
#define BTIF_BSQR_ERROR_RESP                 0x01
#define BTIF_BSQR_SERVICE_SEARCH_RESP        0x03
#define BTIF_BSQR_ATTRIB_RESP                0x05
#define BTIF_BSQR_SERVICE_SEARCH_ATTRIB_RESP 0x07

#if SDP_SERVER_SUPPORT == XA_ENABLED
#define BTIF_SDP_SERVER_ATTRIBS 3
#define BTIF_SDP_SERVER_TX_SIZE (SDP_SERVER_SEND_SIZE - 5)
#define BTIF_SDP_SERV_OWN_HANDLE     0x00000000
#define BTIF_SDP_SERV_FIRST_HANDLE   0x00010000
#define BTIF_SDP_SERV_BOGUS_HANDLE   0xffffffff
#define BTIF_SDP_ZERO_SERVICE_DATABASE_STATE_SIZE 5
#endif /* SDP_SERVER_SUPPORT == XA_ENABLED */

typedef uint16_t sdp_service_class_uuid;
#define BTIF_SC_SERVICE_DISCOVERY_SERVER             0x1000
#define BTIF_SC_BROWSE_GROUP_DESC                    0x1001
#define BTIF_SC_PUBLIC_BROWSE_GROUP                  0x1002
#define BTIF_SC_SERIAL_PORT                          0x1101
#define BTIF_SC_LAN_ACCESS_PPP                       0x1102
#define BTIF_SC_DIALUP_NETWORKING                    0x1103
#define BTIF_SC_IRMC_SYNC                            0x1104
#define BTIF_SC_OBEX_OBJECT_PUSH                     0x1105
#define BTIF_SC_OBEX_FILE_TRANSFER                   0x1106
#define BTIF_SC_IRMC_SYNC_COMMAND                    0x1107
#define BTIF_SC_HEADSET                              0x1108
#define BTIF_SC_CORDLESS_TELEPHONY                   0x1109
#define BTIF_SC_AUDIO_SOURCE                         0x110A
#define BTIF_SC_AUDIO_SINK                           0x110B
#define BTIF_SC_AV_REMOTE_CONTROL_TARGET             0x110C
#define BTIF_SC_AUDIO_DISTRIBUTION                   0x110D
#define BTIF_SC_AV_REMOTE_CONTROL                    0x110E
#define BTIF_SC_VIDEO_CONFERENCING                   0x110F
#define BTIF_SC_INTERCOM                             0x1110
#define BTIF_SC_FAX                                  0x1111
#define BTIF_SC_HEADSET_AUDIO_GATEWAY                0x1112
#define BTIF_SC_WAP                                  0x1113
#define BTIF_SC_WAP_CLIENT                           0x1114
#define BTIF_SC_PANU                                 0x1115
#define BTIF_SC_NAP                                  0x1116
#define BTIF_SC_GN                                   0x1117
#define BTIF_SC_DIRECT_PRINTING                      0x1118
#define BTIF_SC_REFERENCE_PRINTING                   0x1119
#define BTIF_SC_IMAGING                              0x111A
#define BTIF_SC_IMAGING_RESPONDER                    0x111B
#define BTIF_SC_IMAGING_AUTOMATIC_ARCHIVE            0x111C
#define BTIF_SC_IMAGING_REFERENCED_OBJECTS           0x111D
#define BTIF_SC_HANDSFREE                            0x111E
#define BTIF_SC_HANDSFREE_AUDIO_GATEWAY              0x111F
#define BTIF_SC_DIRECT_PRINTING_REF_OBJECTS          0x1120
#define BTIF_SC_REFLECTED_UI                         0x1121
#define BTIF_SC_BASIC_PRINTING                       0x1122
#define BTIF_SC_PRINTING_STATUS                      0x1123
#define BTIF_SC_HUMAN_INTERFACE_DEVICE               0x1124
#define BTIF_SC_HCR                                  0x1125
#define BTIF_SC_HCR_PRINT                            0x1126
#define BTIF_SC_HCR_SCAN                             0x1127
#define BTIF_SC_ISDN                                 0x1128
#define BTIF_SC_VIDEO_CONFERENCING_GW                0x1129
#define BTIF_SC_UDI_MT                               0x112A
#define BTIF_SC_UDI_TA                               0x112B
#define BTIF_SC_AUDIO_VIDEO                          0x112C
#define BTIF_SC_SIM_ACCESS                           0x112D
#define BTIF_SC_PBAP_CLIENT                          0x112E
#define BTIF_SC_PBAP_SERVER                          0x112F
#define BTIF_SC_PBAP_PROFILE                         0x1130
#define BTIF_SC_MAP_SERVER                           0x1132
#define BTIF_SC_MAP_NOTIFY_SERVER                    0x1133
#define BTIF_SC_MAP_PROFILE                          0x1134
#define BTIF_SC_PNP_INFO                             0x1200
#define BTIF_SC_GENERIC_NETWORKING                   0x1201
#define BTIF_SC_GENERIC_FILE_TRANSFER                0x1202
#define BTIF_SC_GENERIC_AUDIO                        0x1203
#define BTIF_SC_GENERIC_TELEPHONY                    0x1204
#define BTIF_SC_UPNP_SERVICE                         0x1205
#define BTIF_SC_UPNP_IP_SERVICE                      0x1206
#define BTIF_SC_ESDP_UPNP_IP_PAN                     0x1300
#define BTIF_SC_ESDP_UPNP_IP_LAP                     0x1301
#define BTIF_SC_ESDP_UPNP_L2CAP                      0x1302
#define BTIF_SC_VIDEO_SOURCE                         0x1303
#define BTIF_SC_VIDEO_SINK                           0x1304
#define BTIF_SC_VIDEO_DISTRIBUTION                   0x1305

typedef uint8_t sdp_parsing_mode;
#define BTIF_BSPM_BEGINNING   0x00
#define BTIF_BSPM_RESUME      0x01
#define BTIF_BSPM_CONT_STATE  0x02
#define BTIF_BSPM_NO_SKIP   0x04

typedef uint8_t sdp_query_mode;
#define BTIF_BSQM_FIRST     0x00
#define BTIF_BSQM_CONTINUE  0x01
#define BTIF_BSQM_DONT_CARE 0xFF

typedef U8 SdpDataElemType;
#define DETD_NIL  0x00
#define DETD_UINT 0x08
#define DETD_SINT 0x10
#define DETD_UUID 0x18
#define DETD_TEXT 0x20
#define DETD_BOOL 0x28
#define DETD_SEQ  0x30
#define DETD_ALT  0x38
#define DETD_URL  0x40
#define DETD_MASK 0xf8

typedef uint8_t sdp_data_elem_size;
#define DESD_1BYTE      0x00
#define DESD_2BYTES     0x01
#define DESD_4BYTES     0x02
#define DESD_8BYTES     0x03
#define DESD_16BYTES    0x04
#define DESD_ADD_8BITS  0x05
#define DESD_ADD_16BITS 0x06
#define DESD_ADD_32BITS 0x07
#define DESD_MASK       0x07

#define SDP_ATTRIBUTE(attribId, attrib) \
          { attribId,           \
            sizeof(attrib),     \
            attrib,             \
            0x0000 }

#define SDP_ATTRIBUTE_ARM(attribId, attrib) \
          { attribId,           \
            sizeof(attrib),     \
            0,                  \
            0x0000 }

#define SDP_ATTRIB_HEADER_8BIT(size) \
            DETD_SEQ + DESD_ADD_8BITS,      \
            size

#define SDP_ATTRIB_HEADER_16BIT(size) \
            DETD_SEQ + DESD_ADD_16BITS,      \
            (U8)(((size) & 0xff00) >> 8),    \
            (U8)((size) & 0x00ff)

#define SDP_ATTRIB_HEADER_32BIT(size) \
            DETD_SEQ + DESD_ADD_32BITS,         \
            (U8)(((size) & 0xff000000) >> 24),  \
            (U8)(((size) & 0x00ff0000) >> 16),  \
            (U8)(((size) & 0x0000ff00) >> 8),   \
            (U8)((size) & 0x000000ff)

#define SDP_ATTRIB_HEADER_ALT_8BIT(size) \
            DETD_ALT + DESD_ADD_8BITS,      \
            size

#define SDP_ATTRIB_HEADER_ALT_16BIT(size) \
            DETD_ALT + DESD_ADD_16BITS,      \
            (U8)(((size) & 0xff00) >> 8),    \
            (U8)((size) & 0x00ff)

#define SDP_ATTRIB_HEADER_ALT_32BIT(size) \
            DETD_ALT + DESD_ADD_32BITS,         \
            (U8)(((size) & 0xff000000) >> 24),  \
            (U8)(((size) & 0x00ff0000) >> 16),  \
            (U8)(((size) & 0x0000ff00) >> 8),   \
            (U8)((size) & 0x000000ff)

#define SDP_UUID_16BIT(uuid) \
            DETD_UUID + DESD_2BYTES,         \
            (U8)(((uuid) & 0xff00) >> 8),    \
            (U8)((uuid) & 0x00ff)

#define SDP_UUID_32BIT(uuid) \
            DETD_UUID + DESD_4BYTES,            \
            (U8)(((uuid) & 0xff000000) >> 24),  \
            (U8)(((uuid) & 0x00ff0000) >> 16),  \
            (U8)(((uuid) & 0x0000ff00) >> 8),   \
            (U8)((uuid) & 0x000000ff)

#define SDP_UUID_128BIT(uuid)                \
            DETD_UUID + DESD_16BYTES,        \
            (U8)(uuid[15]), \
            (U8)(uuid[14]), \
            (U8)(uuid[13]), \
            (U8)(uuid[12]), \
            (U8)(uuid[11]), \
            (U8)(uuid[10]), \
            (U8)(uuid[9]),  \
            (U8)(uuid[8]),  \
            (U8)(uuid[7]),  \
            (U8)(uuid[6]),  \
            (U8)(uuid[5]),  \
            (U8)(uuid[4]),  \
            (U8)(uuid[3]),  \
            (U8)(uuid[2]),  \
            (U8)(uuid[1]),  \
            (U8)(uuid[0])

#define SDP_UINT_8BIT(uint) \
            DETD_UINT + DESD_1BYTE,          \
            (U8)(uint)

#define SDP_UINT_16BIT(uint) \
            DETD_UINT + DESD_2BYTES,         \
            (U8)(((uint) & 0xff00) >> 8),    \
            (U8)((uint) & 0x00ff)

#define SDP_UINT_32BIT(uint) \
            DETD_UINT + DESD_4BYTES,            \
            (U8)(((uint) & 0xff000000) >> 24),  \
            (U8)(((uint) & 0x00ff0000) >> 16),  \
            (U8)(((uint) & 0x0000ff00) >> 8),   \
            (U8)((uint) & 0x000000ff)

#define SDP_UINT_64BIT(uint)                    \
            DETD_UINT + DESD_8BYTES,            \
            uint

#define SDP_UINT_128BIT(uint)                   \
            DETD_UINT + DESD_16BYTES,           \
            uint

#define SDP_TEXT_8BIT(size) \
            DETD_TEXT + DESD_ADD_8BITS,\
            (U8)(size)

#define SDP_TEXT_16BIT(size) \
            DETD_TEXT + DESD_ADD_16BITS,\
            (U8)(((size) & 0xff00) >> 8),\
            (U8)((size) & 0x00ff)

#define SDP_TEXT_32BIT(size) \
            DETD_TEXT + DESD_ADD_32BITS,        \
            (U8)(((size) & 0xff000000) >> 24),  \
            (U8)(((size) & 0x00ff0000) >> 16),  \
            (U8)(((size) & 0x0000ff00) >> 8),   \
            (U8)((size) & 0x000000ff)

#define SDP_BOOL(value) \
            DETD_BOOL + DESD_1BYTE,          \
            (U8)(value)

typedef uint16_t sdp_service_class_uuid;
#define SC_SERVICE_DISCOVERY_SERVER             0x1000
#define SC_BROWSE_GROUP_DESC                    0x1001
#define SC_PUBLIC_BROWSE_GROUP                  0x1002
#define SC_SERIAL_PORT                          0x1101
#define SC_LAN_ACCESS_PPP                       0x1102
#define SC_DIALUP_NETWORKING                    0x1103
#define SC_IRMC_SYNC                            0x1104
#define SC_OBEX_OBJECT_PUSH                     0x1105
#define SC_OBEX_FILE_TRANSFER                   0x1106
#define SC_IRMC_SYNC_COMMAND                    0x1107
#define SC_HEADSET                              0x1108
#define SC_CORDLESS_TELEPHONY                   0x1109
#define SC_AUDIO_SOURCE                         0x110A
#define SC_AUDIO_SINK                           0x110B
#define SC_AV_REMOTE_CONTROL_TARGET             0x110C
#define SC_AUDIO_DISTRIBUTION                   0x110D
#define SC_AV_REMOTE_CONTROL                    0x110E
#define SC_VIDEO_CONFERENCING                   0x110F
#define SC_INTERCOM                             0x1110
#define SC_FAX                                  0x1111
#define SC_HEADSET_AUDIO_GATEWAY                0x1112
#define SC_WAP                                  0x1113
#define SC_WAP_CLIENT                           0x1114
#define SC_PANU                                 0x1115
#define SC_NAP                                  0x1116
#define SC_GN                                   0x1117
#define SC_DIRECT_PRINTING                      0x1118
#define SC_REFERENCE_PRINTING                   0x1119
#define SC_IMAGING                              0x111A
#define SC_IMAGING_RESPONDER                    0x111B
#define SC_IMAGING_AUTOMATIC_ARCHIVE            0x111C
#define SC_IMAGING_REFERENCED_OBJECTS           0x111D
#define SC_HANDSFREE                            0x111E
#define SC_HANDSFREE_AUDIO_GATEWAY              0x111F
#define SC_DIRECT_PRINTING_REF_OBJECTS          0x1120
#define SC_REFLECTED_UI                         0x1121
#define SC_BASIC_PRINTING                       0x1122
#define SC_PRINTING_STATUS                      0x1123
#define SC_HUMAN_INTERFACE_DEVICE               0x1124
#define SC_HCR                                  0x1125
#define SC_HCR_PRINT                            0x1126
#define SC_HCR_SCAN                             0x1127
#define SC_ISDN                                 0x1128
#define SC_VIDEO_CONFERENCING_GW                0x1129
#define SC_UDI_MT                               0x112A
#define SC_UDI_TA                               0x112B
#define SC_AUDIO_VIDEO                          0x112C
#define SC_SIM_ACCESS                           0x112D
#define SC_PBAP_CLIENT                          0x112E
#define SC_PBAP_SERVER                          0x112F
#define SC_PBAP_PROFILE                         0x1130
#define SC_MAP_SERVER                           0x1132
#define SC_MAP_NOTIFY_SERVER                    0x1133
#define SC_MAP_PROFILE                          0x1134
#define SC_PNP_INFO                             0x1200
#define SC_GENERIC_NETWORKING                   0x1201
#define SC_GENERIC_FILE_TRANSFER                0x1202
#define SC_GENERIC_AUDIO                        0x1203
#define SC_GENERIC_TELEPHONY                    0x1204
#define SC_UPNP_SERVICE                         0x1205
#define SC_UPNP_IP_SERVICE                      0x1206
#define SC_ESDP_UPNP_IP_PAN                     0x1300
#define SC_ESDP_UPNP_IP_LAP                     0x1301
#define SC_ESDP_UPNP_L2CAP                      0x1302
#define SC_VIDEO_SOURCE                         0x1303
#define SC_VIDEO_SINK                           0x1304
#define SC_VIDEO_DISTRIBUTION                   0x1305

typedef uint16_t sdp_protocol_uuid;
#define PROT_SDP                     0x0001
#define PROT_UDP                     0x0002
#define PROT_RFCOMM                  0x0003
#define PROT_TCP                     0x0004
#define PROT_TCS_BIN                 0x0005
#define PROT_TCS_AT                  0x0006
#define PROT_OBEX                    0x0008
#define PROT_IP                      0x0009
#define PROT_FTP                     0x000A
#define PROT_HTTP                    0x000C
#define PROT_WSP                     0x000E
#define PROT_BNEP                    0x000F
#define PROT_UPNP                    0x0010
#define PROT_HIDP                    0x0011
#define PROT_HCR_CONTROL_CHANNEL     0x0012
#define PROT_HCR_DATA_CHANNEL        0x0014
#define PROT_HCR_NOTIFICATION        0x0016
#define PROT_AVCTP                   0x0017
#define PROT_AVDTP                   0x0019
#define PROT_AVCTP_BROWSING          0x001B
#define PROT_UDI_C                   0x001D
#define PROT_L2CAP                   0x0100

typedef uint16_t sdp_attribute_id;
#define AID_SERVICE_RECORD_HANDLE               0x0000
#define AID_SERVICE_CLASS_ID_LIST               0x0001
#define AID_SERVICE_RECORD_STATE                0x0002
#define AID_SERVICE_ID                          0x0003
#define AID_PROTOCOL_DESC_LIST                  0x0004
#define AID_BROWSE_GROUP_LIST                   0x0005
#define AID_LANG_BASE_ID_LIST                   0x0006
#define AID_SERVICE_INFO_TIME_TO_LIVE           0x0007
#define AID_SERVICE_AVAILABILITY                0x0008
#define AID_BT_PROFILE_DESC_LIST                0x0009
#define AID_DOC_URL                             0x000a
#define AID_CLIENT_EXEC_URL                     0x000b
#define AID_ICON_URL                            0x000c
#define AID_ADDITIONAL_PROT_DESC_LISTS          0x000d
#define AID_SERVICE_NAME                        0x0000
#define AID_SERVICE_DESCRIPTION                 0x0001
#define AID_PROVIDER_NAME                       0x0002
#define AID_IP_SUBNET                           0x0200
#define AID_GROUP_ID                            0x0200
#define AID_VERSION_NUMBER_LIST                 0x0200
#define AID_SERVICE_DATABASE_STATE              0x0201
#define AID_SERVICE_VERSION                     0x0300
#define AID_EXTERNAL_NETWORK                    0x0301
#define AID_SUPPORTED_DATA_STORES_LIST          0x0301
#define AID_FAX_CLASS_1_SUPPORT                 0x0302
#define AID_REMOTE_AUDIO_VOL_CONTROL            0x0302
#define AID_FAX_CLASS_20_SUPPORT                0x0303
#define AID_SUPPORTED_FORMATS_LIST              0x0303
#define AID_FAX_CLASS_2_SUPPORT                 0x0304
#define AID_AUDIO_FEEDBACK_SUPPORT              0x0305
#define AID_NETWORK_ADDRESS                     0x0306
#define AID_WAP_GATEWAY                         0x0307
#define AID_HOME_PAGE_URL                       0x0308
#define AID_WAP_STACK_TYPE                      0x0309
#define AID_SECURITY_DESC                       0x030A
#define AID_NET_ACCESS_TYPE                     0x030B
#define AID_MAX_NET_ACCESS_RATE                 0x030C
#define AID_IPV4_SUBNET                         0x030D
#define AID_IPV6_SUBNET                         0x030E
#define AID_SUPPORTED_CAPABILITIES              0x0310
#define AID_SUPPORTED_FEATURES                  0x0311
#define AID_SUPPORTED_FUNCTIONS                 0x0312
#define AID_TOTAL_IMAGE_DATA_CAPACITY           0x0313
#define AID_SUPPORTED_REPOSITORIES              0x0314
#define AID_MAS_INSTANCE_ID                     0x0315
#define AID_SUPPORTED_MESSAGE_TYPES             0x0316
#define AID_SUPPORTED_DOC_FORMATS               0x0350
#define AID_SUPPORTED_CHAR_REPERTOIRES          0x0352
#define AID_SUPPORTED_XHTML_IMAGE_FORMATS       0x0354
#define AID_COLOR_SUPPORTED                     0x0356
#define AID_PRINTER_1284ID                      0x0358
#define AID_DUPLEX_SUPPORTED                    0x035E
#define AID_SUPPORTED_MEDIA_TYPES               0x0360
#define AID_MAX_MEDIA_WIDTH                     0x0362
#define AID_MAX_MEDIA_LENGTH                    0x0364
#define AID_HID_PARSERVERSION                   0x201
#define AID_HID_DEVICESUBCLASS                  0x202
#define AID_HID_CONTRYCODE                      0x203
#define AID_HID_VIRTUALCABLE                    0x204
#define AID_HID_RECONNECTINITIATE               0x205
#define AID_HID_DESCRIPTORLIST                  0x206
#define AID_HID_LANGIDBASELIST                  0x207
#define AID_HID_BATTERYPOWER                    0x209
#define AID_HID_REMOTEWAKE                      0x20A
#define AID_HID_SUPERVISIONTIMEOUT              0x20C
#define AID_HID_NORMALLYCONNECTABLE             0x20D
#define AID_HID_BOOTDEVICE                      0x20E
#define AID_HID_SSRHOSTMAXLATENCY               0x20F
#define AID_HID_SSRHOSTMINTIMEOUT               0x210

U16 sdp_get_u16(U8 * buff);
#define sdp_get_u16(buff) be_to_host16((buff))
U32 sdp_get_u32(U8 * buff);
#define sdp_get_u32(buff) BEtoHost32((buff))
void sdp_put_u16(U8 * buff, U16 val);
#define sdp_put_u16(buff,val) StoreBE16((buff),(val))
void sdp_put_u32(U8 * buff, U32 val);
#define sdp_put_u32(buff,val) StoreBE32((buff),(val))

typedef struct btif_sdp_attribute {
    uint16_t id;
    uint16_t len;
    const uint8_t *value;
    uint16_t flags;
} __attribute__ ((__packed__)) sdp_attribute_t;

typedef struct btif_sdp_query_info {
    const uint8_t *parms;
    uint16_t parm_len;
    sdp_query_type query_type;
    sdp_attribute_id attr_id;
    uint16_t uuid;
    sdp_parsing_mode mode;
    btif_callback callback;
    void *priv;
} __attribute__ ((__packed__)) btif_sdp_query_info_t;

typedef struct btif_sdp_record_param {
    sdp_attribute_t *attrs;
    uint32_t attr_count;
    uint32_t COD;
} __attribute__ ((__packed__)) btif_sdp_record_param_t;


typedef struct btif_sdp_query_token
{
    btif_remote_device_t *rm;  /* The remote device to query. An ACL
                               * connection must exist with this device
                               * before the query is started. */
   struct btif_sdp_query_info info;
    uint8_t         channel;
    uint8_t     response_buff[666];
    uint32_t    response_buff_len;
} __attribute__ ((__packed__)) btif_sdp_query_token_t;

#ifdef __cplusplus
extern "C" {
#endif

    bt_status_t btif_sdp_init(void);

    btif_sdp_record_t *btif_sdp_create_record(void);

    void btif_sdp_free_record(btif_sdp_record_t* record);

    void *btif_sdp_get_record_priv(btif_sdp_record_t *record);

    bt_status_t btif_sdp_record_setup(btif_sdp_record_t *record, btif_sdp_record_param_t *param);

    btif_sdp_query_token_t *btif_sdp_create_query_token(void);

    void btif_sdp_free_token(btif_sdp_query_token_t * query_token);

    int btif_sdp_set_query_token(btif_sdp_query_token_t * query_token, btif_sdp_query_info_t *info);

    int btif_sdp_set_remote_device(btif_sdp_query_token_t * query_token,
                                   btif_remote_device_t * r_device);

    bt_status_t btif_sdp_query(btif_sdp_query_token_t * query_token, sdp_query_mode mode);

    bt_status_t btif_sdp_parse_attrs(btif_sdp_query_token_t * query_token);

    btif_remote_device_t *btif_sdp_get_remote_device(btif_sdp_query_token_t * query_token);

    uint8_t btif_sdp_get_server_id(btif_sdp_query_token_t * query_token);

    void *btif_sdp_get_token_priv(btif_sdp_query_token_t * query_token);

    bt_status_t btif_sdp_add_record(btif_sdp_record_t * record);

    bt_status_t btif_sdp_remove_record(btif_sdp_record_t * record);

    void btif_sdp_set_parsing_mode(btif_sdp_query_token_t * query_token, sdp_parsing_mode mode);

    bt_status_t btif_spp_insert_rfcomm_chan(btif_sdp_record_t *record, uint8_t channel);

    btif_sdp_query_token_t *btif_me_get_callback_event_sdp_token(const btif_event_t *event);
#ifdef __cplusplus
}
#endif
#endif              /*__SDP_API_H__*/