X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=src%2Fln%2Frouter.rs;h=e4473fa41838d87072d87cb13747c24f984cc442;hb=e3effa4622b761e3bb74b33e6faca7bf56dfc0c6;hp=75df79450f3507d80969ee0eb186a3a8022d28f6;hpb=f47ba769f544c4fd2e2d1aa0bd5b1fa74ae15daa;p=rust-lightning diff --git a/src/ln/router.rs b/src/ln/router.rs index 75df7945..e4473fa4 100644 --- a/src/ln/router.rs +++ b/src/ln/router.rs @@ -3,7 +3,7 @@ use secp256k1::{Secp256k1,Message}; use bitcoin::util::hash::Sha256dHash; -use ln::msgs::{HandleError,RoutingMessageHandler,MsgEncodable,NetAddress,GlobalFeatures}; +use ln::msgs::{ErrorAction,HandleError,RoutingMessageHandler,MsgEncodable,NetAddress,GlobalFeatures}; use ln::msgs; use std::cmp; @@ -51,9 +51,9 @@ struct ChannelInfo { struct NodeInfo { #[cfg(feature = "non_bitcoin_chain_hash_routing")] - channels: Vec<(u64, Sha256dHash)>, + channels: Vec<(u64, Sha256dHash)>, #[cfg(not(feature = "non_bitcoin_chain_hash_routing"))] - channels: Vec, + channels: Vec, lowest_inbound_channel_fee_base_msat: u32, lowest_inbound_channel_fee_proportional_millionths: u32, @@ -122,10 +122,10 @@ impl RoutingMessageHandler for Router { let mut network = self.network_map.write().unwrap(); match network.nodes.get_mut(&msg.contents.node_id) { - None => Err(HandleError{err: "No existing channels for node_announcement", msg: None}), + None => Err(HandleError{err: "No existing channels for node_announcement", msg: Some(ErrorAction::IgnoreError)}), Some(node) => { if node.last_update >= msg.contents.timestamp { - return Err(HandleError{err: "Update older than last processed update", msg: None}); + return Err(HandleError{err: "Update older than last processed update", msg: Some(ErrorAction::IgnoreError)}); } node.features = msg.contents.features.clone(); @@ -159,7 +159,7 @@ impl RoutingMessageHandler for Router { //TODO: because asking the blockchain if short_channel_id is valid is only optional //in the blockchain API, we need to handle it smartly here, though its unclear //exactly how... - return Err(HandleError{err: "Already have knowledge of channel", msg: None}) + return Err(HandleError{err: "Already have knowledge of channel", msg: Some(ErrorAction::IgnoreError)}) }, Entry::Vacant(entry) => { entry.insert(ChannelInfo { @@ -214,6 +214,18 @@ impl RoutingMessageHandler for Router { Ok(!msg.contents.features.supports_unknown_bits()) } + fn handle_htlc_fail_channel_update(&self, update: &msgs::HTLCFailChannelUpdate) { + match update { + &msgs::HTLCFailChannelUpdate::ChannelUpdateMessage { ref msg } => { + let _ = self.handle_channel_update(msg); + }, + &msgs::HTLCFailChannelUpdate::ChannelClosed { ref short_channel_id } => { + let mut network = self.network_map.write().unwrap(); + network.channels.remove(short_channel_id); + }, + } + } + fn handle_channel_update(&self, msg: &msgs::ChannelUpdate) -> Result<(), HandleError> { let mut network = self.network_map.write().unwrap(); let dest_node_id; @@ -221,12 +233,12 @@ impl RoutingMessageHandler for Router { let chan_was_enabled; match network.channels.get_mut(&NetworkMap::get_key(msg.contents.short_channel_id, msg.contents.chain_hash)) { - None => return Err(HandleError{err: "Couldn't find channel for update", msg: None}), + None => return Err(HandleError{err: "Couldn't find channel for update", msg: Some(ErrorAction::IgnoreError)}), Some(channel) => { macro_rules! maybe_update_channel_info { ( $target: expr) => { if $target.last_update >= msg.contents.timestamp { - return Err(HandleError{err: "Update older than last processed update", msg: None}); + return Err(HandleError{err: "Update older than last processed update", msg: Some(ErrorAction::IgnoreError)}); } chan_was_enabled = $target.enabled; $target.last_update = msg.contents.timestamp;