summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPyun DoHyun <dh79.pyun@samsung.com>2019-09-16 06:14:00 +0000
committerGerrit Code Review <gerrit@review.ap-northeast-2.compute.internal>2019-09-16 06:14:00 +0000
commit2c053cbe89cf2ec03b894ddc29d5666a4267a1b3 (patch)
tree3994032b382d207313734a3d2996061f51af2f87
parent515efd20780d78bc7d0c6051a65ed73b83e15e14 (diff)
parent2eb5fd42c86a3b9475f48c1f538660defbead9ae (diff)
downloadbluetooth-2c053cbe89cf2ec03b894ddc29d5666a4267a1b3.tar.gz
bluetooth-2c053cbe89cf2ec03b894ddc29d5666a4267a1b3.tar.bz2
bluetooth-2c053cbe89cf2ec03b894ddc29d5666a4267a1b3.zip
Merge "Implement new API to get le oob data" into tizen
-rw-r--r--include/bluetooth_internal.h33
-rw-r--r--src/bluetooth-adapter.c69
-rw-r--r--test/bt_unit_test.c48
-rw-r--r--test/bt_unit_test.h1
4 files changed, 147 insertions, 4 deletions
diff --git a/include/bluetooth_internal.h b/include/bluetooth_internal.h
index 1db7f4a..d1ef153 100644
--- a/include/bluetooth_internal.h
+++ b/include/bluetooth_internal.h
@@ -815,6 +815,38 @@ int bt_adapter_le_enable_privacy(bool enable_privacy);
/**
* @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Gets the Confirmation and Random value, synchronously.
+ * @since_tizen 5.5
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ *
+ * @remarks The @a local_address, confirmation and random must be released using free()
+ *
+ * @param[out] local_address Local device address
+ * @param[out] address_type Local device address type
+ * @param[out] confirmation The confirmation value
+ * @param[out] random The random value
+ * @param[out] confirmation_len The length of @a confirmation
+ * @param[out] random_len The length of @a random
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_initialize()
+ */
+int bt_adapter_le_get_local_oob_ext_data(char **local_address, bt_device_address_type_e *address_type,
+ unsigned char **confirmation, unsigned char **random,
+ int *confirmation_len, int *random_len);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
* @brief Sets the Hash and Randomizer value, synchronously for LE OOB pairing.
* @since_tizen 4.0
* @privlevel platform
@@ -844,7 +876,6 @@ int bt_adapter_le_set_remote_oob_ext_data(const char *remote_address,
const unsigned char *hash256, const unsigned char *randomizer256,
int hash256_len, int randomizer256_len);
-
/**
* @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
* @brief Set advertising filter policy to use white list
diff --git a/src/bluetooth-adapter.c b/src/bluetooth-adapter.c
index 956e8c8..bb8c1ab 100644
--- a/src/bluetooth-adapter.c
+++ b/src/bluetooth-adapter.c
@@ -1205,6 +1205,73 @@ int bt_adapter_set_remote_oob_ext_data(const char *remote_address,
}
/* LCOV_EXCL_START */
+int bt_adapter_le_get_local_oob_ext_data(char **local_address, bt_device_address_type_e *address_type,
+ unsigned char **confirmation, unsigned char **random,
+ int *confirmation_len, int *random_len)
+{
+ int ret = BT_ERROR_NONE;
+ unsigned char *eir_data = NULL;
+ unsigned char *field_data = NULL;
+ int eir_len = 0;
+ int field_len = 0;
+ bt_oob_data_t oob_data;
+
+ #define EIR_FLAGS 0x01
+ #define EIR_LE_BDADDR 0x1B
+ #define EIR_LE_ROLE 0x1C
+ #define EIR_LE_SC_CONFIRM 0x22
+ #define EIR_LE_SC_RANDOM 0x23
+
+ BT_CHECK_SUPPORTED_FEATURE(BT_FEATURE_OOB);
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(local_address);
+ BT_CHECK_INPUT_PARAMETER(address_type);
+ BT_CHECK_INPUT_PARAMETER(confirmation);
+ BT_CHECK_INPUT_PARAMETER(random);
+ BT_CHECK_INPUT_PARAMETER(confirmation_len);
+ BT_CHECK_INPUT_PARAMETER(random_len);
+
+
+ ret = _bt_get_error_code(bluetooth_le_oob_read_local_data(&oob_data));
+ if (BT_ERROR_NONE == ret) {
+ eir_data = oob_data.eir;
+ eir_len = oob_data.eir_len;
+
+ while (eir_len > 1) {
+ BT_DBG("eir_data [%02x %02x ...]", eir_data[0], eir_data[1]);
+ field_len = eir_data[0];
+ if (eir_data[1] == EIR_LE_BDADDR || eir_data[1] == EIR_LE_SC_CONFIRM || eir_data[1] == EIR_LE_SC_RANDOM) {
+ field_data = g_malloc0(sizeof(char) * field_len - 1);
+ memcpy(field_data, &eir_data[2], field_len - 1);
+
+ if (eir_data[1] == EIR_LE_BDADDR) {
+ char address[18] = { 0, };
+ snprintf(address, 18, "%02X:%02X:%02X:%02X:%02X:%02X",
+ field_data[5], field_data[4], field_data[3], field_data[2], field_data[1], field_data[0]);
+ *local_address = strdup(address);
+ *address_type = field_data[6];
+ g_free(field_data);
+ } else if (eir_data[1] == EIR_LE_SC_CONFIRM) {
+ *confirmation = field_data;
+ *confirmation_len = field_len - 1;
+ } else if (eir_data[1] == EIR_LE_SC_RANDOM) {
+ *random = field_data;
+ *random_len = field_len - 1;
+ }
+ }
+
+ eir_len = eir_len - field_len - 1;
+ eir_data += field_len + 1;
+ }
+ } else {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ }
+
+ return ret;
+}
+/* LCOV_EXCL_STOP */
+
+/* LCOV_EXCL_START */
int bt_adapter_le_set_remote_oob_ext_data(const char *remote_address,
bt_device_address_type_e address_type,
const unsigned char *hash256, const unsigned char *randomizer256,
@@ -1240,7 +1307,7 @@ int bt_adapter_le_set_remote_oob_ext_data(const char *remote_address,
addr_type = (address_type == BT_DEVICE_PUBLIC_ADDRESS) ?
BLUETOOTH_BDADDR_LE_PUBLIC : BLUETOOTH_BDADDR_LE_RANDOM;
- ret = _bt_get_error_code(bluetooth_oob_add_remote_data(&addr_hex,
+ ret = _bt_get_error_code(bluetooth_le_oob_add_remote_data(&addr_hex,
addr_type, &oob_data));
if (BT_ERROR_NONE != ret)
BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
diff --git a/test/bt_unit_test.c b/test/bt_unit_test.c
index 5259e00..ea6003e 100644
--- a/test/bt_unit_test.c
+++ b/test/bt_unit_test.c
@@ -324,6 +324,8 @@ tc_table_t tc_adapter_le[] = {
, BT_UNIT_TEST_FUNCTION_ADAPTER_LE_REMOVE_WHITE_LIST},
{"bt_adapter_le_enable_privacy"
, BT_UNIT_TEST_FUNCTION_ADAPTER_LE_ENABLE_PRIVACY},
+ {"bt_adapter_le_get_local_oob_ext_data"
+ , BT_UNIT_TEST_FUNCTION_ADAPTER_LE_GET_LOCAL_OOB_EXT_DATA},
{"bt_adapter_le_set_remote_oob_ext_data"
, BT_UNIT_TEST_FUNCTION_ADAPTER_LE_SET_REMOTE_OOB_EXT_DATA},
{"Register scan filter (Device Address)"
@@ -3457,9 +3459,22 @@ int test_set_params(int test_id, char *param)
TC_PRT("Input param(%d) type:%s", param_index + 1, param_type);
break;
case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_SET_REMOTE_OOB_EXT_DATA:
- param_count = 3;
+ param_count = 4;
param_type = BT_UNIT_TEST_PARAM_TYPE_STRING;
- TC_PRT("Input param(%d) type:%s", param_index + 1, param_type);
+ switch (param_index) {
+ case 0:
+ TC_PRT("Remote address");
+ break;
+ case 1:
+ TC_PRT("Address type (0 : Public, 1 : Random");
+ break;
+ case 2:
+ TC_PRT("confirmation");
+ break;
+ case 3:
+ TC_PRT("random");
+ break;
+ }
break;
default:
TC_PRT("There is no param to set\n");
@@ -4928,6 +4943,35 @@ int test_input_callback(void *data)
break;
}
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_GET_LOCAL_OOB_EXT_DATA: {
+ char *local_address;
+ bt_device_address_type_e address_type = 0;
+ unsigned char *confirm;
+ unsigned char *random;
+ int confirm_len;
+ int random_len;
+ int i;
+
+ bt_adapter_le_get_local_oob_ext_data(&local_address, &address_type,
+ &confirm, &random,
+ &confirm_len, &random_len);
+
+ printf("local address : %s\n", local_address);
+ printf("address type : %d\n", address_type);
+ printf("confirm : ");
+ for (i=0; i<confirm_len; i++)
+ printf("%02x", confirm[i]);
+ printf("\nrandom : ");
+ for (i=0; i<random_len; i++)
+ printf("%02x", random[i]);
+ printf("\n");
+
+ g_free(local_address);
+ g_free(confirm);
+ g_free(random);
+ break;
+ }
+
case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_SET_REMOTE_OOB_EXT_DATA: {
char remote_addr[18];
unsigned char *param_data[2];
diff --git a/test/bt_unit_test.h b/test/bt_unit_test.h
index c98f52a..4d7cf69 100644
--- a/test/bt_unit_test.h
+++ b/test/bt_unit_test.h
@@ -127,6 +127,7 @@ BT_UNIT_TEST_FUNCTION_ADAPTER_LE_SET_SCAN_TYPE,
BT_UNIT_TEST_FUNCTION_ADAPTER_LE_REMOVE_WHITE_LIST,
BT_UNIT_TEST_FUNCTION_ADAPTER_LE_CLEAR_WHITE_LIST,
BT_UNIT_TEST_FUNCTION_ADAPTER_LE_ENABLE_PRIVACY,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_LE_GET_LOCAL_OOB_EXT_DATA,
BT_UNIT_TEST_FUNCTION_ADAPTER_LE_SET_REMOTE_OOB_EXT_DATA,
BT_UNIT_TEST_FUNCTION_ADAPTER_LE_REGISTER_SCAN_FILTER_DEVICE_ADDRESS,
BT_UNIT_TEST_FUNCTION_ADAPTER_LE_REGISTER_SCAN_FILTER_SERVICE_UUID,