18372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz/******************************************************************************
28372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz *
38372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz *  Copyright (C) 2014 The Android Open Source Project
48372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz *
58372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz *  Licensed under the Apache License, Version 2.0 (the "License");
68372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz *  you may not use this file except in compliance with the License.
78372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz *  You may obtain a copy of the License at:
88372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz *
98372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz *  http://www.apache.org/licenses/LICENSE-2.0
108372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz *
118372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz *  Unless required by applicable law or agreed to in writing, software
128372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz *  distributed under the License is distributed on an "AS IS" BASIS,
138372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
148372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz *  See the License for the specific language governing permissions and
158372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz *  limitations under the License.
168372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz *
178372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz ******************************************************************************/
188372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz
198372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz/******************************************************************************
208372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz *
218372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz *  This is the implementation of the API for SDP search subsystem
228372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz *
238372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz ******************************************************************************/
248372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz
258372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz#include "bta_api.h"
268372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz#include "bta_sys.h"
278372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz#include "bta_sdp_api.h"
288372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz#include "bta_sdp_int.h"
29a11035b5ecbc6cbd9da5bd707683504c47e2744ePavlin Radoslavov#include "bt_common.h"
308372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz#include <string.h>
318372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz#include "port_api.h"
328372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz#include "sdp_api.h"
338372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz
348372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz/*****************************************************************************
358372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz**  Constants
368372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz*****************************************************************************/
378372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz
388372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulzstatic const tBTA_SYS_REG bta_sdp_reg =
398372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz{
408372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz    bta_sdp_sm_execute,
418372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz    NULL
428372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz};
438372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz
448372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz/*******************************************************************************
458372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz**
468372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz** Function         BTA_SdpEnable
478372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz**
488372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz** Description      Enable the SDP search I/F service. When the enable
498372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz**                  operation is complete the callback function will be
508372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz**                  called with a BTA_SDP_ENABLE_EVT. This function must
518372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz**                  be called before other functions in the SDP search API are
528372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz**                  called.
538372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz**
548372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz** Returns          BTA_SDP_SUCCESS if successful.
558372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz**                  BTA_SDP_FAIL if internal failure.
568372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz**
578372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz*******************************************************************************/
588372aa5fa535ee4f09c09981b6125b54ace31fe2Kim SchulztBTA_SDP_STATUS BTA_SdpEnable(tBTA_SDP_DM_CBACK *p_cback)
598372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz{
608372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz    tBTA_SDP_STATUS status = BTA_SDP_FAILURE;
618372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz
628372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz    APPL_TRACE_API(__FUNCTION__);
638372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz    if(p_cback && FALSE == bta_sys_is_register(BTA_ID_SDP))
648372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz    {
658372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz        memset(&bta_sdp_cb, 0, sizeof(tBTA_SDP_CB));
668372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz
678372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz        /* register with BTA system manager */
688372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz        bta_sys_register(BTA_ID_SDP, &bta_sdp_reg);
698372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz
705fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        if (p_cback) {
715fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov            tBTA_SDP_API_ENABLE *p_buf =
725fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov                (tBTA_SDP_API_ENABLE *)osi_malloc(sizeof(tBTA_SDP_API_ENABLE));
738372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz            p_buf->hdr.event = BTA_SDP_API_ENABLE_EVT;
748372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz            p_buf->p_cback = p_cback;
758372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz            bta_sys_sendmsg(p_buf);
768372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz            status = BTA_SDP_SUCCESS;
778372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz        }
788372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz    }
795fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    return status;
808372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz}
818372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz
828372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz/*******************************************************************************
838372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz**
848372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz** Function         BTA_SdpSearch
858372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz**
868372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz** Description      This function performs service discovery for a specific service
878372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz**                  on given peer device. When the operation is completed
888372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz**                  the tBTA_SDP_DM_CBACK callback function will be  called with
898372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz**                  a BTA_SDP_SEARCH_COMPLETE_EVT.
908372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz**
918372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz** Returns          BTA_SDP_SUCCESS, if the request is being processed.
928372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz**                  BTA_SDP_FAILURE, otherwise.
938372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz**
948372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz*******************************************************************************/
958372aa5fa535ee4f09c09981b6125b54ace31fe2Kim SchulztBTA_SDP_STATUS BTA_SdpSearch(BD_ADDR bd_addr, tSDP_UUID *uuid)
968372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz{
975fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    tBTA_SDP_API_SEARCH *p_msg =
985fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        (tBTA_SDP_API_SEARCH *)osi_malloc(sizeof(tBTA_SDP_API_SEARCH));
998372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz
1005fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    APPL_TRACE_API("%s", __func__);
1015fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov
1025fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_msg->hdr.event = BTA_SDP_API_SEARCH_EVT;
1035fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    bdcpy(p_msg->bd_addr, bd_addr);
1045fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    // p_msg->uuid = uuid;
1055fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    memcpy(&(p_msg->uuid), uuid, sizeof(tSDP_UUID));
1068372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz
1075fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    bta_sys_sendmsg(p_msg);
1085fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov
1095fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    return BTA_SDP_SUCCESS;
1108372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz}
1118372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz
1128372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz/*******************************************************************************
1138372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz**
1148372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz** Function         BTA_SdpCreateRecordByUser
1158372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz**
1168372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz** Description      This function is used to request a callback to create a SDP
1178372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz**                  record. The registered callback will be called with event
1188372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz**                  BTA_SDP_CREATE_RECORD_USER_EVT.
1198372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz**
1208372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz** Returns          BTA_SDP_SUCCESS, if the request is being processed.
1218372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz**                  BTA_SDP_FAILURE, otherwise.
1228372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz**
1238372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz*******************************************************************************/
1248372aa5fa535ee4f09c09981b6125b54ace31fe2Kim SchulztBTA_SDP_STATUS BTA_SdpCreateRecordByUser(void* user_data)
1258372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz{
1265fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    tBTA_SDP_API_RECORD_USER *p_msg =
1275fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        (tBTA_SDP_API_RECORD_USER *)osi_malloc(sizeof(tBTA_SDP_API_RECORD_USER));
1288372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz
1295fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    APPL_TRACE_API("%s", __func__);
1308372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz
1315fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_msg->hdr.event = BTA_SDP_API_CREATE_RECORD_USER_EVT;
1325fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_msg->user_data = user_data;
1335fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov
1345fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    bta_sys_sendmsg(p_msg);
1355fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov
1365fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    return BTA_SDP_SUCCESS;
1378372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz}
1388372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz
1398372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz/*******************************************************************************
1408372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz**
1418372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz** Function         BTA_SdpRemoveRecordByUser
1428372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz**
1438372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz** Description      This function is used to request a callback to remove a SDP
1448372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz**                  record. The registered callback will be called with event
1458372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz**                  BTA_SDP_REMOVE_RECORD_USER_EVT.
1468372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz**
1478372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz** Returns          BTA_SDP_SUCCESS, if the request is being processed.
1488372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz**                  BTA_SDP_FAILURE, otherwise.
1498372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz**
1508372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz*******************************************************************************/
1518372aa5fa535ee4f09c09981b6125b54ace31fe2Kim SchulztBTA_SDP_STATUS BTA_SdpRemoveRecordByUser(void* user_data)
1528372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz{
1535fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    tBTA_SDP_API_RECORD_USER *p_msg =
1545fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov        (tBTA_SDP_API_RECORD_USER *)osi_malloc(sizeof(tBTA_SDP_API_RECORD_USER));
1558372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz
1565fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    APPL_TRACE_API("%s", __func__);
1578372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz
1585fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_msg->hdr.event = BTA_SDP_API_REMOVE_RECORD_USER_EVT;
1595fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    p_msg->user_data = user_data;
1608372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz
1615fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    bta_sys_sendmsg(p_msg);
1628372aa5fa535ee4f09c09981b6125b54ace31fe2Kim Schulz
1635fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov    return BTA_SDP_SUCCESS;
1645fe6f0cf6b223e3ed6be4912d55b3ed5b41ce0cdPavlin Radoslavov}
165