BLE OOB Pairing - parse address type (3/5)

When address type is not parsed, creating bond to devices not using
random address is impossible.

Bug: 32780409
Test: try pairing with nRF52DK using random address
Change-Id: Ifae63995e5ffb3a5071d0c993a0e15c0b6e8a7eb
(cherry picked from commit 33d233cc3a1be101258f7ab3a11fe186300ddf47)
diff --git a/jni/com_android_bluetooth_btservice_AdapterService.cpp b/jni/com_android_bluetooth_btservice_AdapterService.cpp
index bba1ba4..278f4a3 100755
--- a/jni/com_android_bluetooth_btservice_AdapterService.cpp
+++ b/jni/com_android_bluetooth_btservice_AdapterService.cpp
@@ -30,7 +30,8 @@
 #include <fcntl.h>
 
 namespace android {
-
+// OOB_LE_BD_ADDR_SIZE is 6 bytes addres + 1 byte address type
+#define OOB_LE_BD_ADDR_SIZE 7
 #define OOB_TK_SIZE 16
 #define OOB_LE_SC_C_SIZE 16
 #define OOB_LE_SC_R_SIZE 16
@@ -838,13 +839,28 @@
         return result;
     }
 
+    jbyte* leBtDeviceAddressBytes = NULL;
     jbyte* smTKBytes = NULL;
     jbyte* leScCBytes = NULL;
     jbyte* leScRBytes = NULL;
+    jbyteArray leBtDeviceAddress = NULL;
+    jbyteArray smTK = NULL;
     jbyteArray leScC = NULL;
     jbyteArray leScR = NULL;
 
-    jbyteArray smTK = callByteArrayGetter(env, oobData, "android/bluetooth/OobData", "getSecurityManagerTk");
+    leBtDeviceAddress = callByteArrayGetter(env, oobData, "android/bluetooth/OobData", "getLeBluetoothDeviceAddress");
+    if (leBtDeviceAddress != NULL) {
+        leBtDeviceAddressBytes = env->GetByteArrayElements(leBtDeviceAddress, NULL);
+        int len = env->GetArrayLength(leBtDeviceAddress);
+        if (len != OOB_LE_BD_ADDR_SIZE) {
+            ALOGI("%s: wrong length of leBtDeviceAddress, should be empty or %d bytes.", __func__, OOB_LE_BD_ADDR_SIZE);
+            jniThrowIOException(env, EINVAL);
+            goto done;
+        }
+        memcpy(oob_data.le_bt_dev_addr, leBtDeviceAddressBytes, len);
+    }
+
+    smTK = callByteArrayGetter(env, oobData, "android/bluetooth/OobData", "getSecurityManagerTk");
     if (smTK != NULL) {
         smTKBytes = env->GetByteArrayElements(smTK, NULL);
         int len = env->GetArrayLength(smTK);
@@ -891,6 +907,9 @@
 done:
     env->ReleaseByteArrayElements(address, addr, 0);
 
+    if (leBtDeviceAddress != NULL)
+        env->ReleaseByteArrayElements(leBtDeviceAddress, leBtDeviceAddressBytes, 0);
+
     if (smTK != NULL)
         env->ReleaseByteArrayElements(smTK, smTKBytes, 0);