@@ -23,7 +23,7 @@ use crate::events::{MessageSendEvent, MessageSendEventsProvider};
23
23
use crate :: ln:: types:: ChannelId ;
24
24
use crate :: ln:: features:: { InitFeatures , NodeFeatures } ;
25
25
use crate :: ln:: msgs;
26
- use crate :: ln:: msgs:: { ChannelMessageHandler , LightningError , SocketAddress , OnionMessageHandler , RoutingMessageHandler } ;
26
+ use crate :: ln:: msgs:: { ChannelMessageHandler , Init , LightningError , SocketAddress , OnionMessageHandler , RoutingMessageHandler } ;
27
27
use crate :: util:: ser:: { VecWriter , Writeable , Writer } ;
28
28
use crate :: ln:: peer_channel_encryptor:: { PeerChannelEncryptor , NextNoiseStep , MessageBuf , MSG_BUF_ALLOC_SIZE } ;
29
29
use crate :: ln:: wire;
@@ -47,6 +47,7 @@ use core::ops::Deref;
47
47
use core:: convert:: Infallible ;
48
48
#[ cfg( feature = "std" ) ]
49
49
use std:: error;
50
+
50
51
#[ cfg( not( c_bindings) ) ]
51
52
use {
52
53
crate :: ln:: channelmanager:: { SimpleArcChannelManager , SimpleRefChannelManager } ,
@@ -79,6 +80,17 @@ pub trait CustomMessageHandler: wire::CustomMessageReader {
79
80
/// connection to the node exists, then the message is simply not sent.
80
81
fn get_and_clear_pending_msg ( & self ) -> Vec < ( PublicKey , Self :: CustomMessage ) > ;
81
82
83
+ // Connection loss/reestablish:
84
+ /// Indicates a connection to the peer failed/an existing connection was lost.
85
+ fn peer_disconnected ( & self , their_node_id : & PublicKey ) ;
86
+
87
+ /// Handle a peer reconnecting, possibly generating `channel_reestablish` message(s).
88
+ ///
89
+ /// May return an `Err(())` if the features the peer supports are not sufficient to communicate
90
+ /// with us. Implementors should be somewhat conservative about doing so, however, as other
91
+ /// message handlers may still wish to communicate with this peer.
92
+ fn peer_connected ( & self , their_node_id : & PublicKey , msg : & Init , inbound : bool ) -> Result < ( ) , ( ) > ;
93
+
82
94
/// Gets the node feature flags which this handler itself supports. All available handlers are
83
95
/// queried similarly and their feature flags are OR'd together to form the [`NodeFeatures`]
84
96
/// which are broadcasted in our [`NodeAnnouncement`] message.
@@ -190,6 +202,10 @@ impl CustomMessageHandler for IgnoringMessageHandler {
190
202
191
203
fn get_and_clear_pending_msg ( & self ) -> Vec < ( PublicKey , Self :: CustomMessage ) > { Vec :: new ( ) }
192
204
205
+ fn peer_disconnected ( & self , _their_node_id : & PublicKey ) { }
206
+
207
+ fn peer_connected ( & self , _their_node_id : & PublicKey , _msg : & Init , _inbound : bool ) -> Result < ( ) , ( ) > { Ok ( ( ) ) }
208
+
193
209
fn provided_node_features ( & self ) -> NodeFeatures { NodeFeatures :: empty ( ) }
194
210
195
211
fn provided_init_features ( & self , _their_node_id : & PublicKey ) -> InitFeatures {
@@ -1680,6 +1696,10 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
1680
1696
log_debug ! ( logger, "Onion Message Handler decided we couldn't communicate with peer {}" , log_pubkey!( their_node_id) ) ;
1681
1697
return Err ( PeerHandleError { } . into ( ) ) ;
1682
1698
}
1699
+ if let Err ( ( ) ) = self . message_handler . custom_message_handler . peer_connected ( & their_node_id, & msg, peer_lock. inbound_connection ) {
1700
+ log_debug ! ( logger, "Custom Message Handler decided we couldn't communicate with peer {}" , log_pubkey!( their_node_id) ) ;
1701
+ return Err ( PeerHandleError { } . into ( ) ) ;
1702
+ }
1683
1703
1684
1704
peer_lock. awaiting_pong_timer_tick_intervals = 0 ;
1685
1705
peer_lock. their_features = Some ( msg. features ) ;
@@ -2680,7 +2700,7 @@ mod tests {
2680
2700
use crate :: ln:: peer_channel_encryptor:: PeerChannelEncryptor ;
2681
2701
use crate :: ln:: peer_handler:: { CustomMessageHandler , PeerManager , MessageHandler , SocketDescriptor , IgnoringMessageHandler , filter_addresses, ErroringMessageHandler , MAX_BUFFER_DRAIN_TICK_INTERVALS_PER_PEER } ;
2682
2702
use crate :: ln:: { msgs, wire} ;
2683
- use crate :: ln:: msgs:: { LightningError , SocketAddress } ;
2703
+ use crate :: ln:: msgs:: { Init , LightningError , SocketAddress } ;
2684
2704
use crate :: util:: test_utils;
2685
2705
2686
2706
use bitcoin:: Network ;
@@ -2747,6 +2767,11 @@ mod tests {
2747
2767
2748
2768
fn get_and_clear_pending_msg ( & self ) -> Vec < ( PublicKey , Self :: CustomMessage ) > { Vec :: new ( ) }
2749
2769
2770
+
2771
+ fn peer_disconnected ( & self , _their_node_id : & PublicKey ) { }
2772
+
2773
+ fn peer_connected ( & self , _their_node_id : & PublicKey , _msg : & Init , _inbound : bool ) -> Result < ( ) , ( ) > { Ok ( ( ) ) }
2774
+
2750
2775
fn provided_node_features ( & self ) -> NodeFeatures { NodeFeatures :: empty ( ) }
2751
2776
2752
2777
fn provided_init_features ( & self , _: & PublicKey ) -> InitFeatures {
0 commit comments