Repository: incubator-mynewt-core
Updated Branches:
  refs/heads/develop 8c891bed0 -> b256be023


we also need to keep the peers RPA in case we do a pairing with that address 
while
using resolvable private addresses


Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/commit/b256be02
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/b256be02
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/b256be02

Branch: refs/heads/develop
Commit: b256be023b94dab2dfaee0ae3eeba674e6b24321
Parents: 8c891be
Author: Paul Dietrich <paulfdietr...@yahoo.com>
Authored: Fri Jun 3 14:49:54 2016 -0700
Committer: Paul Dietrich <paulfdietr...@yahoo.com>
Committed: Fri Jun 3 14:49:54 2016 -0700

----------------------------------------------------------------------
 net/nimble/host/src/ble_gap.c          |  1 +
 net/nimble/host/src/ble_hs_conn_priv.h |  1 +
 net/nimble/host/src/ble_l2cap_sm.c     | 25 +++++++++++++++++++++----
 3 files changed, 23 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/b256be02/net/nimble/host/src/ble_gap.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_gap.c b/net/nimble/host/src/ble_gap.c
index fc12d79..3834346 100644
--- a/net/nimble/host/src/ble_gap.c
+++ b/net/nimble/host/src/ble_gap.c
@@ -899,6 +899,7 @@ ble_gap_rx_conn_complete(struct hci_le_conn_complete *evt)
     memcpy(conn->bhc_addr, evt->peer_addr, sizeof conn->bhc_addr);
     conn->bhc_addr_type = evt->peer_addr_type;
     memcpy(conn->our_rpa_addr, evt->local_rpa, sizeof(conn->our_rpa_addr));
+    memcpy(conn->peer_rpa_addr, evt->peer_rpa, sizeof(conn->peer_rpa_addr));
     conn->bhc_itvl = evt->conn_itvl;
     conn->bhc_latency = evt->conn_latency;
     conn->bhc_supervision_timeout = evt->supervision_timeout;

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/b256be02/net/nimble/host/src/ble_hs_conn_priv.h
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_hs_conn_priv.h 
b/net/nimble/host/src/ble_hs_conn_priv.h
index 90c32e5..963b200 100644
--- a/net/nimble/host/src/ble_hs_conn_priv.h
+++ b/net/nimble/host/src/ble_hs_conn_priv.h
@@ -40,6 +40,7 @@ struct ble_hs_conn {
     uint8_t our_addr_type;
     uint8_t bhc_addr[6];
     uint8_t our_rpa_addr[6];
+    uint8_t peer_rpa_addr[6];
 
     uint16_t bhc_itvl;
     uint16_t bhc_latency;

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/b256be02/net/nimble/host/src/ble_l2cap_sm.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_l2cap_sm.c 
b/net/nimble/host/src/ble_l2cap_sm.c
index fa9e2e3..5aba968 100644
--- a/net/nimble/host/src/ble_l2cap_sm.c
+++ b/net/nimble/host/src/ble_l2cap_sm.c
@@ -973,6 +973,8 @@ ble_l2cap_sm_confirm_prepare_args(struct ble_l2cap_sm_proc 
*proc,
     struct ble_hs_conn *conn;
     uint8_t our_addr[6];
     uint8_t our_addr_type;
+    uint8_t peer_addr[6];
+    uint8_t peer_addr_type;
 
     BLE_HS_DBG_ASSERT(ble_hs_thread_safe());
 
@@ -1010,16 +1012,31 @@ ble_l2cap_sm_confirm_prepare_args(struct 
ble_l2cap_sm_proc *proc,
                 break;
         }
 
+        peer_addr_type = (conn->bhc_addr_type ? 1 : 0);
+        switch(conn->bhc_addr_type) {
+            case BLE_ADDR_TYPE_PUBLIC:
+                memcpy(peer_addr, conn->bhc_addr, 6);
+                break;
+            case BLE_ADDR_TYPE_RANDOM:
+                memcpy(peer_addr, conn->bhc_addr, 6);
+                break;
+            case BLE_ADDR_TYPE_RPA_RND_DEFAULT:
+            case BLE_ADDR_TYPE_RPA_PUB_DEFAULT:
+                memcpy(peer_addr, conn->peer_rpa_addr, 6);
+                break;
+
+        }
+
         if (proc->flags & BLE_L2CAP_SM_PROC_F_INITIATOR) {
             memcpy(ia, our_addr, 6);
             *iat = our_addr_type;
-            *rat = (conn->bhc_addr_type ? 1 : 0);
-            memcpy(ra, conn->bhc_addr, 6);
+            *rat = peer_addr_type;
+            memcpy(ra, peer_addr, 6);
         } else {
             memcpy(ra, our_addr, 6);
             *rat = our_addr_type;
-            *iat = (conn->bhc_addr_type ? 1 : 0);
-            memcpy(ia, conn->bhc_addr, 6);
+            *iat = peer_addr_type;
+            memcpy(ia, peer_addr, 6);
         }
     }
 

Reply via email to