Skip to content

Commit 110c861

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 1128d85 commit 110c861

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
@@ -6171,6 +6171,10 @@ impl<Signer: Sign, M: Deref , T: Deref , K: Deref , F: Deref , L: Deref >
61716171
fn provided_node_features(&self) -> NodeFeatures {
61726172
NodeFeatures::known()
61736173
}
6174+
6175+
fn provided_init_features(&self, _their_init_features: &PublicKey) -> InitFeatures {
6176+
InitFeatures::known()
6177+
}
61746178
}
61756179

61766180
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;
@@ -1049,7 +1050,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
10491050

10501051
peer.their_node_id = Some(their_node_id);
10511052
insert_node_id!();
1052-
let features = InitFeatures::known();
1053+
let features = self.message_handler.chan_handler.provided_init_features(&their_node_id);
10531054
let resp = msgs::Init { features, remote_network_address: filter_addresses(peer.their_net_address.clone()) };
10541055
self.enqueue_message(peer, &resp);
10551056
peer.awaiting_pong_timer_tick_intervals = 0;
@@ -1061,7 +1062,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
10611062
peer.pending_read_is_header = true;
10621063
peer.their_node_id = Some(their_node_id);
10631064
insert_node_id!();
1064-
let features = InitFeatures::known();
1065+
let features = self.message_handler.chan_handler.provided_init_features(&their_node_id);
10651066
let resp = msgs::Init { features, remote_network_address: filter_addresses(peer.their_net_address.clone()) };
10661067
self.enqueue_message(peer, &resp);
10671068
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)