From 825698198e6efcea06e6bd1010ff364436f1285c Mon Sep 17 00:00:00 2001 From: Han Xu Date: Wed, 31 Dec 2025 09:03:20 -0800 Subject: [PATCH] exmaples: add --verify option in the query example --- examples/query.rs | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/examples/query.rs b/examples/query.rs index bb50972..fd43766 100644 --- a/examples/query.rs +++ b/examples/query.rs @@ -27,6 +27,12 @@ fn main() { }; service_type.push_str(".local."); + // Showcase `verify` functionality for IPv4 addresses + let should_verify = match std::env::args().nth(2) { + Some(arg) if arg == "--verify" => true, + _ => false, + }; + // Create a daemon let mdns = ServiceDaemon::new().expect("Failed to create daemon"); @@ -44,12 +50,35 @@ fn main() { info.host, info.port, ); + let mut found_ipv4 = false; for addr in info.addresses.iter() { println!(" Address: {addr}"); + if addr.is_ipv4() { + found_ipv4 = true; + } } for prop in info.txt_properties.iter() { println!(" Property: {}", prop); } + + if should_verify && found_ipv4 { + println!("Will verify after 3 seconds..."); + std::thread::sleep(std::time::Duration::from_secs(3)); + + let instance_fullname = info.fullname; + let timeout = std::time::Duration::from_secs(2); + if let Err(e) = mdns.verify(instance_fullname, timeout) { + println!("Verify failed: {}", e); + } else { + println!("Verify started"); + } + } + } + ServiceEvent::ServiceRemoved(service_type, fullname) => { + println!( + "At {:?}: ** service removed **: {service_type}: {fullname}", + now.elapsed(), + ); } other_event => { println!("At {:?}: {:?}", now.elapsed(), &other_event); @@ -59,10 +88,13 @@ fn main() { } fn print_usage() { - println!("Usage: cargo run --example query "); + println!("Usage: cargo run --example query [--verify]"); println!("Example: "); println!("cargo run --example query _my-service._udp"); println!(); + println!("Options:"); + println!("--verify: make the client attempt to verify IPv4 addresses of resolved services."); + println!(); println!("You can also do a meta-query per RFC 6763 to find which services are available:"); println!("cargo run --example query _services._dns-sd._udp"); }