Skip to content

Commit 9952362

Browse files
OR NodeFeatures from both Channel and Routing message handlers
When we broadcast a node announcement, the features we support are really a combination of all the various features our different handlers support. This commit captures this concept by OR'ing our NodeFeatures across both our channel and routing message handlers.
1 parent 4055dc0 commit 9952362

File tree

5 files changed

+21
-1
lines changed

5 files changed

+21
-1
lines changed

lightning-net-tokio/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -583,6 +583,7 @@ mod tests {
583583
fn handle_query_channel_range(&self, _their_node_id: &PublicKey, _msg: QueryChannelRange) -> Result<(), LightningError> { Ok(()) }
584584
fn handle_query_short_channel_ids(&self, _their_node_id: &PublicKey, _msg: QueryShortChannelIds) -> Result<(), LightningError> { Ok(()) }
585585
fn provided_init_features(&self, _their_node_id: &PublicKey) -> InitFeatures { InitFeatures::known() }
586+
fn provided_node_features(&self) -> NodeFeatures { NodeFeatures::known() }
586587
}
587588
impl ChannelMessageHandler for MsgHandler {
588589
fn handle_open_channel(&self, _their_node_id: &PublicKey, _their_features: InitFeatures, _msg: &OpenChannel) {}

lightning/src/ln/msgs.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -958,6 +958,10 @@ pub trait RoutingMessageHandler : MessageSendEventsProvider {
958958
fn handle_query_short_channel_ids(&self, their_node_id: &PublicKey, msg: QueryShortChannelIds) -> Result<(), LightningError>;
959959

960960
// Handler information:
961+
/// Gets the node feature flags which this handler itself supports. All available handlers are
962+
/// queried similarly and their feature flags are OR'd together to form the [`NodeFeatures`]
963+
/// which are broadcasted in our node_announcement message.
964+
fn provided_node_features(&self) -> NodeFeatures;
961965
/// Gets the init feature flags which should be sent to the given peer. All available handlers
962966
/// are queried similarly and their feature flags are OR'd together to form the [`InitFeatures`]
963967
/// which are sent in our [`Init`] message.

lightning/src/ln/peer_handler.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ impl RoutingMessageHandler for IgnoringMessageHandler {
8080
fn provided_init_features(&self, _their_node_id: &PublicKey) -> InitFeatures {
8181
InitFeatures::empty()
8282
}
83+
fn provided_node_features(&self) -> NodeFeatures { NodeFeatures::empty() }
8384
}
8485
impl OnionMessageProvider for IgnoringMessageHandler {
8586
fn next_onion_message_for_peer(&self, _peer_node_id: PublicKey) -> Option<msgs::OnionMessage> { None }
@@ -1969,8 +1970,10 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
19691970
// addresses be sorted for future compatibility.
19701971
addresses.sort_by_key(|addr| addr.get_id());
19711972

1973+
let features = self.message_handler.chan_handler.provided_node_features()
1974+
.or(self.message_handler.route_handler.provided_node_features());
19721975
let announcement = msgs::UnsignedNodeAnnouncement {
1973-
features: self.message_handler.chan_handler.provided_node_features(),
1976+
features,
19741977
timestamp: self.last_node_announcement_serial.fetch_add(1, Ordering::AcqRel) as u32,
19751978
node_id: PublicKey::from_secret_key(&self.secp_ctx, &self.our_node_secret),
19761979
rgb, alias, addresses,

lightning/src/routing/gossip.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -576,6 +576,12 @@ where C::Target: chain::Access, L::Target: Logger
576576
features.set_gossip_queries_optional();
577577
features
578578
}
579+
580+
fn provided_node_features(&self) -> NodeFeatures {
581+
let mut features = NodeFeatures::empty();
582+
features.set_gossip_queries_optional();
583+
features
584+
}
579585
}
580586

581587
impl<G: Deref<Target=NetworkGraph<L>>, C: Deref, L: Deref> MessageSendEventsProvider for P2PGossipSync<G, C, L>

lightning/src/util/test_utils.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -516,6 +516,12 @@ impl msgs::RoutingMessageHandler for TestRoutingMessageHandler {
516516
features.set_gossip_queries_optional();
517517
features
518518
}
519+
520+
fn provided_node_features(&self) -> NodeFeatures {
521+
let mut features = NodeFeatures::empty();
522+
features.set_gossip_queries_optional();
523+
features
524+
}
519525
}
520526

521527
impl events::MessageSendEventsProvider for TestRoutingMessageHandler {

0 commit comments

Comments
 (0)