RootCanal: LE advertisement fixes

- Reject LE connection requests if advertising events
  are non-connectable (Core Specification v5.3,
  6.B ยง 4.4.2 Advertising state).

- Disable LE advertiser after LE connection request is received.

Test: cert/run
Change-Id: Id122ec8edd9a0fa15c0648862fe5d7055c73dcef
diff --git a/system/vendor_libs/test_vendor_lib/model/controller/le_advertiser.cc b/system/vendor_libs/test_vendor_lib/model/controller/le_advertiser.cc
index cbb4cb7..27a63fe 100644
--- a/system/vendor_libs/test_vendor_lib/model/controller/le_advertiser.cc
+++ b/system/vendor_libs/test_vendor_lib/model/controller/le_advertiser.cc
@@ -103,6 +103,11 @@
 
 bool LeAdvertiser::IsExtended() const { return extended_; }
 
+bool LeAdvertiser::IsConnectable() const {
+  return type_ != model::packets::AdvertisementType::ADV_NONCONN_IND &&
+         type_ != model::packets::AdvertisementType::ADV_SCAN_IND;
+}
+
 uint8_t LeAdvertiser::GetNumAdvertisingEvents() const { return num_events_; }
 
 std::unique_ptr<model::packets::LeAdvertisementBuilder>
diff --git a/system/vendor_libs/test_vendor_lib/model/controller/le_advertiser.h b/system/vendor_libs/test_vendor_lib/model/controller/le_advertiser.h
index f591c25..a9d14ab 100644
--- a/system/vendor_libs/test_vendor_lib/model/controller/le_advertiser.h
+++ b/system/vendor_libs/test_vendor_lib/model/controller/le_advertiser.h
@@ -71,6 +71,8 @@
 
   bool IsExtended() const;
 
+  bool IsConnectable() const;
+
   uint8_t GetNumAdvertisingEvents() const;
 
   bluetooth::hci::AddressWithType GetAddress() const;
diff --git a/system/vendor_libs/test_vendor_lib/model/controller/link_layer_controller.cc b/system/vendor_libs/test_vendor_lib/model/controller/link_layer_controller.cc
index bd13c36..b071916 100644
--- a/system/vendor_libs/test_vendor_lib/model/controller/link_layer_controller.cc
+++ b/system/vendor_libs/test_vendor_lib/model/controller/link_layer_controller.cc
@@ -1432,6 +1432,13 @@
     return;
   }
 
+  if (!advertisers_[set].IsConnectable()) {
+    LOG_INFO(
+        "Rejecting connection request from %s to non-connectable advertiser",
+        incoming.GetSourceAddress().ToString().c_str());
+    return;
+  }
+
   uint16_t handle = HandleLeConnection(
       AddressWithType(
           incoming.GetSourceAddress(),
@@ -1447,9 +1454,10 @@
       static_cast<uint8_t>(my_address.GetAddressType()));
   SendLeLinkLayerPacket(std::move(to_send));
 
+  advertisers_[set].Disable();
+
   if (advertisers_[set].IsExtended()) {
     uint8_t num_advertisements = advertisers_[set].GetNumAdvertisingEvents();
-    advertisers_[set].Disable();
     if (properties_.GetLeEventSupported(
             bluetooth::hci::SubeventCode::ADVERTISING_SET_TERMINATED)) {
       send_event_(bluetooth::hci::LeAdvertisingSetTerminatedBuilder::Create(