@@ -25,6 +25,7 @@ use lightning::io::Cursor;
2525use lightning:: ln:: channelmanager:: { self , ChainParameters , ChannelManagerReadArgs } ;
2626use lightning:: ln:: msgs:: { RoutingMessageHandler , SocketAddress } ;
2727use lightning:: ln:: peer_handler:: { IgnoringMessageHandler , MessageHandler } ;
28+ use lightning:: onion_message:: dns_resolution:: DNSResolverMessageHandler ;
2829use lightning:: routing:: gossip:: NodeAlias ;
2930use lightning:: routing:: router:: DefaultRouter ;
3031use lightning:: routing:: scoring:: {
@@ -37,6 +38,7 @@ use lightning::util::persist::{
3738} ;
3839use lightning:: util:: ser:: ReadableArgs ;
3940use lightning:: util:: sweep:: OutputSweeper ;
41+ use lightning_dns_resolver:: OMDomainResolver ;
4042use lightning_persister:: fs_store:: FilesystemStore ;
4143use vss_client:: headers:: { FixedHeaders , LnurlAuthToJwtProvider , VssHeaderProvider } ;
4244
@@ -66,8 +68,8 @@ use crate::peer_store::PeerStore;
6668use crate :: runtime:: Runtime ;
6769use crate :: tx_broadcaster:: TransactionBroadcaster ;
6870use crate :: types:: {
69- ChainMonitor , ChannelManager , DynStore , GossipSync , Graph , KeysManager , MessageRouter ,
70- OnionMessenger , PaymentStore , PeerManager , Persister ,
71+ ChainMonitor , ChannelManager , DomainResolver , DynStore , GossipSync , Graph , HRNResolver ,
72+ KeysManager , MessageRouter , OnionMessenger , PaymentStore , PeerManager , Persister
7173} ;
7274use crate :: wallet:: persist:: KVStoreWalletPersister ;
7375use crate :: wallet:: Wallet ;
@@ -187,6 +189,8 @@ pub enum BuildError {
187189 NetworkMismatch ,
188190 /// The role of the node in an asynchronous payments context is not compatible with the current configuration.
189191 AsyncPaymentsConfigMismatch ,
192+ /// An attempt to setup a DNS Resolver failed.
193+ DNSResolverSetupFailed ,
190194}
191195
192196impl fmt:: Display for BuildError {
@@ -221,12 +225,20 @@ impl fmt::Display for BuildError {
221225 "The async payments role is not compatible with the current configuration."
222226 )
223227 } ,
228+ Self :: DNSResolverSetupFailed => {
229+ write ! ( f, "An attempt to setup a DNS resolver has failed." )
230+ } ,
224231 }
225232 }
226233}
227234
228235impl std:: error:: Error for BuildError { }
229236
237+ enum Resolver {
238+ HRN ( Arc < HRNResolver > ) ,
239+ DNS ( Arc < DomainResolver > ) ,
240+ }
241+
230242/// A builder for an [`Node`] instance, allowing to set some configuration and module choices from
231243/// the getgo.
232244///
@@ -1491,7 +1503,22 @@ fn build_with_store_internal(
14911503 } ) ?;
14921504 }
14931505
1494- let hrn_resolver = Arc :: new ( LDKOnionMessageDNSSECHrnResolver :: new ( Arc :: clone ( & network_graph) ) ) ;
1506+ let resolver = if config. is_hrn_resolver {
1507+ Resolver :: DNS ( Arc :: new ( OMDomainResolver :: ignoring_incoming_proofs (
1508+ "8.8.8.8:53" . parse ( ) . map_err ( |_| BuildError :: DNSResolverSetupFailed ) ?,
1509+ ) ) )
1510+ } else {
1511+ Resolver :: HRN ( Arc :: new ( LDKOnionMessageDNSSECHrnResolver :: new ( Arc :: clone ( & network_graph) ) ) )
1512+ } ;
1513+
1514+ let om_resolver = match resolver {
1515+ Resolver :: DNS ( ref dns_resolver) => {
1516+ Arc :: clone ( dns_resolver) as Arc < dyn DNSResolverMessageHandler + Send + Sync >
1517+ } ,
1518+ Resolver :: HRN ( ref hrn_resolver) => {
1519+ Arc :: clone ( hrn_resolver) as Arc < dyn DNSResolverMessageHandler + Send + Sync >
1520+ } ,
1521+ } ;
14951522
14961523 // Initialize the PeerManager
14971524 let onion_messenger: Arc < OnionMessenger > =
@@ -1504,7 +1531,7 @@ fn build_with_store_internal(
15041531 message_router,
15051532 Arc :: clone ( & channel_manager) ,
15061533 Arc :: clone ( & channel_manager) ,
1507- Arc :: clone ( & hrn_resolver ) ,
1534+ Arc :: clone ( & om_resolver ) ,
15081535 IgnoringMessageHandler { } ,
15091536 ) )
15101537 } else {
@@ -1516,7 +1543,7 @@ fn build_with_store_internal(
15161543 message_router,
15171544 Arc :: clone ( & channel_manager) ,
15181545 Arc :: clone ( & channel_manager) ,
1519- Arc :: clone ( & hrn_resolver ) ,
1546+ Arc :: clone ( & om_resolver ) ,
15201547 IgnoringMessageHandler { } ,
15211548 ) )
15221549 } ;
@@ -1650,9 +1677,15 @@ fn build_with_store_internal(
16501677
16511678 let peer_manager_clone = Arc :: clone ( & peer_manager) ;
16521679
1653- hrn_resolver. register_post_queue_action ( Box :: new ( move || {
1654- peer_manager_clone. process_events ( ) ;
1655- } ) ) ;
1680+ let hrn_resolver = match resolver {
1681+ Resolver :: DNS ( _) => None ,
1682+ Resolver :: HRN ( ref hrn_resolver) => {
1683+ hrn_resolver. register_post_queue_action ( Box :: new ( move || {
1684+ peer_manager_clone. process_events ( ) ;
1685+ } ) ) ;
1686+ Some ( hrn_resolver)
1687+ } ,
1688+ } ;
16561689
16571690 liquidity_source. as_ref ( ) . map ( |l| l. set_peer_manager ( Arc :: clone ( & peer_manager) ) ) ;
16581691
@@ -1754,7 +1787,7 @@ fn build_with_store_internal(
17541787 node_metrics,
17551788 om_mailbox,
17561789 async_payments_role,
1757- hrn_resolver,
1790+ hrn_resolver : hrn_resolver . cloned ( ) ,
17581791 } )
17591792}
17601793
0 commit comments