Skip to content

Commit 9789152

Browse files
authored
Merge pull request #3105 from johncantrell97/johncantrell97/add-peer-dis/connected-to-cmh
add peer_(dis)connected to custom message handler
2 parents 2701bc5 + 602921c commit 9789152

File tree

2 files changed

+62
-3
lines changed

2 files changed

+62
-3
lines changed

lightning-custom-message/src/lib.rs

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
//!
2121
//! # use bitcoin::secp256k1::PublicKey;
2222
//! # use lightning::io;
23-
//! # use lightning::ln::msgs::{DecodeError, LightningError};
23+
//! # use lightning::ln::msgs::{DecodeError, Init, LightningError};
2424
//! # use lightning::ln::features::{InitFeatures, NodeFeatures};
2525
//! use lightning::ln::peer_handler::CustomMessageHandler;
2626
//! use lightning::ln::wire::{CustomMessageReader, self};
@@ -68,6 +68,12 @@
6868
//! # fn get_and_clear_pending_msg(&self) -> Vec<(PublicKey, Self::CustomMessage)> {
6969
//! # unimplemented!()
7070
//! # }
71+
//! # fn peer_disconnected(&self, _their_node_id: &PublicKey) {
72+
//! # unimplemented!()
73+
//! # }
74+
//! # fn peer_connected(&self, _their_node_id: &PublicKey, _msg: &Init, _inbound: bool) -> Result<(), ()> {
75+
//! # unimplemented!()
76+
//! # }
7177
//! # fn provided_node_features(&self) -> NodeFeatures {
7278
//! # unimplemented!()
7379
//! # }
@@ -114,6 +120,12 @@
114120
//! # fn get_and_clear_pending_msg(&self) -> Vec<(PublicKey, Self::CustomMessage)> {
115121
//! # unimplemented!()
116122
//! # }
123+
//! # fn peer_disconnected(&self, _their_node_id: &PublicKey) {
124+
//! # unimplemented!()
125+
//! # }
126+
//! # fn peer_connected(&self, _their_node_id: &PublicKey, _msg: &Init, _inbound: bool) -> Result<(), ()> {
127+
//! # unimplemented!()
128+
//! # }
117129
//! # fn provided_node_features(&self) -> NodeFeatures {
118130
//! # unimplemented!()
119131
//! # }
@@ -160,6 +172,12 @@
160172
//! # fn get_and_clear_pending_msg(&self) -> Vec<(PublicKey, Self::CustomMessage)> {
161173
//! # unimplemented!()
162174
//! # }
175+
//! # fn peer_disconnected(&self, _their_node_id: &PublicKey) {
176+
//! # unimplemented!()
177+
//! # }
178+
//! # fn peer_connected(&self, _their_node_id: &PublicKey, _msg: &Init, _inbound: bool) -> Result<(), ()> {
179+
//! # unimplemented!()
180+
//! # }
163181
//! # fn provided_node_features(&self) -> NodeFeatures {
164182
//! # unimplemented!()
165183
//! # }
@@ -287,6 +305,22 @@ macro_rules! composite_custom_message_handler {
287305
.collect()
288306
}
289307

308+
fn peer_disconnected(&self, their_node_id: &$crate::bitcoin::secp256k1::PublicKey) {
309+
$(
310+
self.$field.peer_disconnected(their_node_id);
311+
)*
312+
}
313+
314+
fn peer_connected(&self, their_node_id: &$crate::bitcoin::secp256k1::PublicKey, msg: &$crate::lightning::ln::msgs::Init, inbound: bool) -> Result<(), ()> {
315+
let mut result = Ok(());
316+
$(
317+
if let Err(e) = self.$field.peer_connected(their_node_id, msg, inbound) {
318+
result = Err(e);
319+
}
320+
)*
321+
result
322+
}
323+
290324
fn provided_node_features(&self) -> $crate::lightning::ln::features::NodeFeatures {
291325
$crate::lightning::ln::features::NodeFeatures::empty()
292326
$(

lightning/src/ln/peer_handler.rs

Lines changed: 27 additions & 2 deletions
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;
@@ -79,6 +79,16 @@ 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+
/// Indicates a peer disconnected.
83+
fn peer_disconnected(&self, their_node_id: &PublicKey);
84+
85+
/// Handle a peer connecting.
86+
///
87+
/// May return an `Err(())` if the features the peer supports are not sufficient to communicate
88+
/// with us. Implementors should be somewhat conservative about doing so, however, as other
89+
/// message handlers may still wish to communicate with this peer.
90+
fn peer_connected(&self, their_node_id: &PublicKey, msg: &Init, inbound: bool) -> Result<(), ()>;
91+
8292
/// Gets the node feature flags which this handler itself supports. All available handlers are
8393
/// queried similarly and their feature flags are OR'd together to form the [`NodeFeatures`]
8494
/// which are broadcasted in our [`NodeAnnouncement`] message.
@@ -190,6 +200,10 @@ impl CustomMessageHandler for IgnoringMessageHandler {
190200

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

203+
fn peer_disconnected(&self, _their_node_id: &PublicKey) {}
204+
205+
fn peer_connected(&self, _their_node_id: &PublicKey, _msg: &Init, _inbound: bool) -> Result<(), ()> { Ok(()) }
206+
193207
fn provided_node_features(&self) -> NodeFeatures { NodeFeatures::empty() }
194208

195209
fn provided_init_features(&self, _their_node_id: &PublicKey) -> InitFeatures {
@@ -1680,6 +1694,10 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
16801694
log_debug!(logger, "Onion Message Handler decided we couldn't communicate with peer {}", log_pubkey!(their_node_id));
16811695
return Err(PeerHandleError { }.into());
16821696
}
1697+
if let Err(()) = self.message_handler.custom_message_handler.peer_connected(&their_node_id, &msg, peer_lock.inbound_connection) {
1698+
log_debug!(logger, "Custom Message Handler decided we couldn't communicate with peer {}", log_pubkey!(their_node_id));
1699+
return Err(PeerHandleError { }.into());
1700+
}
16831701

16841702
peer_lock.awaiting_pong_timer_tick_intervals = 0;
16851703
peer_lock.their_features = Some(msg.features);
@@ -2430,6 +2448,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
24302448
log_trace!(WithContext::from(&self.logger, Some(node_id), None, None), "Disconnecting peer with id {} due to {}", node_id, reason);
24312449
self.message_handler.chan_handler.peer_disconnected(&node_id);
24322450
self.message_handler.onion_message_handler.peer_disconnected(&node_id);
2451+
self.message_handler.custom_message_handler.peer_disconnected(&node_id);
24332452
}
24342453
descriptor.disconnect_socket();
24352454
}
@@ -2452,6 +2471,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
24522471
if !peer.handshake_complete() { return; }
24532472
self.message_handler.chan_handler.peer_disconnected(&node_id);
24542473
self.message_handler.onion_message_handler.peer_disconnected(&node_id);
2474+
self.message_handler.custom_message_handler.peer_disconnected(&node_id);
24552475
}
24562476
}
24572477
};
@@ -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)