commit 5cb10f9383dc526421c14b0a962a25f761105ddd
parent d1acb4b7f2e87ff6cb03d038fbde5aeb583c6861
Author: Daniel Barlow <dan@telent.net>
Date: Sun, 28 Dec 2025 17:56:07 +0000
deduplicate additional records
Diffstat:
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/ecu-esp32/src/wifi.rs b/ecu-esp32/src/wifi.rs
@@ -5,6 +5,7 @@
use alloc::vec;
use alloc::vec::Vec;
use alloc::string::String;
+use alloc::collections::BTreeSet;
use crate::alloc::string::ToString;
use embassy_executor::Spawner;
@@ -258,18 +259,24 @@ async fn send_response(sock: &UdpSocket<'_>,
flags.set_qr(MessageType::Reply);
flags.set_authoritative(true);
- let mut additional : Vec<ResourceRecord> = Vec::new();
+ let mut additional : BTreeSet<ResourceRecord> = BTreeSet::new();
let mut answers : Vec<ResourceRecord> = {
let mut rrs = Vec::new();
for a in answers {
rrs.push(a.to_resource_record());
for r in db.all_additional(a).into_iter() {
- additional.push(r.to_resource_record());
+ additional.insert(r.to_resource_record());
};
}
rrs
};
+ // don't send anything in "additional" that's already in the answers
+ for rr in &answers {
+ additional.remove(&rr);
+ }
+
+ let mut additional : Vec<ResourceRecord> = additional.into_iter().collect();
let message = Message::new(
id,
flags,