Skip to content

Commit 501b6dd

Browse files
add peer_(dis)connected to custom message handler
1 parent 2701bc5 commit 501b6dd

File tree

1 file changed

+27
-2
lines changed

1 file changed

+27
-2
lines changed

lightning/src/ln/peer_handler.rs

+27-2
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ use crate::events::{MessageSendEvent, MessageSendEventsProvider};
2323
use crate::ln::types::ChannelId;
2424
use crate::ln::features::{InitFeatures, NodeFeatures};
2525
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};
2727
use crate::util::ser::{VecWriter, Writeable, Writer};
2828
use crate::ln::peer_channel_encryptor::{PeerChannelEncryptor, NextNoiseStep, MessageBuf, MSG_BUF_ALLOC_SIZE};
2929
use crate::ln::wire;
@@ -47,6 +47,7 @@ use core::ops::Deref;
4747
use core::convert::Infallible;
4848
#[cfg(feature = "std")]
4949
use std::error;
50+
5051
#[cfg(not(c_bindings))]
5152
use {
5253
crate::ln::channelmanager::{SimpleArcChannelManager, SimpleRefChannelManager},
@@ -79,6 +80,17 @@ pub trait CustomMessageHandler: wire::CustomMessageReader {
7980
/// connection to the node exists, then the message is simply not sent.
8081
fn get_and_clear_pending_msg(&self) -> Vec<(PublicKey, Self::CustomMessage)>;
8182

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+
8294
/// Gets the node feature flags which this handler itself supports. All available handlers are
8395
/// queried similarly and their feature flags are OR'd together to form the [`NodeFeatures`]
8496
/// which are broadcasted in our [`NodeAnnouncement`] message.
@@ -190,6 +202,10 @@ impl CustomMessageHandler for IgnoringMessageHandler {
190202

191203
fn get_and_clear_pending_msg(&self) -> Vec<(PublicKey, Self::CustomMessage)> { Vec::new() }
192204

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+
193209
fn provided_node_features(&self) -> NodeFeatures { NodeFeatures::empty() }
194210

195211
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
16801696
log_debug!(logger, "Onion Message Handler decided we couldn't communicate with peer {}", log_pubkey!(their_node_id));
16811697
return Err(PeerHandleError { }.into());
16821698
}
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+
}
16831703

16841704
peer_lock.awaiting_pong_timer_tick_intervals = 0;
16851705
peer_lock.their_features = Some(msg.features);
@@ -2680,7 +2700,7 @@ mod tests {
26802700
use crate::ln::peer_channel_encryptor::PeerChannelEncryptor;
26812701
use crate::ln::peer_handler::{CustomMessageHandler, PeerManager, MessageHandler, SocketDescriptor, IgnoringMessageHandler, filter_addresses, ErroringMessageHandler, MAX_BUFFER_DRAIN_TICK_INTERVALS_PER_PEER};
26822702
use crate::ln::{msgs, wire};
2683-
use crate::ln::msgs::{LightningError, SocketAddress};
2703+
use crate::ln::msgs::{Init, LightningError, SocketAddress};
26842704
use crate::util::test_utils;
26852705

26862706
use bitcoin::Network;
@@ -2747,6 +2767,11 @@ mod tests {
27472767

27482768
fn get_and_clear_pending_msg(&self) -> Vec<(PublicKey, Self::CustomMessage)> { Vec::new() }
27492769

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+
27502775
fn provided_node_features(&self) -> NodeFeatures { NodeFeatures::empty() }
27512776

27522777
fn provided_init_features(&self, _: &PublicKey) -> InitFeatures {

0 commit comments

Comments
 (0)