Merge "cert: Use the Mobly TestRunConfig"
diff --git a/gd/Android.bp b/gd/Android.bp
index 46108c6..9145772 100644
--- a/gd/Android.bp
+++ b/gd/Android.bp
@@ -618,13 +618,12 @@
allow_undefined_symbols: true,
}
-cc_library{
+cc_library_host_shared{
name: "bluetooth_packets_python3",
defaults: [
"gd_defaults",
"bluetooth_py3_native_extension_defaults"
],
- host_supported: true,
srcs: [
"packet/python3_module.cc",
"l2cap/fcs.cc",
diff --git a/gd/hci/hci_packets.pdl b/gd/hci/hci_packets.pdl
index e3ee19e..da4b9cd 100644
--- a/gd/hci/hci_packets.pdl
+++ b/gd/hci/hci_packets.pdl
@@ -2276,7 +2276,7 @@
packet LeSetAdvertisingData : LeAdvertisingCommand (op_code = LE_SET_ADVERTISING_DATA) {
_size_(advertising_data) : 8,
advertising_data : GapData[],
- _padding_[31], // Zero padding to 31 bytes of advertising_data
+ _padding_[35], // Zero padding to 31 bytes of advertising_data + 1 size + 2 opcode + 1 total_size
}
packet LeSetAdvertisingDataComplete : CommandComplete (command_op_code = LE_SET_ADVERTISING_DATA) {
@@ -2286,7 +2286,7 @@
packet LeSetScanResponseData : LeAdvertisingCommand (op_code = LE_SET_SCAN_RESPONSE_DATA) {
_size_(advertising_data) : 8,
advertising_data : GapData[],
- _padding_[31], // Zero padding to 31 bytes of advertising_data
+ _padding_[35], // Zero padding to 31 bytes of advertising_data + 1 size + 2 opcode + 1 total_size
}
packet LeSetScanResponseDataComplete : CommandComplete (command_op_code = LE_SET_SCAN_RESPONSE_DATA) {
@@ -3016,7 +3016,7 @@
packet LeMultiAdvtSetData : LeMultiAdvt (sub_cmd = SET_DATA) {
_size_(advertising_data) : 8,
advertising_data : GapData[],
- _padding_[31], // Zero padding to 31 bytes of advertising_data
+ _padding_[36], // Zero padding to 31 bytes of advertising_data + 1 size + 2 opcode + 1 total_size + 1 set
advertising_instance : 8,
}
@@ -3026,7 +3026,7 @@
packet LeMultiAdvtSetScanResp : LeMultiAdvt (sub_cmd = SET_SCAN_RESP) {
_size_(advertising_data) : 8,
advertising_data : GapData[],
- _padding_[31], // Zero padding to 31 bytes of advertising_data
+ _padding_[36], // Zero padding to 31 bytes of advertising_data + 1 size + 2 opcode + 1 total_size + 1 set
advertising_instance : 8,
}
diff --git a/gd/hci/hci_packets_test.cc b/gd/hci/hci_packets_test.cc
index 48a929c..7876f21 100644
--- a/gd/hci/hci_packets_test.cc
+++ b/gd/hci/hci_packets_test.cc
@@ -594,5 +594,81 @@
DEFINE_AND_INSTANTIATE_LeSetExtendedAdvertisingEnableCompleteReflectionTest(
le_set_extended_advertising_enable_complete);
+TEST(HciPacketsTest, testLeSetAdvertisingDataBuilderLength) {
+ GapData gap_data;
+ gap_data.data_type_ = GapDataType::COMPLETE_LOCAL_NAME;
+ gap_data.data_ = std::vector<uint8_t>({'A', ' ', 'g', 'o', 'o', 'd', ' ', 'n', 'a', 'm', 'e'});
+ auto builder = LeSetAdvertisingDataBuilder::Create({gap_data});
+ ASSERT_EQ(2 /*opcode*/ + 1 /* parameter size */ + 1 /* data_length */ + 31 /* data */, builder->size());
+
+ auto packet_bytes = std::make_shared<std::vector<uint8_t>>();
+ packet_bytes->reserve(builder->size());
+ BitInserter bit_inserter(*packet_bytes);
+ builder->Serialize(bit_inserter);
+ auto command_view = LeAdvertisingCommandView::Create(CommandPacketView::Create(packet_bytes));
+ ASSERT(command_view.IsValid());
+ ASSERT_EQ(1 /* data_length */ + 31 /* data */, command_view.GetPayload().size());
+ auto view = LeSetAdvertisingDataView::Create(command_view);
+ ASSERT(view.IsValid());
+}
+
+TEST(HciPacketsTest, testLeSetScanResponseDataBuilderLength) {
+ GapData gap_data;
+ gap_data.data_type_ = GapDataType::COMPLETE_LOCAL_NAME;
+ gap_data.data_ = std::vector<uint8_t>({'A', ' ', 'g', 'o', 'o', 'd', ' ', 'n', 'a', 'm', 'e'});
+ auto builder = LeSetScanResponseDataBuilder::Create({gap_data});
+ ASSERT_EQ(2 /*opcode*/ + 1 /* parameter size */ + 1 /*data_length */ + 31 /* data */, builder->size());
+
+ auto packet_bytes = std::make_shared<std::vector<uint8_t>>();
+ packet_bytes->reserve(builder->size());
+ BitInserter bit_inserter(*packet_bytes);
+ builder->Serialize(bit_inserter);
+ auto command_view = LeAdvertisingCommandView::Create(CommandPacketView::Create(packet_bytes));
+ ASSERT(command_view.IsValid());
+ ASSERT_EQ(1 /* data_length */ + 31 /* data */, command_view.GetPayload().size());
+ auto view = LeSetScanResponseDataView::Create(command_view);
+ ASSERT(view.IsValid());
+}
+
+TEST(HciPacketsTest, testLeMultiAdvSetAdvertisingDataBuilderLength) {
+ GapData gap_data;
+ gap_data.data_type_ = GapDataType::COMPLETE_LOCAL_NAME;
+ gap_data.data_ = std::vector<uint8_t>({'A', ' ', 'g', 'o', 'o', 'd', ' ', 'n', 'a', 'm', 'e'});
+ uint8_t set = 3;
+ auto builder = LeMultiAdvtSetDataBuilder::Create({gap_data}, set);
+ ASSERT_EQ(2 /*opcode*/ + 1 /* parameter size */ + 1 /* data_length */ + 31 /* data */ + 1 /* set */, builder->size());
+
+ auto packet_bytes = std::make_shared<std::vector<uint8_t>>();
+ packet_bytes->reserve(builder->size());
+ BitInserter bit_inserter(*packet_bytes);
+ builder->Serialize(bit_inserter);
+ auto command_view =
+ LeMultiAdvtView::Create(LeAdvertisingCommandView::Create(CommandPacketView::Create(packet_bytes)));
+ ASSERT(command_view.IsValid());
+ EXPECT_EQ(1 /* data_length */ + 31 /* data */ + 1 /* set */, command_view.GetPayload().size());
+ auto view = LeMultiAdvtSetDataView::Create(command_view);
+ ASSERT(view.IsValid());
+}
+
+TEST(HciPacketsTest, testLeMultiAdvSetScanResponseDataBuilderLength) {
+ GapData gap_data;
+ gap_data.data_type_ = GapDataType::COMPLETE_LOCAL_NAME;
+ gap_data.data_ = std::vector<uint8_t>({'A', ' ', 'g', 'o', 'o', 'd', ' ', 'n', 'a', 'm', 'e'});
+ uint8_t set = 3;
+ auto builder = LeMultiAdvtSetScanRespBuilder::Create({gap_data}, set);
+ EXPECT_EQ(2 /*opcode*/ + 1 /* parameter size */ + 1 /*data_length */ + 31 /* data */ + 1 /* set */, builder->size());
+
+ auto packet_bytes = std::make_shared<std::vector<uint8_t>>();
+ packet_bytes->reserve(builder->size());
+ BitInserter bit_inserter(*packet_bytes);
+ builder->Serialize(bit_inserter);
+ auto command_view =
+ LeMultiAdvtView::Create(LeAdvertisingCommandView::Create(CommandPacketView::Create(packet_bytes)));
+ ASSERT(command_view.IsValid());
+ ASSERT_EQ(1 /* data_length */ + 31 /* data */ + 1 /* set */, command_view.GetPayload().size());
+ auto view = LeMultiAdvtSetScanRespView::Create(command_view);
+ ASSERT(view.IsValid());
+}
+
} // namespace hci
} // namespace bluetooth
diff --git a/gd/security/internal/security_manager_impl.cc b/gd/security/internal/security_manager_impl.cc
index 92556c3..cfda51f 100644
--- a/gd/security/internal/security_manager_impl.cc
+++ b/gd/security/internal/security_manager_impl.cc
@@ -92,8 +92,9 @@
void SecurityManagerImpl::CancelBond(hci::AddressWithType device) {
auto entry = pairing_handler_map_.find(device.GetAddress());
if (entry != pairing_handler_map_.end()) {
+ auto cancel_me = entry->second;
pairing_handler_map_.erase(entry);
- entry->second->Cancel();
+ cancel_me->Cancel();
}
}
@@ -156,17 +157,19 @@
if (entry != pairing_handler_map_.end()) {
entry->second->OnReceive(packet);
} else {
+ auto bd_addr = packet.GetBdAddr();
+ auto event_code = packet.GetEventCode();
auto event = hci::EventPacketView::Create(std::move(packet));
ASSERT_LOG(event.IsValid(), "Received invalid packet");
const hci::EventCode code = event.GetEventCode();
- auto record = CreateSecurityRecord(packet.GetBdAddr());
+ auto record = CreateSecurityRecord(bd_addr);
switch (code) {
case hci::EventCode::LINK_KEY_REQUEST:
DispatchPairingHandler(record, true);
break;
default:
- LOG_ERROR("No classic pairing handler for device '%s' ready for command '%hhx' ",
- packet.GetBdAddr().ToString().c_str(), packet.GetEventCode());
+ LOG_ERROR("No classic pairing handler for device '%s' ready for command '%hhx' ", bd_addr.ToString().c_str(),
+ event_code);
break;
}
}