@@ -23,7 +23,7 @@ use crate::events::{MessageSendEvent, MessageSendEventsProvider};
2323use crate :: ln:: types:: ChannelId ;
2424use crate :: ln:: features:: { InitFeatures , NodeFeatures } ;
2525use crate :: ln:: msgs;
26- use crate :: ln:: msgs:: { ChannelMessageHandler , LightningError , SocketAddress , OnionMessageHandler , RoutingMessageHandler } ;
26+ use crate :: ln:: msgs:: { ChannelMessageHandler , Init , LightningError , SocketAddress , OnionMessageHandler , RoutingMessageHandler } ;
2727use crate :: util:: ser:: { VecWriter , Writeable , Writer } ;
2828use crate :: ln:: peer_channel_encryptor:: { PeerChannelEncryptor , NextNoiseStep , MessageBuf , MSG_BUF_ALLOC_SIZE } ;
2929use crate :: ln:: wire;
@@ -79,6 +79,17 @@ pub trait CustomMessageHandler: wire::CustomMessageReader {
7979 /// connection to the node exists, then the message is simply not sent.
8080 fn get_and_clear_pending_msg ( & self ) -> Vec < ( PublicKey , Self :: CustomMessage ) > ;
8181
82+ // Connection loss/reestablish:
83+ /// Indicates a connection to the peer was lost.
84+ fn peer_disconnected ( & self , their_node_id : & PublicKey ) ;
85+
86+ /// Handle a peer reconnecting.
87+ ///
88+ /// May return an `Err(())` if the features the peer supports are not sufficient to communicate
89+ /// with us. Implementors should be somewhat conservative about doing so, however, as other
90+ /// message handlers may still wish to communicate with this peer.
91+ fn peer_connected ( & self , their_node_id : & PublicKey , msg : & Init , inbound : bool ) -> Result < ( ) , ( ) > ;
92+
8293 /// Gets the node feature flags which this handler itself supports. All available handlers are
8394 /// queried similarly and their feature flags are OR'd together to form the [`NodeFeatures`]
8495 /// which are broadcasted in our [`NodeAnnouncement`] message.
@@ -190,6 +201,10 @@ impl CustomMessageHandler for IgnoringMessageHandler {
190201
191202 fn get_and_clear_pending_msg ( & self ) -> Vec < ( PublicKey , Self :: CustomMessage ) > { Vec :: new ( ) }
192203
204+ fn peer_disconnected ( & self , _their_node_id : & PublicKey ) { }
205+
206+ fn peer_connected ( & self , _their_node_id : & PublicKey , _msg : & Init , _inbound : bool ) -> Result < ( ) , ( ) > { Ok ( ( ) ) }
207+
193208 fn provided_node_features ( & self ) -> NodeFeatures { NodeFeatures :: empty ( ) }
194209
195210 fn provided_init_features ( & self , _their_node_id : & PublicKey ) -> InitFeatures {
@@ -1680,6 +1695,10 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
16801695 log_debug ! ( logger, "Onion Message Handler decided we couldn't communicate with peer {}" , log_pubkey!( their_node_id) ) ;
16811696 return Err ( PeerHandleError { } . into ( ) ) ;
16821697 }
1698+ if let Err ( ( ) ) = self . message_handler . custom_message_handler . peer_connected ( & their_node_id, & msg, peer_lock. inbound_connection ) {
1699+ log_debug ! ( logger, "Custom Message Handler decided we couldn't communicate with peer {}" , log_pubkey!( their_node_id) ) ;
1700+ return Err ( PeerHandleError { } . into ( ) ) ;
1701+ }
16831702
16841703 peer_lock. awaiting_pong_timer_tick_intervals = 0 ;
16851704 peer_lock. their_features = Some ( msg. features ) ;
@@ -2430,6 +2449,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
24302449 log_trace ! ( WithContext :: from( & self . logger, Some ( node_id) , None , None ) , "Disconnecting peer with id {} due to {}" , node_id, reason) ;
24312450 self . message_handler . chan_handler . peer_disconnected ( & node_id) ;
24322451 self . message_handler . onion_message_handler . peer_disconnected ( & node_id) ;
2452+ self . message_handler . custom_message_handler . peer_disconnected ( & node_id) ;
24332453 }
24342454 descriptor. disconnect_socket ( ) ;
24352455 }
@@ -2452,6 +2472,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
24522472 if !peer. handshake_complete ( ) { return ; }
24532473 self . message_handler . chan_handler . peer_disconnected ( & node_id) ;
24542474 self . message_handler . onion_message_handler . peer_disconnected ( & node_id) ;
2475+ self . message_handler . custom_message_handler . peer_disconnected ( & node_id) ;
24552476 }
24562477 }
24572478 } ;
@@ -2680,7 +2701,7 @@ mod tests {
26802701 use crate :: ln:: peer_channel_encryptor:: PeerChannelEncryptor ;
26812702 use crate :: ln:: peer_handler:: { CustomMessageHandler , PeerManager , MessageHandler , SocketDescriptor , IgnoringMessageHandler , filter_addresses, ErroringMessageHandler , MAX_BUFFER_DRAIN_TICK_INTERVALS_PER_PEER } ;
26822703 use crate :: ln:: { msgs, wire} ;
2683- use crate :: ln:: msgs:: { LightningError , SocketAddress } ;
2704+ use crate :: ln:: msgs:: { Init , LightningError , SocketAddress } ;
26842705 use crate :: util:: test_utils;
26852706
26862707 use bitcoin:: Network ;
@@ -2747,6 +2768,11 @@ mod tests {
27472768
27482769 fn get_and_clear_pending_msg ( & self ) -> Vec < ( PublicKey , Self :: CustomMessage ) > { Vec :: new ( ) }
27492770
2771+
2772+ fn peer_disconnected ( & self , _their_node_id : & PublicKey ) { }
2773+
2774+ fn peer_connected ( & self , _their_node_id : & PublicKey , _msg : & Init , _inbound : bool ) -> Result < ( ) , ( ) > { Ok ( ( ) ) }
2775+
27502776 fn provided_node_features ( & self ) -> NodeFeatures { NodeFeatures :: empty ( ) }
27512777
27522778 fn provided_init_features ( & self , _: & PublicKey ) -> InitFeatures {
0 commit comments