X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;ds=sidebyside;f=lightning%2Fsrc%2Fln%2Fmsgs.rs;h=cccbf83acd2a740271f8d962e67d6038c4b61f75;hb=0ad8fde0d6350d2ab3133c515bc09d39d242fa1a;hp=e48080103bd1b1642c390ae3eb8e5ea1fd712a05;hpb=31cc243e6f04e82f7754d26df7a2bb0275d7ebd1;p=rust-lightning diff --git a/lightning/src/ln/msgs.rs b/lightning/src/ln/msgs.rs index e4808010..cccbf83a 100644 --- a/lightning/src/ln/msgs.rs +++ b/lightning/src/ln/msgs.rs @@ -192,6 +192,23 @@ impl Features { pub(crate) fn byte_count(&self) -> usize { self.flags.len() } + + #[cfg(test)] + pub(crate) fn set_require_unknown_bits(&mut self) { + let newlen = cmp::max(2, self.flags.len()); + self.flags.resize(newlen, 0u8); + self.flags[1] |= 0x40; + } + + #[cfg(test)] + pub(crate) fn clear_require_unknown_bits(&mut self) { + let newlen = cmp::max(2, self.flags.len()); + self.flags.resize(newlen, 0u8); + self.flags[1] &= !0x40; + if self.flags.len() == 2 && self.flags[1] == 0 { + self.flags.resize(1, 0u8); + } + } } impl Features { @@ -1272,13 +1289,7 @@ impl Writeable for UnsignedChannelAnnouncement { impl Readable for UnsignedChannelAnnouncement { fn read(r: &mut R) -> Result { Ok(Self { - features: { - let f: ChannelFeatures = Readable::read(r)?; - if f.requires_unknown_bits() { - return Err(DecodeError::UnknownRequiredFeature); - } - f - }, + features: Readable::read(r)?, chain_hash: Readable::read(r)?, short_channel_id: Readable::read(r)?, node_id_1: Readable::read(r)?, @@ -1406,9 +1417,6 @@ impl Writeable for UnsignedNodeAnnouncement { impl Readable for UnsignedNodeAnnouncement { fn read(r: &mut R) -> Result { let features: NodeFeatures = Readable::read(r)?; - if features.requires_unknown_bits() { - return Err(DecodeError::UnknownRequiredFeature); - } let timestamp: u32 = Readable::read(r)?; let node_id: PublicKey = Readable::read(r)?; let mut rgb = [0; 3];