eculocate

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

commit 2b4563d544a07d9ef1a94223d3ca57f6a82c4a3a
parent 9a7ac15017b1e2d139ad1ebbb984cd2ef89fbfb2
Author: Daniel Barlow <dan@telent.net>
Date:   Mon, 29 Dec 2025 11:50:28 +0000

extract MdnsResponder struct

Diffstat:
Mecu-esp32/src/wifi.rs | 72+++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------
1 file changed, 53 insertions(+), 19 deletions(-)

diff --git a/ecu-esp32/src/wifi.rs b/ecu-esp32/src/wifi.rs @@ -14,7 +14,8 @@ use embassy_net::{ StackResources, udp::{PacketMetadata, UdpSocket, UdpMetadata}, IpAddress, - IpEndpoint + IpEndpoint, + Stack }; use embassy_time::{Duration, Timer}; @@ -65,6 +66,45 @@ const MDNS_ENDPOINT: IpEndpoint = IpEndpoint::new(MDNS_IP, MDNS_PORT); const CACHE_FLUSH : u16 = 1<<15; +struct MdnsResponder<'a> { + sock : UdpSocket<'a>, + database : DnsDatabase, +} + +impl<'a> MdnsResponder<'a> { + fn new(stack : Stack<'a>, + rx_meta : &'a mut [PacketMetadata], + rx_buffer : &'a mut [u8], + tx_meta : &'a mut [PacketMetadata], + tx_buffer : &'a mut [u8], + my_address: [u8;4]) -> MdnsResponder<'a> { + + + let mut sock = UdpSocket::new( + stack, + rx_meta, + rx_buffer, + tx_meta, + tx_buffer, + ); + sock.set_hop_limit(Some(255)); + log::info!("sock.bind(5353) res: {:?}", sock.bind(MDNS_PORT)); + log::info!( + "multicast_res: {:?}", + stack.join_multicast_group(MDNS_IP) + ); + + Self { + sock, + database: DnsDatabase::create(&my_address), + } + } + fn sock(&self) -> &UdpSocket<'a> { + &self.sock + } +} + + // dns_protocol's ResourceRecord doesn't make a good representation for // our needs because it doesn't own its "data" attribute - it's just a // reference. So we need structures that can own the data @@ -374,8 +414,6 @@ pub async fn start_wifi(spawner: &Spawner, spawner.spawn(connection(controller)).ok(); spawner.spawn(net_task(runner)).ok(); - let mut rx_buffer = [0; 4096]; - let mut tx_buffer = [0; 4096]; let my_address; loop { @@ -395,29 +433,25 @@ pub async fn start_wifi(spawner: &Spawner, Timer::after(Duration::from_millis(500)).await; } + let mut rx_buffer = [0u8; 4096]; + let mut tx_buffer = [0u8; 4096]; let mut rx_meta = [PacketMetadata::EMPTY; 512]; let mut tx_meta = [PacketMetadata::EMPTY; 512]; - let mut sock = UdpSocket::new( - stack, - &mut rx_meta, - &mut rx_buffer, - &mut tx_meta, - &mut tx_buffer, - ); - sock.set_hop_limit(Some(255)); - - log::info!("sock.bind(5353) res: {:?}", sock.bind(MDNS_PORT)); - log::info!( - "multicast_res: {:?}", - stack.join_multicast_group(MDNS_IP) - ); + let mdns_responder = MdnsResponder::new( + stack, + &mut rx_meta, + &mut rx_buffer, + &mut tx_meta, + &mut tx_buffer, + my_address); let mut data_buf = [0; 4096]; - let dns_db = DnsDatabase::create(&my_address); + let dns_db = &mdns_responder.database; + let sock = mdns_responder.sock(); - send_response(&sock, 0, MDNS_ENDPOINT, &dns_db, None, dns_db.advertised()).await; + send_response(&sock, 0, MDNS_ENDPOINT, dns_db, None, dns_db.advertised()).await; loop { if sock.may_recv() {