When ChannelMessageHandler implementations wish to return a NodeFeatures which
contain all the known flags that are relevant to channel handling, but not
gossip handling, they currently need to do so by manually constructing a
NodeFeatures with all known flags and then clearing the ones they don't want.
Instead of spreading this logic across the codebase, this consolidates such
construction into one place in features.rs.
}
fn provided_node_features(&self) -> NodeFeatures {
- NodeFeatures::known()
+ NodeFeatures::known_channel_features()
}
fn provided_init_features(&self, _their_init_features: &PublicKey) -> InitFeatures {
],
optional_features: [
// Note that if new "non-channel-related" flags are added here they should be
- // explicitly cleared in InitFeatures::known_channel_features.
+ // explicitly cleared in InitFeatures::known_channel_features and
+ // NodeFeatures::known_channel_features.
// Byte 0
DataLossProtect | InitialRoutingSync | UpfrontShutdownScript | GossipQueries,
// Byte 1
}
}
+impl NodeFeatures {
+ /// Returns the set of known node features that are related to channels.
+ pub fn known_channel_features() -> NodeFeatures {
+ Self::known().clear_gossip_queries()
+ }
+}
+
impl InvoiceFeatures {
/// Converts `InvoiceFeatures` to `Features<C>`. Only known `InvoiceFeatures` relevant to
/// context `C` are included in the result.
self.received_msg(wire::Message::Error(msg.clone()));
}
fn provided_node_features(&self) -> NodeFeatures {
- NodeFeatures::empty()
+ NodeFeatures::known_channel_features()
}
fn provided_init_features(&self, _their_init_features: &PublicKey) -> InitFeatures {
InitFeatures::known_channel_features()