From: Matt Corallo Date: Wed, 2 Oct 2024 18:21:33 +0000 (+0000) Subject: Allow a `DNSResolverMessageHandler` to set `dns_resolver` feature X-Git-Url: http://git.bitcoin.ninja/?a=commitdiff_plain;h=refs%2Fheads%2F2024-10-dns-feature-flag;p=rust-lightning Allow a `DNSResolverMessageHandler` to set `dns_resolver` feature A `DNSResolverMessageHandler` which handles resolution requests should want the `NodeFeatures` included in the node's `node_announcement` to include `dns_resolver` to indicate to the world that it provides that service. Here we enable this by requesting extra feature flags from the `DNSResolverMessageHandler` in the features `OnionMessenger`, in turn, provides to `PeerManager` (which builds the `node_announcement`). --- diff --git a/lightning/src/onion_message/dns_resolution.rs b/lightning/src/onion_message/dns_resolution.rs index af133aa7a..bbf8caa4f 100644 --- a/lightning/src/onion_message/dns_resolution.rs +++ b/lightning/src/onion_message/dns_resolution.rs @@ -34,6 +34,8 @@ use dnssec_prover::validation::verify_rr_stream; use dnssec_prover::rr::Name; +use lightning_types::features::NodeFeatures; + use crate::blinded_path::message::DNSResolverContext; use crate::io; #[cfg(feature = "dnssec")] @@ -67,6 +69,13 @@ pub trait DNSResolverMessageHandler { /// With this, we should be able to validate the DNS record we requested. fn handle_dnssec_proof(&self, message: DNSSECProof, context: DNSResolverContext); + /// Gets the node feature flags which this handler itself supports. Useful for setting the + /// `dns_resolver` flag if this handler supports returning [`DNSSECProof`] messages in response + /// to [`DNSSECQuery`] messages. + fn provided_node_features(&self) -> NodeFeatures { + NodeFeatures::empty() + } + /// Release any [`DNSResolverMessage`]s that need to be sent. fn release_pending_messages(&self) -> Vec<(DNSResolverMessage, MessageSendInstructions)> { vec![] diff --git a/lightning/src/onion_message/messenger.rs b/lightning/src/onion_message/messenger.rs index c53184691..0d7243193 100644 --- a/lightning/src/onion_message/messenger.rs +++ b/lightning/src/onion_message/messenger.rs @@ -1778,7 +1778,7 @@ where fn provided_node_features(&self) -> NodeFeatures { let mut features = NodeFeatures::empty(); features.set_onion_messages_optional(); - features + features | self.dns_resolver_handler.provided_node_features() } fn provided_init_features(&self, _their_node_id: PublicKey) -> InitFeatures {