@@ -31,8 +31,8 @@ use crate::peer_store::PeerStore;
3131use crate :: runtime:: Runtime ;
3232use crate :: tx_broadcaster:: TransactionBroadcaster ;
3333use crate :: types:: {
34- ChainMonitor , ChannelManager , DynStore , GossipSync , Graph , KeysManager , MessageRouter ,
35- OnionMessenger , PaymentStore , PeerManager ,
34+ ChainMonitor , ChannelManager , DomainResolver , DynStore , GossipSync , Graph , HRNResolver ,
35+ KeysManager , MessageRouter , OnionMessenger , PaymentStore , PeerManager ,
3636} ;
3737use crate :: wallet:: persist:: KVStoreWalletPersister ;
3838use crate :: wallet:: Wallet ;
@@ -43,6 +43,7 @@ use lightning::io::Cursor;
4343use lightning:: ln:: channelmanager:: { self , ChainParameters , ChannelManagerReadArgs } ;
4444use lightning:: ln:: msgs:: { RoutingMessageHandler , SocketAddress } ;
4545use lightning:: ln:: peer_handler:: { IgnoringMessageHandler , MessageHandler } ;
46+ use lightning:: onion_message:: dns_resolution:: DNSResolverMessageHandler ;
4647use lightning:: routing:: gossip:: NodeAlias ;
4748use lightning:: routing:: router:: DefaultRouter ;
4849use lightning:: routing:: scoring:: {
@@ -59,6 +60,8 @@ use lightning::util::sweep::OutputSweeper;
5960
6061use lightning_persister:: fs_store:: FilesystemStore ;
6162
63+ use lightning_dns_resolver:: OMDomainResolver ;
64+
6265use bdk_wallet:: template:: Bip84 ;
6366use bdk_wallet:: KeychainKind ;
6467use bdk_wallet:: Wallet as BdkWallet ;
@@ -193,6 +196,8 @@ pub enum BuildError {
193196 LoggerSetupFailed ,
194197 /// The given network does not match the node's previously configured network.
195198 NetworkMismatch ,
199+ /// An attempt to setup a DNS Resolver failed.
200+ DNSResolverSetupFailed ,
196201}
197202
198203impl fmt:: Display for BuildError {
@@ -221,12 +226,20 @@ impl fmt::Display for BuildError {
221226 Self :: NetworkMismatch => {
222227 write ! ( f, "Given network does not match the node's previously configured network." )
223228 } ,
229+ Self :: DNSResolverSetupFailed => {
230+ write ! ( f, "An attempt to setup a DNS resolver has failed." )
231+ } ,
224232 }
225233 }
226234}
227235
228236impl std:: error:: Error for BuildError { }
229237
238+ enum Resolver {
239+ HRN ( Arc < HRNResolver > ) ,
240+ DNS ( Arc < DomainResolver > ) ,
241+ }
242+
230243/// A builder for an [`Node`] instance, allowing to set some configuration and module choices from
231244/// the getgo.
232245///
@@ -1456,7 +1469,22 @@ fn build_with_store_internal(
14561469 } ) ?;
14571470 }
14581471
1459- let hrn_resolver = Arc :: new ( LDKOnionMessageDNSSECHrnResolver :: new ( Arc :: clone ( & network_graph) ) ) ;
1472+ let resolver = if config. is_hrn_resolver {
1473+ Resolver :: DNS ( Arc :: new ( OMDomainResolver :: ignoring_incoming_proofs (
1474+ "8.8.8.8:53" . parse ( ) . map_err ( |_| BuildError :: DNSResolverSetupFailed ) ?,
1475+ ) ) )
1476+ } else {
1477+ Resolver :: HRN ( Arc :: new ( LDKOnionMessageDNSSECHrnResolver :: new ( Arc :: clone ( & network_graph) ) ) )
1478+ } ;
1479+
1480+ let om_resolver = match resolver {
1481+ Resolver :: DNS ( ref dns_resolver) => {
1482+ Arc :: clone ( dns_resolver) as Arc < dyn DNSResolverMessageHandler + Send + Sync >
1483+ } ,
1484+ Resolver :: HRN ( ref hrn_resolver) => {
1485+ Arc :: clone ( hrn_resolver) as Arc < dyn DNSResolverMessageHandler + Send + Sync >
1486+ } ,
1487+ } ;
14601488
14611489 // Initialize the PeerManager
14621490 let onion_messenger: Arc < OnionMessenger > = Arc :: new ( OnionMessenger :: new (
@@ -1467,7 +1495,7 @@ fn build_with_store_internal(
14671495 message_router,
14681496 Arc :: clone ( & channel_manager) ,
14691497 IgnoringMessageHandler { } ,
1470- Arc :: clone ( & hrn_resolver ) ,
1498+ Arc :: clone ( & om_resolver ) ,
14711499 IgnoringMessageHandler { } ,
14721500 ) ) ;
14731501 let ephemeral_bytes: [ u8 ; 32 ] = keys_manager. get_secure_random_bytes ( ) ;
@@ -1595,9 +1623,15 @@ fn build_with_store_internal(
15951623
15961624 let peer_manager_clone = Arc :: clone ( & peer_manager) ;
15971625
1598- hrn_resolver. register_post_queue_action ( Box :: new ( move || {
1599- peer_manager_clone. process_events ( ) ;
1600- } ) ) ;
1626+ let hrn_resolver = match resolver {
1627+ Resolver :: DNS ( _) => None ,
1628+ Resolver :: HRN ( ref hrn_resolver) => {
1629+ hrn_resolver. register_post_queue_action ( Box :: new ( move || {
1630+ peer_manager_clone. process_events ( ) ;
1631+ } ) ) ;
1632+ Some ( hrn_resolver)
1633+ } ,
1634+ } ;
16011635
16021636 liquidity_source. as_ref ( ) . map ( |l| l. set_peer_manager ( Arc :: clone ( & peer_manager) ) ) ;
16031637
@@ -1706,7 +1740,7 @@ fn build_with_store_internal(
17061740 is_running,
17071741 is_listening,
17081742 node_metrics,
1709- hrn_resolver,
1743+ hrn_resolver : hrn_resolver . cloned ( ) ,
17101744 } )
17111745}
17121746
0 commit comments