diff options
| author | Jessica Wagantall <jwagantall@cyngn.com> | 2016-07-07 12:32:54 -0700 |
|---|---|---|
| committer | Jessica Wagantall <jwagantall@cyngn.com> | 2016-07-07 14:16:05 -0700 |
| commit | 8c6a7c500e1a160b3fffaf1ffd5d826659fdffe5 (patch) | |
| tree | 1e95cbbabe6f2b5b2e17edf2841c7f921eff39c0 /btif | |
| parent | 2e63e65c7a558415f64a1957bd9cc060ab10f64e (diff) | |
| parent | 514139f4b40cbb035bb92f3e24d5a389d75db9e6 (diff) | |
| download | android_system_bt-8c6a7c500e1a160b3fffaf1ffd5d826659fdffe5.tar.gz android_system_bt-8c6a7c500e1a160b3fffaf1ffd5d826659fdffe5.tar.bz2 android_system_bt-8c6a7c500e1a160b3fffaf1ffd5d826659fdffe5.zip | |
Merge remote-tracking branch 'remotes/android-6.0.1_r52' into HEAD
Ticket: CYNGNOS-3020
Change-Id: I0d26ff4917b8886ca5fcc54b235bdb6afe8d8925
Diffstat (limited to 'btif')
| -rw-r--r-- | btif/include/btif_api.h | 17 | ||||
| -rw-r--r-- | btif/include/btif_storage.h | 12 | ||||
| -rw-r--r-- | btif/src/bluetooth.c | 15 | ||||
| -rw-r--r-- | btif/src/btif_config.c | 22 | ||||
| -rw-r--r-- | btif/src/btif_hh.c | 9 | ||||
| -rw-r--r-- | btif/src/btif_storage.c | 25 |
6 files changed, 97 insertions, 3 deletions
diff --git a/btif/include/btif_api.h b/btif/include/btif_api.h index bf9ee3f29..fc1b67afe 100644 --- a/btif/include/btif_api.h +++ b/btif/include/btif_api.h @@ -87,6 +87,23 @@ bt_status_t btif_shutdown_bluetooth(void); /******************************************************************************* ** +** Function is_restricted_mode +** +** Description Checks if BT was enabled in restriced mode. In restricted +** mode, bonds that are created are marked as temporary. +** These bonds persist until we leave restricted mode, at +** which point they will be deleted from the config. Also +** while in restricted mode, the user can access devices +** that are already paired before entering restricted mode, +** but they cannot remove any of these devices. +** +** Returns bool +** +*******************************************************************************/ +bool is_restricted_mode(void); + +/******************************************************************************* +** ** Function btif_get_adapter_properties ** ** Description Fetches all local adapter properties diff --git a/btif/include/btif_storage.h b/btif/include/btif_storage.h index e4d465c9f..46e4ced94 100644 --- a/btif/include/btif_storage.h +++ b/btif/include/btif_storage.h @@ -325,6 +325,18 @@ BOOLEAN btif_storage_is_fixed_pin_zeros_keyboard(bt_bdaddr_t *remote_bd_addr); /******************************************************************************* ** +** Function btif_storage_is_retricted_device +** +** Description BTIF storage API - checks if this device is a restricted device +** +** Returns TRUE if the device is labled as restricted +** FALSE otherwise +** +*******************************************************************************/ +BOOLEAN btif_storage_is_restricted_device(const bt_bdaddr_t *remote_bd_addr); + +/******************************************************************************* +** ** Function btif_storage_is_wiimote ** ** Description BTIF storage API - checks if this device is a wiimote diff --git a/btif/src/bluetooth.c b/btif/src/bluetooth.c index 8c8a6cb39..78c98ebc8 100644 --- a/btif/src/bluetooth.c +++ b/btif/src/bluetooth.c @@ -61,6 +61,7 @@ #include "osi/include/osi.h" #include "stack_manager.h" #include "btif_config.h" +#include "btif_storage.h" #include "l2cdefs.h" #include "l2c_api.h" @@ -80,6 +81,7 @@ ************************************************************************************/ bt_callbacks_t *bt_hal_cbacks = NULL; +bool restricted_mode = FALSE; /** Operating System specific callouts for resource management */ bt_os_callouts_t *bt_os_callouts = NULL; @@ -165,8 +167,10 @@ static int init(bt_callbacks_t *callbacks) { return BT_STATUS_SUCCESS; } -static int enable(void) { - LOG_INFO("%s", __func__); +static int enable(bool start_restricted) { + LOG_INFO(LOG_TAG, "%s: start restricted = %d", __func__, start_restricted); + + restricted_mode = start_restricted; if (!interface_ready()) return BT_STATUS_NOT_READY; @@ -193,6 +197,10 @@ static void ssrcleanup(void) return; } +bool is_restricted_mode() { + return restricted_mode; +} + static int get_adapter_properties(void) { /* sanity check */ @@ -303,6 +311,9 @@ static int cancel_bond(const bt_bdaddr_t *bd_addr) static int remove_bond(const bt_bdaddr_t *bd_addr) { + if (is_restricted_mode() && !btif_storage_is_restricted_device(bd_addr)) + return BT_STATUS_SUCCESS; + /* sanity check */ if (interface_ready() == FALSE) return BT_STATUS_NOT_READY; diff --git a/btif/src/btif_config.c b/btif/src/btif_config.c index 39f4bbcaf..3c05812fb 100644 --- a/btif/src/btif_config.c +++ b/btif/src/btif_config.c @@ -28,6 +28,7 @@ #include "osi/include/allocator.h" #include "btcore/include/bdaddr.h" #include "btif_common.h" +#include "btif_api.h" #include "btif_config.h" #include "btif_config_transcode.h" #include "btif_util.h" @@ -47,6 +48,7 @@ static const period_ms_t CONFIG_SETTLE_PERIOD_MS = 3000; static void timer_config_save_cb(void *data); static void btif_config_write(UINT16 event, char *p_param); static void btif_config_remove_unpaired(config_t *config); +static void btif_config_remove_restricted(config_t *config); // TODO(zachoverflow): Move these two functions out, because they are too specific for this file // {grumpy-cat/no, monty-python/you-make-me-sad} @@ -113,6 +115,10 @@ static future_t *init(void) { btif_config_remove_unpaired(config); + // Cleanup temporary pairings if we have left guest mode + if (!is_restricted_mode()) + btif_config_remove_restricted(config); + // TODO(sharvil): use a non-wake alarm for this once we have // API support for it. There's no need to wake the system to // write back to disk. @@ -427,3 +433,19 @@ static void btif_config_remove_unpaired(config_t *conf) { snode = config_section_next(snode); } } + +static void btif_config_remove_restricted(config_t* config) { + assert(config != NULL); + + pthread_mutex_lock(&lock); + const config_section_node_t *snode = config_section_begin(config); + while (snode != config_section_end(config)) { + const char *section = config_section_name(snode); + if (string_is_bdaddr(section) && config_has_key(config, section, "Restricted")) { + BTIF_TRACE_DEBUG("%s: Removing restricted device %s", __func__, section); + config_remove_section(config, section); + } + snode = config_section_next(snode); + } + pthread_mutex_unlock(&lock); +} diff --git a/btif/src/btif_hh.c b/btif/src/btif_hh.c index 8188942b5..88e767a91 100644 --- a/btif/src/btif_hh.c +++ b/btif/src/btif_hh.c @@ -33,6 +33,8 @@ #define LOG_TAG "bt_btif_hh" +#include <cutils/log.h> + #include "bta_api.h" #include "bta_hh_api.h" #include "btif_storage.h" @@ -257,7 +259,12 @@ static void toggle_os_keylockstates(int fd, int changedlockstates) *******************************************************************************/ static BT_HDR *create_pbuf(UINT16 len, UINT8 *data) { - BT_HDR* p_buf = GKI_getbuf((UINT16) (len + BTA_HH_MIN_OFFSET + sizeof(BT_HDR))); + UINT16 buflen = (UINT16) (len + BTA_HH_MIN_OFFSET + sizeof(BT_HDR)); + if (buflen < len) { + android_errorWriteWithInfoLog(0x534e4554, "28672558", -1, NULL, 0); + return NULL; + } + BT_HDR* p_buf = GKI_getbuf(buflen); if (p_buf) { UINT8* pbuf_data; diff --git a/btif/src/btif_storage.c b/btif/src/btif_storage.c index 895631194..4dfe27625 100644 --- a/btif/src/btif_storage.c +++ b/btif/src/btif_storage.c @@ -833,6 +833,13 @@ bt_status_t btif_storage_add_bonded_device(bt_bdaddr_t *remote_bd_addr, int ret = btif_config_set_int(bdstr, "LinkKeyType", (int)key_type); ret &= btif_config_set_int(bdstr, "PinLength", (int)pin_length); ret &= btif_config_set_bin(bdstr, "LinkKey", link_key, sizeof(LINK_KEY)); + + if (is_restricted_mode()) { + BTIF_TRACE_WARNING("%s: '%s' pairing will be removed if unrestricted", + __func__, bdstr); + btif_config_set_int(bdstr, "Restricted", 1); + } + /* write bonded info immediately */ btif_config_flush(); return ret ? BT_STATUS_SUCCESS : BT_STATUS_FAIL; @@ -1726,6 +1733,24 @@ BOOLEAN btif_storage_is_fixed_pin_zeros_keyboard(bt_bdaddr_t *remote_bd_addr) } +/******************************************************************************* +** +** Function btif_storage_is_restricted_device +** +** Description BTIF storage API - checks if this device is a restricted device +** +** Returns TRUE if the device is labeled as restricted +** FALSE otherwise +** +*******************************************************************************/ +BOOLEAN btif_storage_is_restricted_device(const bt_bdaddr_t *remote_bd_addr) +{ + bdstr_t bdstr; + bdaddr_to_string(remote_bd_addr, bdstr, sizeof(bdstr)); + + return btif_config_exist(bdstr, "Restricted"); +} + static const char *wii_names[4] = { "Nintendo RVL-CNT-01", /* 1st gen */ "Nintendo RVL-CNT-01-TR", /* 2nd gen */ |
