X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=lightning%2Fsrc%2Fln%2Ffeatures.rs;h=91922f1a45f26748f9fdaf8c7ba009a068f6d6b9;hb=3a3c931c5a5bc49197c021aaf98bc98b76176de7;hp=c978c61a3a563428e38f3368e557e544a6c623b9;hpb=e45db2bf6c900fe70d679a75f450456c7a5b09cc;p=rust-lightning diff --git a/lightning/src/ln/features.rs b/lightning/src/ln/features.rs index c978c61a..91922f1a 100644 --- a/lightning/src/ln/features.rs +++ b/lightning/src/ln/features.rs @@ -163,6 +163,8 @@ mod sealed { , ], optional_features: [ + // Note that if new "non-channel-related" flags are added here they should be + // explicitly cleared in InitFeatures::known_channel_features. // Byte 0 DataLossProtect | InitialRoutingSync | UpfrontShutdownScript | GossipQueries, // Byte 1 @@ -545,6 +547,14 @@ impl InitFeatures { pub(crate) fn to_context(&self) -> Features { self.to_context_internal() } + + /// Returns the set of known init features that are related to channels. At least some of + /// these features are likely required for peers to talk to us. + pub fn known_channel_features() -> InitFeatures { + Self::known() + .clear_initial_routing_sync() + .clear_gossip_queries() + } } impl InvoiceFeatures { @@ -763,7 +773,6 @@ impl Features { impl Features { - #[cfg(test)] pub(crate) fn clear_gossip_queries(mut self) -> Self { ::clear_bits(&mut self.flags); self @@ -771,12 +780,10 @@ impl Features { } impl Features { - // We are no longer setting initial_routing_sync now that gossip_queries - // is enabled. This feature is ignored by a peer when gossip_queries has - // been negotiated. - #[cfg(test)] - pub(crate) fn clear_initial_routing_sync(&mut self) { - ::clear_bits(&mut self.flags) + // Note that initial_routing_sync is ignored if gossip_queries is set. + pub(crate) fn clear_initial_routing_sync(mut self) -> Self { + ::clear_bits(&mut self.flags); + self } } @@ -915,7 +922,7 @@ mod tests { let mut init_features = InitFeatures::known(); assert!(init_features.initial_routing_sync()); - init_features.clear_initial_routing_sync(); + init_features = init_features.clear_initial_routing_sync(); assert!(!init_features.initial_routing_sync()); }