@@ -68,6 +68,16 @@ pub trait CustomMessageHandler: wire::CustomMessageReader {
6868 	/// connection to the node exists, then the message is simply not sent. 
6969 	fn  get_and_clear_pending_msg ( & self )  -> Vec < ( PublicKey ,  Self :: CustomMessage ) > ; 
7070
71+ 	/// Indicates a connection to the peer failed/an existing connection was lost. 
72+  	fn  peer_disconnected ( & self ,  their_node_id :  & PublicKey ) ; 
73+ 
74+ 	/// Handle a peer reconnecting, possibly generating `channel_reestablish` message(s). 
75+  	/// 
76+  	/// May return an `Err(())` if the features the peer supports are not sufficient to communicate 
77+  	/// with us. Implementors should be somewhat conservative about doing so, however, as other 
78+  	/// message handlers may still wish to communicate with this peer. 
79+  	fn  peer_connected ( & self ,  their_node_id :  & PublicKey ,  msg :  & msgs:: Init ,  inbound :  bool )  -> Result < ( ) ,  ( ) > ; 
80+ 
7181	/// Gets the node feature flags which this handler itself supports. All available handlers are 
7282 	/// queried similarly and their feature flags are OR'd together to form the [`NodeFeatures`] 
7383 	/// which are broadcasted in our [`NodeAnnouncement`] message. 
@@ -170,6 +180,10 @@ impl CustomMessageHandler for IgnoringMessageHandler {
170180
171181	fn  get_and_clear_pending_msg ( & self )  -> Vec < ( PublicKey ,  Self :: CustomMessage ) >  {  Vec :: new ( )  } 
172182
183+ 	fn  peer_disconnected ( & self ,  _:  & PublicKey )  { } 
184+ 
185+ 	fn  peer_connected ( & self ,  _:  & PublicKey ,  _:  & msgs:: Init ,  _:  bool )  -> Result < ( ) ,  ( ) >  {  Ok ( ( ) )  } 
186+ 
173187	fn  provided_node_features ( & self )  -> NodeFeatures  {  NodeFeatures :: empty ( )  } 
174188
175189	fn  provided_init_features ( & self ,  _their_node_id :  & PublicKey )  -> InitFeatures  { 
@@ -1549,6 +1563,10 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
15491563				log_debug ! ( self . logger,  "Onion Message Handler decided we couldn't communicate with peer {}" ,  log_pubkey!( their_node_id) ) ; 
15501564				return  Err ( PeerHandleError  {  } . into ( ) ) ; 
15511565			} 
1566+ 			if  let  Err ( ( ) )  = self . message_handler . custom_message_handler . peer_connected ( & their_node_id,  & msg,  peer_lock. inbound_connection )  { 
1567+ 				log_debug ! ( self . logger,  "Custom Message Handler decided we couldn't communicate with peer {}" ,  log_pubkey!( their_node_id) ) ; 
1568+ 				return  Err ( PeerHandleError  {  } . into ( ) ) ; 
1569+ 			} 
15521570
15531571			peer_lock. their_features  = Some ( msg. features ) ; 
15541572			return  Ok ( None ) ; 
@@ -2237,6 +2255,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
22372255			log_trace ! ( self . logger,  "Disconnecting peer with id {} due to {}" ,  node_id,  reason) ; 
22382256			self . message_handler . chan_handler . peer_disconnected ( & node_id) ; 
22392257			self . message_handler . onion_message_handler . peer_disconnected ( & node_id) ; 
2258+ 			self . message_handler . custom_message_handler . peer_disconnected ( & node_id) ; 
22402259		} 
22412260		descriptor. disconnect_socket ( ) ; 
22422261	} 
@@ -2259,6 +2278,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
22592278					if  !peer. handshake_complete ( )  {  return ;  } 
22602279					self . message_handler . chan_handler . peer_disconnected ( & node_id) ; 
22612280					self . message_handler . onion_message_handler . peer_disconnected ( & node_id) ; 
2281+ 					self . message_handler . custom_message_handler . peer_disconnected ( & node_id) ; 
22622282				} 
22632283			} 
22642284		} ; 
@@ -2553,6 +2573,9 @@ mod tests {
25532573
25542574		fn  get_and_clear_pending_msg ( & self )  -> Vec < ( PublicKey ,  Self :: CustomMessage ) >  {  Vec :: new ( )  } 
25552575
2576+ 		fn  peer_disconnected ( & self ,  _:  & PublicKey )  { } 
2577+ 		fn  peer_connected ( & self ,  _:  & PublicKey ,  _:  & msgs:: Init ,  _:  bool )  -> Result < ( ) ,  ( ) >  {  Ok ( ( ) )  } 
2578+ 
25562579		fn  provided_node_features ( & self )  -> NodeFeatures  {  NodeFeatures :: empty ( )  } 
25572580
25582581		fn  provided_init_features ( & self ,  _:  & PublicKey )  -> InitFeatures  { 
0 commit comments