You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

195 lines
7.4 KiB

/*
* Copyright 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "osi/include/log.h"
#include "stack/btm/btm_ble_int.h"
#include "stack/btm/security_device_record.h"
#include "stack/include/acl_api.h"
#include "stack/include/hcimsgs.h"
#include "types/raw_address.h"
/*******************************************************************************
*
* Function BTM_SecAddDevice
*
* Description Add/modify device. This function will be normally called
* during host startup to restore all required information
* stored in the NVRAM.
*
* Parameters: bd_addr - BD address of the peer
* dev_class - Device Class
* bd_name - Name of the peer device. NULL if unknown.
* features - Remote device's features (up to 3 pages).
* NULL if not known
* link_key - Connection link key. NULL if unknown.
*
* Returns true if added OK, else false
*
******************************************************************************/
bool BTM_SecAddDevice(const RawAddress& bd_addr, DEV_CLASS dev_class,
BD_NAME bd_name, uint8_t* features, LinkKey* p_link_key,
uint8_t key_type, uint8_t pin_length);
void wipe_secrets_and_remove(tBTM_SEC_DEV_REC* p_dev_rec);
/** Free resources associated with the device associated with |bd_addr| address.
*
* *** WARNING ***
* tBTM_SEC_DEV_REC associated with bd_addr becomes invalid after this function
* is called, also any of it's fields. i.e. if you use p_dev_rec->bd_addr, it is
* no longer valid!
* *** WARNING ***
*
* Returns true if removed OK, false if not found or ACL link is active.
*/
bool BTM_SecDeleteDevice(const RawAddress& bd_addr);
/*******************************************************************************
*
* Function BTM_SecClearSecurityFlags
*
* Description Reset the security flags (mark as not-paired) for a given
* remove device.
*
******************************************************************************/
void BTM_SecClearSecurityFlags(const RawAddress& bd_addr);
/*******************************************************************************
*
* Function BTM_SecReadDevName
*
* Description Looks for the device name in the security database for the
* specified BD address.
*
* Returns Pointer to the name or NULL
*
******************************************************************************/
char* BTM_SecReadDevName(const RawAddress& bd_addr);
/*******************************************************************************
*
* Function btm_sec_alloc_dev
*
* Description Look for the record in the device database for the record
* with specified address
*
* Returns Pointer to the record or NULL
*
******************************************************************************/
tBTM_SEC_DEV_REC* btm_sec_alloc_dev(const RawAddress& bd_addr);
/*******************************************************************************
*
* Function btm_dev_support_role_switch
*
* Description This function is called by the L2CAP to check if remote
* device supports role switch
*
* Parameters: bd_addr - Address of the peer device
*
* Returns true if device is known and role switch is supported
*
******************************************************************************/
bool btm_dev_support_role_switch(const RawAddress& bd_addr);
/*******************************************************************************
*
* Function btm_find_dev_by_handle
*
* Description Look for the record in the device database for the record
* with specified handle
*
* Returns Pointer to the record or NULL
*
******************************************************************************/
tBTM_SEC_DEV_REC* btm_find_dev_by_handle(uint16_t handle);
bool is_address_equal(void* data, void* context);
/*******************************************************************************
*
* Function btm_find_dev
*
* Description Look for the record in the device database for the record
* with specified BD address
*
* Returns Pointer to the record or NULL
*
******************************************************************************/
tBTM_SEC_DEV_REC* btm_find_dev(const RawAddress& bd_addr);
/*******************************************************************************
*
* Function btm_consolidate_dev
5**
* Description combine security records if identified as same peer
*
* Returns none
*
******************************************************************************/
void btm_consolidate_dev(tBTM_SEC_DEV_REC* p_target_rec);
/*******************************************************************************
*
* Function btm_find_or_alloc_dev
*
* Description Look for the record in the device database for the record
* with specified BD address
*
* Returns Pointer to the record or NULL
*
******************************************************************************/
tBTM_SEC_DEV_REC* btm_find_or_alloc_dev(const RawAddress& bd_addr);
/*******************************************************************************
*
* Function btm_sec_allocate_dev_rec
*
* Description Attempts to allocate a new device record. If we have
* exceeded the maximum number of allowable records to
* allocate, the oldest record will be deleted to make room
* for the new record.
*
* Returns Pointer to the newly allocated record
*
******************************************************************************/
tBTM_SEC_DEV_REC* btm_sec_allocate_dev_rec(void);
/*******************************************************************************
*
* Function btm_get_bond_type_dev
*
* Description Get the bond type for a device in the device database
* with specified BD address
*
* Returns The device bond type if known, otherwise BOND_TYPE_UNKNOWN
*
******************************************************************************/
tBTM_SEC_DEV_REC::tBTM_BOND_TYPE btm_get_bond_type_dev(
const RawAddress& bd_addr);
/*******************************************************************************
*
* Function btm_set_bond_type_dev
*
* Description Set the bond type for a device in the device database
* with specified BD address
*
* Returns true on success, otherwise false
*
******************************************************************************/
bool btm_set_bond_type_dev(const RawAddress& bd_addr,
tBTM_SEC_DEV_REC::tBTM_BOND_TYPE bond_type);