eculocate

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

commit 3938a28c7664b83e81f64f47a2cc8ed6f586f9f7
parent 1cbb935e51269ee6d864af59046cefa82419b4c8
Author: Daniel Barlow <dan@telent.net>
Date:   Sat, 27 Dec 2025 21:28:38 +0000

send multiple answer RRs in same response

instead of one response per answer

Diffstat:
Mecu-esp32/src/wifi.rs | 21+++++++++++++--------
1 file changed, 13 insertions(+), 8 deletions(-)

diff --git a/ecu-esp32/src/wifi.rs b/ecu-esp32/src/wifi.rs @@ -211,7 +211,7 @@ async fn send_response(sock: &UdpSocket<'_>, id: u16, endpoint: IpEndpoint, question: Option<&Question<'_>>, - answer: ResourceRecord<'_>) { + answers: Vec<&DnsResource>) { let questions = match question { Some(q) =>&mut [*q][..], @@ -219,10 +219,18 @@ async fn send_response(sock: &UdpSocket<'_>, }; let mut flags = Flags::new(); - let mut answers = [answer]; + flags.set_qr(MessageType::Reply); flags.set_authoritative(true); + let mut answers : Vec<ResourceRecord> = { + let mut rrs = Vec::new(); + for a in answers { + rrs.push(a.to_resource_record()); + } + rrs + }; + let message = Message::new( id, flags, @@ -261,17 +269,14 @@ async fn send_responses(sock: &UdpSocket<'_>, // it's ok to do this for legacy queries but they probably // don't have multiple questions anyway for q in message.questions() { - let relevant = db.find(q.name(), q.ty()); - for r in relevant { + let relevant = db.find(q.name().to_string(), q.ty()); + if relevant.len() > 0 { log::info!("question {:?} {:?} {:?} flags {:?} from {:?}", q.name(), q.ty(), q.class(), message.flags().raw(), meta.endpoint); - log::info!("can send {:?} {:?}", - r.name, r.ty); - send_response(&sock, q_id, MDNS_ENDPOINT, None, - r.to_resource_record()).await + send_response(&sock, q_id, MDNS_ENDPOINT, None, relevant).await }