Merge "SecurityManager: Don't use iterator after erase()"
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