]> git.bitcoin.ninja Git - rust-lightning/commitdiff
Fix XXXs that slipped into router and handle HTLCFailCHannelUpdates
authorMatt Corallo <git@bluematt.me>
Wed, 24 Oct 2018 04:44:15 +0000 (00:44 -0400)
committerMatt Corallo <git@bluematt.me>
Wed, 24 Oct 2018 04:44:15 +0000 (00:44 -0400)
src/ln/router.rs

index 4c3bcb98074fd8301941739c9352ce6bef593e05..0d049f5a78d6bfcb68bd41a49ab06602e98069c3 100644 (file)
@@ -349,18 +349,25 @@ impl RoutingMessageHandler for Router {
                        &msgs::HTLCFailChannelUpdate::ChannelUpdateMessage { ref msg } => {
                                let _ = self.handle_channel_update(msg);
                        },
-                       &msgs::HTLCFailChannelUpdate::ChannelClosed { ref short_channel_id, is_permanent:_ } => {
-//XXX
+                       &msgs::HTLCFailChannelUpdate::ChannelClosed { ref short_channel_id, ref is_permanent } => {
                                let mut network = self.network_map.write().unwrap();
-                               if let Some(chan) = network.channels.remove(short_channel_id) {
-                                       Self::remove_channel_in_nodes(&mut network.nodes, &chan, *short_channel_id);
+                               if *is_permanent {
+                                       if let Some(chan) = network.channels.remove(short_channel_id) {
+                                               Self::remove_channel_in_nodes(&mut network.nodes, &chan, *short_channel_id);
+                                       }
+                               } else {
+                                       if let Some(chan) = network.channels.get_mut(short_channel_id) {
+                                               chan.one_to_two.enabled = false;
+                                               chan.two_to_one.enabled = false;
+                                       }
                                }
                        },
-                       &msgs::HTLCFailChannelUpdate::NodeFailure { ref node_id, is_permanent:_ } => {
-//XXX
-                               //let mut network = self.network_map.write().unwrap();
-                               //TODO: check _blamed_upstream_node
-                               self.mark_node_bad(node_id, false);
+                       &msgs::HTLCFailChannelUpdate::NodeFailure { ref node_id, ref is_permanent } => {
+                               if *is_permanent {
+                                       //TODO: Wholly remove the node
+                               } else {
+                                       self.mark_node_bad(node_id, false);
+                               }
                        },
                }
        }