pub enum DecodeError {
/// Unknown realm byte in an OnionHopData packet
UnknownRealmByte,
+ /// Unknown feature mandating we fail to parse message
+ UnknownRequiredFeature,
/// Failed to decode a public key (ie it's invalid)
BadPublicKey,
/// Failed to decode a signature (ie it's invalid)
}
pub trait RoutingMessageHandler : Send + Sync {
- fn handle_node_announcement(&self, msg: &NodeAnnouncement) -> Result<(), HandleError>;
+ fn handle_node_announcement(&self, msg: &NodeAnnouncement) -> Result<bool, HandleError>;
/// Handle a channel_announcement message, returning true if it should be forwarded on, false
/// or returning an Err otherwise.
fn handle_channel_announcement(&self, msg: &ChannelAnnouncement) -> Result<bool, HandleError>;
- fn handle_channel_update(&self, msg: &ChannelUpdate) -> Result<(), HandleError>;
+ fn handle_channel_update(&self, msg: &ChannelUpdate) -> Result<bool, HandleError>;
fn handle_htlc_fail_channel_update(&self, update: &HTLCFailChannelUpdate);
}
fn description(&self) -> &str {
match *self {
DecodeError::UnknownRealmByte => "Unknown realm byte in Onion packet",
+ DecodeError::UnknownRequiredFeature => "Unknown required feature preventing decode",
DecodeError::BadPublicKey => "Invalid public key in packet",
DecodeError::BadSignature => "Invalid signature in packet",
DecodeError::BadText => "Invalid text in packet",
}
shutdown_scriptpubkey = Some(Script::from(v[321..321+len].to_vec()));
}
-
+ let mut temp_channel_id = [0; 32];
+ temp_channel_id[..].copy_from_slice(&v[32..64]);
Ok(OpenChannel {
chain_hash: deserialize(&v[0..32]).unwrap(),
- temporary_channel_id: deserialize(&v[32..64]).unwrap(),
+ temporary_channel_id: temp_channel_id,
funding_satoshis: byte_utils::slice_to_be64(&v[64..72]),
push_msat: byte_utils::slice_to_be64(&v[72..80]),
dust_limit_satoshis: byte_utils::slice_to_be64(&v[80..88]),
impl MsgDecodable for UnsignedNodeAnnouncement {
fn decode(v: &[u8]) -> Result<Self, DecodeError> {
let features = GlobalFeatures::decode(&v[..])?;
+ if features.requires_unknown_bits() {
+ return Err(DecodeError::UnknownRequiredFeature);
+ }
+
if v.len() < features.encoded_len() + 4 + 33 + 3 + 32 + 2 {
return Err(DecodeError::ShortRead);
}
impl MsgDecodable for UnsignedChannelAnnouncement {
fn decode(v: &[u8]) -> Result<Self, DecodeError> {
let features = GlobalFeatures::decode(&v[..])?;
+ if features.requires_unknown_bits() {
+ return Err(DecodeError::UnknownRequiredFeature);
+ }
if v.len() < features.encoded_len() + 32 + 8 + 33*4 {
return Err(DecodeError::ShortRead);
}