Add update_fail_malformed_htlcs vec to CommitmentUpdate
[rust-lightning] / src / ln / peer_handler.rs
index 53788b3f265bf53b3505c4b10adc8d372ba1bfc2..9315f56902d767339285d146235c18f62cffb982 100644 (file)
@@ -431,7 +431,24 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
                                                                                                }
                                                                                        },
                                                                                        17 => {
-                                                                                               // Error msg
+                                                                                               let msg = try_potential_decodeerror!(msgs::ErrorMessage::decode(&msg_data[2..]));
+                                                                                               let mut data_is_printable = true;
+                                                                                               for b in msg.data.bytes() {
+                                                                                                       if b < 32 || b > 126 {
+                                                                                                               data_is_printable = false;
+                                                                                                               break;
+                                                                                                       }
+                                                                                               }
+
+                                                                                               if data_is_printable {
+                                                                                                       log_debug!(self, "Got Err message from {}: {}", log_pubkey!(peer.their_node_id.unwrap()), msg.data);
+                                                                                               } else {
+                                                                                                       log_debug!(self, "Got Err message from {} with non-ASCII error message", log_pubkey!(peer.their_node_id.unwrap()));
+                                                                                               }
+                                                                                               self.message_handler.chan_handler.handle_error(&peer.their_node_id.unwrap(), &msg);
+                                                                                               if msg.channel_id == [0; 32] {
+                                                                                                       return Err(PeerHandleError{ no_connection_possible: true });
+                                                                                               }
                                                                                        },
 
                                                                                        18 => {
@@ -680,7 +697,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
                                                Self::do_attempt_write_data(&mut descriptor, peer);
                                                continue;
                                        },
-                                       Event::UpdateHTLCs { ref node_id, updates: msgs::CommitmentUpdate { ref update_add_htlcs, ref update_fulfill_htlcs, ref update_fail_htlcs, ref commitment_signed } } => {
+                                       Event::UpdateHTLCs { ref node_id, updates: msgs::CommitmentUpdate { ref update_add_htlcs, ref update_fulfill_htlcs, ref update_fail_htlcs, ref update_fail_malformed_htlcs, ref commitment_signed } } => {
                                                log_trace!(self, "Handling UpdateHTLCs event in peer_handler for node {} with {} adds, {} fulfills, {} fails for channel {}",
                                                                log_pubkey!(node_id),
                                                                update_add_htlcs.len(),
@@ -699,6 +716,9 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
                                                for msg in update_fail_htlcs {
                                                        peer.pending_outbound_buffer.push_back(peer.channel_encryptor.encrypt_message(&encode_msg!(msg, 131)));
                                                }
+                                               for msg in update_fail_malformed_htlcs {
+                                                       peer.pending_outbound_buffer.push_back(peer.channel_encryptor.encrypt_message(&encode_msg!(msg, 135)));
+                                               }
                                                peer.pending_outbound_buffer.push_back(peer.channel_encryptor.encrypt_message(&encode_msg!(commitment_signed, 132)));
                                                Self::do_attempt_write_data(&mut descriptor, peer);
                                                continue;