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