commit 87a42d2c82a529e57d9f24f11625327ec8a5464e
parent ebe799c390e5b78cf5692f1d988d8ce6ded0c40b
Author: Daniel Barlow <dan@telent.net>
Date: Sat, 27 Dec 2025 20:54:51 +0000
(unused) method to determin additional records in response
Diffstat:
1 file changed, 25 insertions(+), 3 deletions(-)
diff --git a/ecu-esp32/src/wifi.rs b/ecu-esp32/src/wifi.rs
@@ -38,6 +38,7 @@ use esp_radio::{
use log::{info,error};
+const DISCOVERY_NAME : &str = "_services._dns-sd._udp.local";
use dns_protocol::{Message, Question,
MessageType,
@@ -67,6 +68,7 @@ const CACHE_FLUSH : u16 = 1<<15;
// our needs because it doesn't own its "data" attribute - it's just a
// reference. So we need structures that can own the data
+#[derive(Clone)]
enum RData {
Raw(Vec<u8>),
Srv { target: String, port: u16, priority: u16, weight: u16 },
@@ -183,7 +185,7 @@ impl DnsDatabase {
RData::Ptr("Bike._keihin._udp.local".into())
),
DnsResource::new(
- "_services._dns-sd._udp.local",
+ DISCOVERY_NAME,
ResourceType::Ptr,
RData::Ptr("_keihin._udp.local".into())
)
@@ -194,11 +196,27 @@ impl DnsDatabase {
fn find<'a>(&self, name: String, ty: ResourceType) -> Vec<&DnsResource> {
let results : Vec<&DnsResource> =
self.records.iter().filter( |r|
- ((ty == ResourceType::Wildcard) || (r.ty == ty)) &&
- dotted_name == r.name
+ ((ty == ResourceType::Wildcard) || (r.ty == ty)) &&
+ name == r.name
).collect();
results
}
+
+ fn additional(&self, r: DnsResource) -> Vec<&DnsResource> {
+ match r.data {
+ RData::Srv { target, port:_, priority:_, weight:_ } => {
+ self.find(target, ResourceType::Wildcard)
+ },
+ RData::Ptr(name) => {
+ if r.name.eq(DISCOVERY_NAME) {
+ Vec::from([])
+ } else {
+ self.find(name, ResourceType::Wildcard)
+ }
+ },
+ _ => Vec::from([])
+ }
+ }
}
@@ -217,6 +235,10 @@ async fn send_response(sock: &UdpSocket<'_>,
None => &mut [][..]
};
+ // log::info!("can send {:?} {:?}",
+ // r.name, r.ty);
+
+
let mut flags = Flags::new();
flags.set_qr(MessageType::Reply);