Skip to content

Commit fbb78b1

Browse files
committed
Fetch our InitFeatures from ChannelMessageHandler
Like we now do for `NodeFeatures`, this converts to asking our registered `ChannelMessageHandler` for our `InitFeatures` instead of hard-coding them to the global LDK known set. This allows handlers to set different feature bits based on what our configuration actually supports rather than what LDK supports in aggregate.
1 parent e2495f2 commit fbb78b1

File tree

5 files changed

+18
-2
lines changed

5 files changed

+18
-2
lines changed

lightning-net-tokio/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -614,6 +614,7 @@ mod tests {
614614
fn handle_channel_reestablish(&self, _their_node_id: &PublicKey, _msg: &ChannelReestablish) {}
615615
fn handle_error(&self, _their_node_id: &PublicKey, _msg: &ErrorMessage) {}
616616
fn provided_node_features(&self) -> NodeFeatures { NodeFeatures::known() }
617+
fn provided_init_features(&self, _their_node_id: &PublicKey) -> InitFeatures { InitFeatures::known() }
617618
}
618619
impl MessageSendEventsProvider for MsgHandler {
619620
fn get_and_clear_pending_msg_events(&self) -> Vec<MessageSendEvent> {

lightning/src/ln/channelmanager.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6159,6 +6159,10 @@ impl<Signer: Sign, M: Deref , T: Deref , K: Deref , F: Deref , L: Deref >
61596159
fn provided_node_features(&self) -> NodeFeatures {
61606160
NodeFeatures::known()
61616161
}
6162+
6163+
fn provided_init_features(&self, _their_init_features: &PublicKey) -> InitFeatures {
6164+
InitFeatures::known()
6165+
}
61626166
}
61636167

61646168
const SERIALIZATION_VERSION: u8 = 1;

lightning/src/ln/msgs.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -902,6 +902,13 @@ pub trait ChannelMessageHandler : MessageSendEventsProvider {
902902
/// queried similarly and their feature flags are OR'd together to form the [`NodeFeatures`]
903903
/// which are broadcasted in our node_announcement message.
904904
fn provided_node_features(&self) -> NodeFeatures;
905+
906+
/// Gets the init feature flags which should be sent to the given peer. All available handlers
907+
/// are queried similarly and their feature flags are OR'd together to form the [`InitFeatures`]
908+
/// which are sent in our [`Init`] message.
909+
///
910+
/// Note that this method is called before [`peer_connected`].
911+
fn provided_init_features(&self, their_node_id: &PublicKey) -> InitFeatures;
905912
}
906913

907914
/// A trait to describe an object which can receive routing messages.

lightning/src/ln/peer_handler.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,7 @@ impl ChannelMessageHandler for ErroringMessageHandler {
203203
fn peer_connected(&self, _their_node_id: &PublicKey, _msg: &msgs::Init) {}
204204
fn handle_error(&self, _their_node_id: &PublicKey, _msg: &msgs::ErrorMessage) {}
205205
fn provided_node_features(&self) -> NodeFeatures { NodeFeatures::empty() }
206+
fn provided_init_features(&self, _their_node_id: &PublicKey) -> InitFeatures { InitFeatures::known() }
206207
}
207208
impl Deref for ErroringMessageHandler {
208209
type Target = ErroringMessageHandler;
@@ -1052,7 +1053,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
10521053

10531054
peer.their_node_id = Some(their_node_id);
10541055
insert_node_id!();
1055-
let features = InitFeatures::known();
1056+
let features = self.message_handler.chan_handler.provided_init_features(&their_node_id);
10561057
let resp = msgs::Init { features, remote_network_address: filter_addresses(peer.their_net_address.clone()) };
10571058
self.enqueue_message(peer, &resp);
10581059
peer.awaiting_pong_timer_tick_intervals = 0;
@@ -1064,7 +1065,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
10641065
peer.pending_read_is_header = true;
10651066
peer.their_node_id = Some(their_node_id);
10661067
insert_node_id!();
1067-
let features = InitFeatures::known();
1068+
let features = self.message_handler.chan_handler.provided_init_features(&their_node_id);
10681069
let resp = msgs::Init { features, remote_network_address: filter_addresses(peer.their_net_address.clone()) };
10691070
self.enqueue_message(peer, &resp);
10701071
peer.awaiting_pong_timer_tick_intervals = 0;

lightning/src/util/test_utils.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -360,6 +360,9 @@ impl msgs::ChannelMessageHandler for TestChannelMessageHandler {
360360
fn provided_node_features(&self) -> NodeFeatures {
361361
NodeFeatures::empty()
362362
}
363+
fn provided_init_features(&self, _their_init_features: &PublicKey) -> InitFeatures {
364+
InitFeatures::known()
365+
}
363366
}
364367

365368
impl events::MessageSendEventsProvider for TestChannelMessageHandler {

0 commit comments

Comments
 (0)