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`).
This commit is contained in:
Matt Corallo 2024-10-02 18:21:33 +00:00
parent 1abbe2a237
commit 457b634d09
2 changed files with 10 additions and 1 deletions

View file

@ -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![]

View file

@ -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 {