@@ -25,6 +25,7 @@ use lightning::chain::{chainmonitor, BestBlock};
2525use lightning:: ln:: channelmanager:: { self , ChainParameters , ChannelManagerReadArgs } ;
2626use lightning:: ln:: msgs:: { RoutingMessageHandler , SocketAddress } ;
2727use lightning:: ln:: peer_handler:: { IgnoringMessageHandler , MessageHandler } ;
28+ use lightning:: log_trace;
2829use lightning:: onion_message:: dns_resolution:: DNSResolverMessageHandler ;
2930use lightning:: routing:: gossip:: NodeAlias ;
3031use lightning:: routing:: router:: DefaultRouter ;
@@ -40,7 +41,6 @@ use lightning::util::persist::{
4041} ;
4142use lightning:: util:: ser:: ReadableArgs ;
4243use lightning:: util:: sweep:: OutputSweeper ;
43- use lightning:: { log_trace, log_warn} ;
4444use lightning_dns_resolver:: OMDomainResolver ;
4545use lightning_persister:: fs_store:: v1:: FilesystemStore ;
4646use vss_client:: headers:: VssHeaderProvider ;
@@ -172,6 +172,8 @@ pub enum BuildError {
172172 InvalidTorProxyAddress ,
173173 /// The provided alias is invalid.
174174 InvalidNodeAlias ,
175+ /// The provided configuration is invalid.
176+ InvalidConfiguration ( & ' static str ) ,
175177 /// An attempt to setup a runtime has failed.
176178 RuntimeSetupFailed ,
177179 /// We failed to read data from the [`KVStore`].
@@ -216,6 +218,7 @@ impl fmt::Display for BuildError {
216218 write ! ( f, "Given announcement addresses are invalid." )
217219 } ,
218220 Self :: InvalidTorProxyAddress => write ! ( f, "Given Tor proxy address is invalid." ) ,
221+ Self :: InvalidConfiguration ( msg) => write ! ( f, "Given configuration is invalid: {}" , msg) ,
219222 Self :: RuntimeSetupFailed => write ! ( f, "Failed to setup a runtime." ) ,
220223 Self :: ReadFailed => write ! ( f, "Failed to read from store." ) ,
221224 Self :: WriteFailed => write ! ( f, "Failed to write to store." ) ,
@@ -1772,34 +1775,29 @@ fn build_with_store_internal(
17721775 BuildError :: DNSResolverSetupFailed
17731776 } ) ?;
17741777
1775- if * enable_hrn_resolution_service && may_announce_channel ( & config) . is_ok ( ) {
1776- let hrn_res = Arc :: new ( DNSHrnResolver ( addr) ) ;
1777- hrn_resolver = HRNResolver :: Local ( hrn_res) ;
1778+ let hrn_res = Arc :: new ( DNSHrnResolver ( addr) ) ;
1779+ hrn_resolver = HRNResolver :: Local ( hrn_res) ;
1780+
1781+ if * enable_hrn_resolution_service {
1782+ if let Err ( _) = may_announce_channel ( & config) {
1783+ log_error ! (
1784+ logger,
1785+ "HRN resolution service enabled, but node is not announceable."
1786+ ) ;
1787+ return Err ( BuildError :: InvalidConfiguration (
1788+ "Node must announce channels to act as a resolver service." ,
1789+ ) ) ;
1790+ }
17781791
17791792 Arc :: new ( OMDomainResolver :: < IgnoringMessageHandler > :: with_runtime (
17801793 addr,
17811794 None ,
17821795 Some ( runtime_handle. clone ( ) ) ,
17831796 ) ) as Arc < dyn DNSResolverMessageHandler + Send + Sync >
17841797 } else {
1785- if * enable_hrn_resolution_service {
1786- log_warn ! ( logger, "Unable to act as an HRN resolution service. To act as an HRN resolution service, the node must be configured to announce channels." ) ;
1787- }
1788-
1789- // Fallback/Default: Onion resolver
1790- let hrn_res =
1791- Arc :: new ( LDKOnionMessageDNSSECHrnResolver :: new ( Arc :: clone ( & network_graph) ) ) ;
1792- hrn_resolver = HRNResolver :: Onion ( Arc :: clone ( & hrn_res) ) ;
1793-
1794- let pm_hook_clone = Arc :: clone ( & peer_manager_hook) ;
1795- hrn_res. register_post_queue_action ( Box :: new ( move || {
1796- if let Ok ( guard) = pm_hook_clone. lock ( ) {
1797- if let Some ( pm) = guard. as_ref ( ) . and_then ( |weak| weak. upgrade ( ) ) {
1798- pm. process_events ( ) ;
1799- }
1800- }
1801- } ) ) ;
1802- hrn_res as Arc < dyn DNSResolverMessageHandler + Send + Sync >
1798+ // The user wants to use DNS to pay others, but NOT provide a service to others.
1799+ Arc :: new ( IgnoringMessageHandler { } )
1800+ as Arc < dyn DNSResolverMessageHandler + Send + Sync >
18031801 }
18041802 } ,
18051803 } ;
0 commit comments