@@ -26,6 +26,7 @@ use lightning::ln::channelmanager::{self, ChainParameters, ChannelManagerReadArg
2626use lightning:: ln:: msgs:: { RoutingMessageHandler , SocketAddress } ;
2727use lightning:: ln:: peer_handler:: { IgnoringMessageHandler , MessageHandler } ;
2828use lightning:: log_trace;
29+ use lightning:: onion_message:: dns_resolution:: DNSResolverMessageHandler ;
2930use lightning:: routing:: gossip:: NodeAlias ;
3031use lightning:: routing:: router:: DefaultRouter ;
3132use lightning:: routing:: scoring:: {
@@ -39,6 +40,7 @@ use lightning::util::persist::{
3940} ;
4041use lightning:: util:: ser:: ReadableArgs ;
4142use lightning:: util:: sweep:: OutputSweeper ;
43+ use lightning_dns_resolver:: OMDomainResolver ;
4244use lightning_persister:: fs_store:: FilesystemStore ;
4345use vss_client:: headers:: { FixedHeaders , LnurlAuthToJwtProvider , VssHeaderProvider } ;
4446
@@ -70,8 +72,8 @@ use crate::peer_store::PeerStore;
7072use crate :: runtime:: Runtime ;
7173use crate :: tx_broadcaster:: TransactionBroadcaster ;
7274use crate :: types:: {
73- ChainMonitor , ChannelManager , DynStore , GossipSync , Graph , KeysManager , MessageRouter ,
74- OnionMessenger , PaymentStore , PeerManager , Persister ,
75+ ChainMonitor , ChannelManager , DomainResolver , DynStore , GossipSync , Graph , HRNResolver ,
76+ KeysManager , MessageRouter , OnionMessenger , PaymentStore , PeerManager , Persister ,
7577} ;
7678use crate :: wallet:: persist:: KVStoreWalletPersister ;
7779use crate :: wallet:: Wallet ;
@@ -196,6 +198,8 @@ pub enum BuildError {
196198 NetworkMismatch ,
197199 /// The role of the node in an asynchronous payments context is not compatible with the current configuration.
198200 AsyncPaymentsConfigMismatch ,
201+ /// An attempt to setup a DNS Resolver failed.
202+ DNSResolverSetupFailed ,
199203}
200204
201205impl fmt:: Display for BuildError {
@@ -230,12 +234,20 @@ impl fmt::Display for BuildError {
230234 "The async payments role is not compatible with the current configuration."
231235 )
232236 } ,
237+ Self :: DNSResolverSetupFailed => {
238+ write ! ( f, "An attempt to setup a DNS resolver has failed." )
239+ } ,
233240 }
234241 }
235242}
236243
237244impl std:: error:: Error for BuildError { }
238245
246+ enum Resolver {
247+ HRN ( Arc < HRNResolver > ) ,
248+ DNS ( Arc < DomainResolver > ) ,
249+ }
250+
239251/// A builder for an [`Node`] instance, allowing to set some configuration and module choices from
240252/// the getgo.
241253///
@@ -1537,7 +1549,22 @@ fn build_with_store_internal(
15371549 } ) ?;
15381550 }
15391551
1540- let hrn_resolver = Arc :: new ( LDKOnionMessageDNSSECHrnResolver :: new ( Arc :: clone ( & network_graph) ) ) ;
1552+ let resolver = if config. is_hrn_resolver {
1553+ Resolver :: DNS ( Arc :: new ( OMDomainResolver :: ignoring_incoming_proofs (
1554+ "8.8.8.8:53" . parse ( ) . map_err ( |_| BuildError :: DNSResolverSetupFailed ) ?,
1555+ ) ) )
1556+ } else {
1557+ Resolver :: HRN ( Arc :: new ( LDKOnionMessageDNSSECHrnResolver :: new ( Arc :: clone ( & network_graph) ) ) )
1558+ } ;
1559+
1560+ let om_resolver = match resolver {
1561+ Resolver :: DNS ( ref dns_resolver) => {
1562+ Arc :: clone ( dns_resolver) as Arc < dyn DNSResolverMessageHandler + Send + Sync >
1563+ } ,
1564+ Resolver :: HRN ( ref hrn_resolver) => {
1565+ Arc :: clone ( hrn_resolver) as Arc < dyn DNSResolverMessageHandler + Send + Sync >
1566+ } ,
1567+ } ;
15411568
15421569 // Initialize the PeerManager
15431570 let onion_messenger: Arc < OnionMessenger > =
@@ -1550,7 +1577,7 @@ fn build_with_store_internal(
15501577 message_router,
15511578 Arc :: clone ( & channel_manager) ,
15521579 Arc :: clone ( & channel_manager) ,
1553- Arc :: clone ( & hrn_resolver ) ,
1580+ Arc :: clone ( & om_resolver ) ,
15541581 IgnoringMessageHandler { } ,
15551582 ) )
15561583 } else {
@@ -1562,7 +1589,7 @@ fn build_with_store_internal(
15621589 message_router,
15631590 Arc :: clone ( & channel_manager) ,
15641591 Arc :: clone ( & channel_manager) ,
1565- Arc :: clone ( & hrn_resolver ) ,
1592+ Arc :: clone ( & om_resolver ) ,
15661593 IgnoringMessageHandler { } ,
15671594 ) )
15681595 } ;
@@ -1696,9 +1723,15 @@ fn build_with_store_internal(
16961723
16971724 let peer_manager_clone = Arc :: clone ( & peer_manager) ;
16981725
1699- hrn_resolver. register_post_queue_action ( Box :: new ( move || {
1700- peer_manager_clone. process_events ( ) ;
1701- } ) ) ;
1726+ let hrn_resolver = match resolver {
1727+ Resolver :: DNS ( _) => None ,
1728+ Resolver :: HRN ( ref hrn_resolver) => {
1729+ hrn_resolver. register_post_queue_action ( Box :: new ( move || {
1730+ peer_manager_clone. process_events ( ) ;
1731+ } ) ) ;
1732+ Some ( hrn_resolver)
1733+ } ,
1734+ } ;
17021735
17031736 liquidity_source. as_ref ( ) . map ( |l| l. set_peer_manager ( Arc :: clone ( & peer_manager) ) ) ;
17041737
@@ -1806,7 +1839,7 @@ fn build_with_store_internal(
18061839 node_metrics,
18071840 om_mailbox,
18081841 async_payments_role,
1809- hrn_resolver,
1842+ hrn_resolver : hrn_resolver . cloned ( ) ,
18101843 } )
18111844}
18121845
0 commit comments