OSDN Git Service

Handling of incoming AVRCP Controller connections
authorJoseph Pirozzo <pirozzoj@google.com>
Thu, 2 May 2019 23:45:03 +0000 (16:45 -0700)
committerJoseph Pirozzo <pirozzoj@google.com>
Tue, 7 May 2019 16:26:53 +0000 (09:26 -0700)
Resolve edge cases on incoming AVRCP Controllers Remote Controller
cases, both caused the remote control component to either generate an
out of bounds error or fail to update peer features.

Test: receive incoming AVRCP connection
Bug: 130750865
Change-Id: I15abd2fd4bc963889d6cdfe9364a651e2b4c3c10
Merged-In: I15abd2fd4bc963889d6cdfe9364a651e2b4c3c10

bta/av/bta_av_act.cc
btif/src/btif_av.cc

index ead7e29..a727842 100644 (file)
@@ -1873,9 +1873,9 @@ void bta_av_rc_disc_done(UNUSED_ATTR tBTA_AV_DATA* p_data) {
       /*
        * In case scb is not created by the time we are done with SDP
        * we still need to send RC feature event. So we need to get BD
-       * from Message
+       * from Message.  Note that lidx is 1 based not 0 based
        */
-      rc_feat.peer_addr = p_cb->lcb[p_cb->rcb[rc_handle].lidx].addr;
+      rc_feat.peer_addr = p_cb->lcb[p_cb->rcb[rc_handle].lidx - 1].addr;
     } else {
       rc_feat.peer_addr = p_scb->PeerAddress();
     }
index 3659534..24e32ec 100644 (file)
@@ -1244,6 +1244,9 @@ BtifAvPeer* BtifAvSink::FindOrCreatePeer(const RawAddress& peer_address,
   peer = new BtifAvPeer(peer_address, AVDT_TSEP_SRC, bta_handle, peer_id);
   peers_.insert(std::make_pair(peer_address, peer));
   peer->Init();
+  if (active_peer_.IsEmpty()) {
+    active_peer_ = peer_address;
+  }
   return peer;
 }