mirror of
https://github.com/lightningdevkit/rust-lightning.git
synced 2025-03-04 02:54:05 +01:00
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.
This commit is contained in:
parent
fe8b4c7836
commit
c106d4ff9f
5 changed files with 21 additions and 1 deletions
|
@ -582,6 +582,7 @@ mod tests {
|
|||
fn handle_reply_short_channel_ids_end(&self, _their_node_id: &PublicKey, _msg: ReplyShortChannelIdsEnd) -> Result<(), LightningError> { Ok(()) }
|
||||
fn handle_query_channel_range(&self, _their_node_id: &PublicKey, _msg: QueryChannelRange) -> Result<(), LightningError> { Ok(()) }
|
||||
fn handle_query_short_channel_ids(&self, _their_node_id: &PublicKey, _msg: QueryShortChannelIds) -> Result<(), LightningError> { Ok(()) }
|
||||
fn provided_node_features(&self) -> NodeFeatures { NodeFeatures::known() }
|
||||
fn provided_init_features(&self, _their_node_id: &PublicKey) -> InitFeatures { InitFeatures::known() }
|
||||
}
|
||||
impl ChannelMessageHandler for MsgHandler {
|
||||
|
|
|
@ -958,6 +958,10 @@ pub trait RoutingMessageHandler : MessageSendEventsProvider {
|
|||
fn handle_query_short_channel_ids(&self, their_node_id: &PublicKey, msg: QueryShortChannelIds) -> Result<(), LightningError>;
|
||||
|
||||
// Handler information:
|
||||
/// Gets the node feature flags which this handler itself supports. All available handlers are
|
||||
/// queried similarly and their feature flags are OR'd together to form the [`NodeFeatures`]
|
||||
/// which are broadcasted in our [`NodeAnnouncement`] message.
|
||||
fn provided_node_features(&self) -> NodeFeatures;
|
||||
/// Gets the init feature flags which should be sent to the given peer. All available handlers
|
||||
/// are queried similarly and their feature flags are OR'd together to form the [`InitFeatures`]
|
||||
/// which are sent in our [`Init`] message.
|
||||
|
|
|
@ -77,6 +77,7 @@ impl RoutingMessageHandler for IgnoringMessageHandler {
|
|||
fn handle_reply_short_channel_ids_end(&self, _their_node_id: &PublicKey, _msg: msgs::ReplyShortChannelIdsEnd) -> Result<(), LightningError> { Ok(()) }
|
||||
fn handle_query_channel_range(&self, _their_node_id: &PublicKey, _msg: msgs::QueryChannelRange) -> Result<(), LightningError> { Ok(()) }
|
||||
fn handle_query_short_channel_ids(&self, _their_node_id: &PublicKey, _msg: msgs::QueryShortChannelIds) -> Result<(), LightningError> { Ok(()) }
|
||||
fn provided_node_features(&self) -> NodeFeatures { NodeFeatures::empty() }
|
||||
fn provided_init_features(&self, _their_node_id: &PublicKey) -> InitFeatures {
|
||||
InitFeatures::empty()
|
||||
}
|
||||
|
@ -1969,8 +1970,10 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
|
|||
// addresses be sorted for future compatibility.
|
||||
addresses.sort_by_key(|addr| addr.get_id());
|
||||
|
||||
let features = self.message_handler.chan_handler.provided_node_features()
|
||||
.or(self.message_handler.route_handler.provided_node_features());
|
||||
let announcement = msgs::UnsignedNodeAnnouncement {
|
||||
features: self.message_handler.chan_handler.provided_node_features(),
|
||||
features,
|
||||
timestamp: self.last_node_announcement_serial.fetch_add(1, Ordering::AcqRel) as u32,
|
||||
node_id: PublicKey::from_secret_key(&self.secp_ctx, &self.our_node_secret),
|
||||
rgb, alias, addresses,
|
||||
|
|
|
@ -571,6 +571,12 @@ where C::Target: chain::Access, L::Target: Logger
|
|||
})
|
||||
}
|
||||
|
||||
fn provided_node_features(&self) -> NodeFeatures {
|
||||
let mut features = NodeFeatures::empty();
|
||||
features.set_gossip_queries_optional();
|
||||
features
|
||||
}
|
||||
|
||||
fn provided_init_features(&self, _their_node_id: &PublicKey) -> InitFeatures {
|
||||
let mut features = InitFeatures::empty();
|
||||
features.set_gossip_queries_optional();
|
||||
|
|
|
@ -511,6 +511,12 @@ impl msgs::RoutingMessageHandler for TestRoutingMessageHandler {
|
|||
Ok(())
|
||||
}
|
||||
|
||||
fn provided_node_features(&self) -> NodeFeatures {
|
||||
let mut features = NodeFeatures::empty();
|
||||
features.set_gossip_queries_optional();
|
||||
features
|
||||
}
|
||||
|
||||
fn provided_init_features(&self, _their_init_features: &PublicKey) -> InitFeatures {
|
||||
let mut features = InitFeatures::empty();
|
||||
features.set_gossip_queries_optional();
|
||||
|
|
Loading…
Add table
Reference in a new issue