mirror of
https://github.com/lightningdevkit/rust-lightning.git
synced 2025-02-24 23:08:36 +01:00
Pass peer's Init message through to ChannelManager
This commit is contained in:
parent
f263b3793f
commit
d2ba7caf47
8 changed files with 43 additions and 40 deletions
|
@ -30,7 +30,7 @@ use lightning::ln::channelmonitor::{ChannelMonitor, ChannelMonitorUpdateErr, HTL
|
|||
use lightning::ln::channelmanager::{ChannelManager, PaymentHash, PaymentPreimage, ChannelManagerReadArgs};
|
||||
use lightning::ln::router::{Route, RouteHop};
|
||||
use lightning::ln::features::InitFeatures;
|
||||
use lightning::ln::msgs::{CommitmentUpdate, ChannelMessageHandler, ErrorAction, UpdateAddHTLC};
|
||||
use lightning::ln::msgs::{CommitmentUpdate, ChannelMessageHandler, ErrorAction, UpdateAddHTLC, Init};
|
||||
use lightning::util::enforcing_trait_impls::EnforcingChannelKeys;
|
||||
use lightning::util::events;
|
||||
use lightning::util::logger::Logger;
|
||||
|
@ -650,15 +650,15 @@ pub fn do_test(data: &[u8]) {
|
|||
},
|
||||
0x11 => {
|
||||
if chan_a_disconnected {
|
||||
nodes[0].peer_connected(&nodes[1].get_our_node_id());
|
||||
nodes[1].peer_connected(&nodes[0].get_our_node_id());
|
||||
nodes[0].peer_connected(&nodes[1].get_our_node_id(), &Init { features: InitFeatures::empty() });
|
||||
nodes[1].peer_connected(&nodes[0].get_our_node_id(), &Init { features: InitFeatures::empty() });
|
||||
chan_a_disconnected = false;
|
||||
}
|
||||
},
|
||||
0x12 => {
|
||||
if chan_b_disconnected {
|
||||
nodes[1].peer_connected(&nodes[2].get_our_node_id());
|
||||
nodes[2].peer_connected(&nodes[1].get_our_node_id());
|
||||
nodes[1].peer_connected(&nodes[2].get_our_node_id(), &Init { features: InitFeatures::empty() });
|
||||
nodes[2].peer_connected(&nodes[1].get_our_node_id(), &Init { features: InitFeatures::empty() });
|
||||
chan_b_disconnected = false;
|
||||
}
|
||||
},
|
||||
|
|
|
@ -215,10 +215,10 @@ fn do_test_monitor_temporary_update_fail(disconnect_count: usize) {
|
|||
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
|
||||
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
|
||||
|
||||
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id());
|
||||
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
|
||||
let reestablish_1 = get_chan_reestablish_msgs!(nodes[0], nodes[1]);
|
||||
assert_eq!(reestablish_1.len(), 1);
|
||||
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id());
|
||||
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
|
||||
let reestablish_2 = get_chan_reestablish_msgs!(nodes[1], nodes[0]);
|
||||
assert_eq!(reestablish_2.len(), 1);
|
||||
|
||||
|
@ -237,10 +237,10 @@ fn do_test_monitor_temporary_update_fail(disconnect_count: usize) {
|
|||
assert!(nodes[0].node.get_and_clear_pending_events().is_empty());
|
||||
assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
|
||||
|
||||
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id());
|
||||
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
|
||||
let reestablish_1 = get_chan_reestablish_msgs!(nodes[0], nodes[1]);
|
||||
assert_eq!(reestablish_1.len(), 1);
|
||||
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id());
|
||||
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
|
||||
let reestablish_2 = get_chan_reestablish_msgs!(nodes[1], nodes[0]);
|
||||
assert_eq!(reestablish_2.len(), 1);
|
||||
|
||||
|
@ -938,8 +938,8 @@ fn test_monitor_update_fail_reestablish() {
|
|||
commitment_signed_dance!(nodes[1], nodes[2], updates.commitment_signed, false);
|
||||
|
||||
*nodes[1].chan_monitor.update_ret.lock().unwrap() = Err(ChannelMonitorUpdateErr::TemporaryFailure);
|
||||
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id());
|
||||
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id());
|
||||
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
|
||||
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
|
||||
|
||||
let as_reestablish = get_event_msg!(nodes[0], MessageSendEvent::SendChannelReestablish, nodes[1].node.get_our_node_id());
|
||||
let bs_reestablish = get_event_msg!(nodes[1], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id());
|
||||
|
@ -954,8 +954,8 @@ fn test_monitor_update_fail_reestablish() {
|
|||
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
|
||||
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
|
||||
|
||||
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id());
|
||||
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id());
|
||||
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
|
||||
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
|
||||
|
||||
assert!(as_reestablish == get_event_msg!(nodes[0], MessageSendEvent::SendChannelReestablish, nodes[1].node.get_our_node_id()));
|
||||
assert!(bs_reestablish == get_event_msg!(nodes[1], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id()));
|
||||
|
@ -1118,8 +1118,8 @@ fn claim_while_disconnected_monitor_update_fail() {
|
|||
assert!(nodes[1].node.claim_funds(payment_preimage_1, 1_000_000));
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
|
||||
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id());
|
||||
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id());
|
||||
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
|
||||
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
|
||||
|
||||
let as_reconnect = get_event_msg!(nodes[0], MessageSendEvent::SendChannelReestablish, nodes[1].node.get_our_node_id());
|
||||
let bs_reconnect = get_event_msg!(nodes[1], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id());
|
||||
|
@ -1246,8 +1246,8 @@ fn monitor_failed_no_reestablish_response() {
|
|||
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
|
||||
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
|
||||
|
||||
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id());
|
||||
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id());
|
||||
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
|
||||
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
|
||||
|
||||
let as_reconnect = get_event_msg!(nodes[0], MessageSendEvent::SendChannelReestablish, nodes[1].node.get_our_node_id());
|
||||
let bs_reconnect = get_event_msg!(nodes[1], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id());
|
||||
|
|
|
@ -2853,7 +2853,7 @@ impl<ChanSigner: ChannelKeys> ChannelMessageHandler for ChannelManager<ChanSigne
|
|||
}
|
||||
}
|
||||
|
||||
fn peer_connected(&self, their_node_id: &PublicKey) {
|
||||
fn peer_connected(&self, their_node_id: &PublicKey, _init_msg: &msgs::Init) {
|
||||
log_debug!(self, "Generating channel_reestablish events for {}", log_pubkey!(their_node_id));
|
||||
|
||||
let _ = self.total_consistency_lock.read().unwrap();
|
||||
|
|
|
@ -1087,9 +1087,9 @@ macro_rules! handle_chan_reestablish_msgs {
|
|||
/// pending_htlc_adds includes both the holding cell and in-flight update_add_htlcs, whereas
|
||||
/// for claims/fails they are separated out.
|
||||
pub fn reconnect_nodes(node_a: &Node, node_b: &Node, send_funding_locked: (bool, bool), pending_htlc_adds: (i64, i64), pending_htlc_claims: (usize, usize), pending_cell_htlc_claims: (usize, usize), pending_cell_htlc_fails: (usize, usize), pending_raa: (bool, bool)) {
|
||||
node_a.node.peer_connected(&node_b.node.get_our_node_id());
|
||||
node_a.node.peer_connected(&node_b.node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
|
||||
let reestablish_1 = get_chan_reestablish_msgs!(node_a, node_b);
|
||||
node_b.node.peer_connected(&node_a.node.get_our_node_id());
|
||||
node_b.node.peer_connected(&node_a.node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
|
||||
let reestablish_2 = get_chan_reestablish_msgs!(node_b, node_a);
|
||||
|
||||
if send_funding_locked.0 {
|
||||
|
|
|
@ -852,9 +852,9 @@ fn do_test_shutdown_rebroadcast(recv_count: u8) {
|
|||
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
|
||||
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
|
||||
|
||||
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id());
|
||||
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
|
||||
let node_0_reestablish = get_event_msg!(nodes[0], MessageSendEvent::SendChannelReestablish, nodes[1].node.get_our_node_id());
|
||||
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id());
|
||||
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
|
||||
let node_1_reestablish = get_event_msg!(nodes[1], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id());
|
||||
|
||||
nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &node_0_reestablish);
|
||||
|
@ -916,9 +916,9 @@ fn do_test_shutdown_rebroadcast(recv_count: u8) {
|
|||
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
|
||||
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
|
||||
|
||||
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id());
|
||||
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
|
||||
let node_0_2nd_reestablish = get_event_msg!(nodes[0], MessageSendEvent::SendChannelReestablish, nodes[1].node.get_our_node_id());
|
||||
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id());
|
||||
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
|
||||
if recv_count == 0 {
|
||||
// If all closing_signeds weren't delivered we can just resume where we left off...
|
||||
let node_1_2nd_reestablish = get_event_msg!(nodes[1], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id());
|
||||
|
@ -3254,10 +3254,10 @@ fn test_drop_messages_peer_disconnect_dual_htlc() {
|
|||
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
|
||||
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
|
||||
|
||||
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id());
|
||||
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
|
||||
let reestablish_1 = get_chan_reestablish_msgs!(nodes[0], nodes[1]);
|
||||
assert_eq!(reestablish_1.len(), 1);
|
||||
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id());
|
||||
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
|
||||
let reestablish_2 = get_chan_reestablish_msgs!(nodes[1], nodes[0]);
|
||||
assert_eq!(reestablish_2.len(), 1);
|
||||
|
||||
|
@ -3451,9 +3451,9 @@ fn test_no_txn_manager_serialize_deserialize() {
|
|||
assert_eq!(nodes[0].node.list_channels().len(), 1);
|
||||
check_added_monitors!(nodes[0], 1);
|
||||
|
||||
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id());
|
||||
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
|
||||
let reestablish_1 = get_chan_reestablish_msgs!(nodes[0], nodes[1]);
|
||||
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id());
|
||||
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
|
||||
let reestablish_2 = get_chan_reestablish_msgs!(nodes[1], nodes[0]);
|
||||
|
||||
nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &reestablish_1[0]);
|
||||
|
@ -3586,9 +3586,9 @@ fn test_manager_serialize_deserialize_inconsistent_monitor() {
|
|||
//... and we can even still claim the payment!
|
||||
claim_payment(&nodes[2], &[&nodes[0], &nodes[1]], our_payment_preimage, 1_000_000);
|
||||
|
||||
nodes[3].node.peer_connected(&nodes[0].node.get_our_node_id());
|
||||
nodes[3].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
|
||||
let reestablish = get_event_msg!(nodes[3], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id());
|
||||
nodes[0].node.peer_connected(&nodes[3].node.get_our_node_id());
|
||||
nodes[0].node.peer_connected(&nodes[3].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
|
||||
nodes[0].node.handle_channel_reestablish(&nodes[3].node.get_our_node_id(), &reestablish);
|
||||
let msg_events = nodes[0].node.get_and_clear_pending_msg_events();
|
||||
assert_eq!(msg_events.len(), 1);
|
||||
|
@ -5380,10 +5380,10 @@ fn test_update_add_htlc_bolt2_receiver_check_repeated_id_ignore() {
|
|||
//Disconnect and Reconnect
|
||||
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
|
||||
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
|
||||
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id());
|
||||
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
|
||||
let reestablish_1 = get_chan_reestablish_msgs!(nodes[0], nodes[1]);
|
||||
assert_eq!(reestablish_1.len(), 1);
|
||||
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id());
|
||||
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
|
||||
let reestablish_2 = get_chan_reestablish_msgs!(nodes[1], nodes[0]);
|
||||
assert_eq!(reestablish_2.len(), 1);
|
||||
nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &reestablish_2[0]);
|
||||
|
@ -6155,8 +6155,8 @@ fn test_data_loss_protect() {
|
|||
|
||||
check_added_monitors!(nodes[0], 1);
|
||||
|
||||
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id());
|
||||
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id());
|
||||
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
|
||||
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
|
||||
|
||||
let reestablish_0 = get_chan_reestablish_msgs!(nodes[1], nodes[0]);
|
||||
|
||||
|
@ -6297,10 +6297,10 @@ fn test_announce_disable_channels() {
|
|||
}
|
||||
}
|
||||
// Reconnect peers
|
||||
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id());
|
||||
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
|
||||
let reestablish_1 = get_chan_reestablish_msgs!(nodes[0], nodes[1]);
|
||||
assert_eq!(reestablish_1.len(), 3);
|
||||
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id());
|
||||
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
|
||||
let reestablish_2 = get_chan_reestablish_msgs!(nodes[1], nodes[0]);
|
||||
assert_eq!(reestablish_2.len(), 3);
|
||||
|
||||
|
|
|
@ -56,7 +56,10 @@ pub enum DecodeError {
|
|||
|
||||
/// An init message to be sent or received from a peer
|
||||
pub struct Init {
|
||||
#[cfg(not(feature = "fuzztarget"))]
|
||||
pub(crate) features: InitFeatures,
|
||||
#[cfg(feature = "fuzztarget")]
|
||||
pub features: InitFeatures,
|
||||
}
|
||||
|
||||
/// An error message to be sent or received from a peer
|
||||
|
@ -571,7 +574,7 @@ pub trait ChannelMessageHandler : events::MessageSendEventsProvider + Send + Syn
|
|||
fn peer_disconnected(&self, their_node_id: &PublicKey, no_connection_possible: bool);
|
||||
|
||||
/// Handle a peer reconnecting, possibly generating channel_reestablish message(s).
|
||||
fn peer_connected(&self, their_node_id: &PublicKey);
|
||||
fn peer_connected(&self, their_node_id: &PublicKey, msg: &Init);
|
||||
/// Handle an incoming channel_reestablish message from the given peer.
|
||||
fn handle_channel_reestablish(&self, their_node_id: &PublicKey, msg: &ChannelReestablish);
|
||||
|
||||
|
|
|
@ -622,7 +622,6 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
|
|||
peer.sync_status = InitSyncTracker::ChannelsSyncing(0);
|
||||
peers.peers_needing_send.insert(peer_descriptor.clone());
|
||||
}
|
||||
peer.their_features = Some(msg.features);
|
||||
|
||||
if !peer.outbound {
|
||||
let mut features = InitFeatures::supported();
|
||||
|
@ -636,7 +635,8 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
|
|||
}, 16);
|
||||
}
|
||||
|
||||
self.message_handler.chan_handler.peer_connected(&peer.their_node_id.unwrap());
|
||||
self.message_handler.chan_handler.peer_connected(&peer.their_node_id.unwrap(), &msg);
|
||||
peer.their_features = Some(msg.features);
|
||||
},
|
||||
17 => {
|
||||
let msg = try_potential_decodeerror!(msgs::ErrorMessage::read(&mut reader));
|
||||
|
|
|
@ -117,7 +117,7 @@ impl msgs::ChannelMessageHandler for TestChannelMessageHandler {
|
|||
fn handle_announcement_signatures(&self, _their_node_id: &PublicKey, _msg: &msgs::AnnouncementSignatures) {}
|
||||
fn handle_channel_reestablish(&self, _their_node_id: &PublicKey, _msg: &msgs::ChannelReestablish) {}
|
||||
fn peer_disconnected(&self, _their_node_id: &PublicKey, _no_connection_possible: bool) {}
|
||||
fn peer_connected(&self, _their_node_id: &PublicKey) {}
|
||||
fn peer_connected(&self, _their_node_id: &PublicKey, _msg: &msgs::Init) {}
|
||||
fn handle_error(&self, _their_node_id: &PublicKey, _msg: &msgs::ErrorMessage) {}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue