@@ -7545,140 +7545,94 @@ where
7545
7545
}
7546
7546
}
7547
7547
7548
- fn internal_tx_add_input(&self, counterparty_node_id: &PublicKey, msg: &msgs::TxAddInput) -> Result<(), MsgHandleErrInternal> {
7548
+ fn internal_tx_msg<HandleTxMsgFn: Fn(&mut ChannelPhase<SP>) -> Result<MessageSendEvent, &'static str>>(
7549
+ &self, counterparty_node_id: &PublicKey, channel_id: ChannelId, tx_msg_handler: HandleTxMsgFn
7550
+ ) -> Result<(), MsgHandleErrInternal> {
7549
7551
let per_peer_state = self.per_peer_state.read().unwrap();
7550
7552
let peer_state_mutex = per_peer_state.get(counterparty_node_id)
7551
7553
.ok_or_else(|| {
7552
7554
debug_assert!(false);
7553
7555
MsgHandleErrInternal::send_err_msg_no_close(
7554
7556
format!("Can't find a peer matching the passed counterparty node_id {}", counterparty_node_id),
7555
- msg. channel_id)
7557
+ channel_id)
7556
7558
})?;
7557
7559
let mut peer_state_lock = peer_state_mutex.lock().unwrap();
7558
7560
let peer_state = &mut *peer_state_lock;
7559
- match peer_state.channel_by_id.entry(msg. channel_id) {
7561
+ match peer_state.channel_by_id.entry(channel_id) {
7560
7562
hash_map::Entry::Occupied(mut chan_phase_entry) => {
7561
7563
let channel_phase = chan_phase_entry.get_mut();
7562
- let msg_send_event = match channel_phase {
7563
- ChannelPhase::UnfundedInboundV2(ref mut channel) => {
7564
- channel.tx_add_input(msg).into_msg_send_event(counterparty_node_id)
7565
- },
7566
- ChannelPhase::UnfundedOutboundV2(ref mut channel) => {
7567
- channel.tx_add_input(msg).into_msg_send_event(counterparty_node_id)
7568
- },
7569
- _ => try_chan_phase_entry!(self, Err(ChannelError::Warn(
7570
- "Got a tx_add_input message with no interactive transaction construction expected or in-progress"
7571
- .into())), chan_phase_entry)
7564
+ let msg_send_event = match tx_msg_handler(channel_phase) {
7565
+ Ok(msg_send_event) => msg_send_event,
7566
+ Err(tx_msg_str) => try_chan_phase_entry!(self, Err(ChannelError::Warn(
7567
+ format!("Got a {tx_msg_str} message with no interactive transaction construction expected or in-progress")
7568
+ )), chan_phase_entry)
7572
7569
};
7573
7570
peer_state.pending_msg_events.push(msg_send_event);
7574
7571
Ok(())
7575
7572
},
7576
7573
hash_map::Entry::Vacant(_) => {
7577
- Err(MsgHandleErrInternal::send_err_msg_no_close(format!("Got a message for a channel from the wrong node! No such channel for the passed counterparty_node_id {}", counterparty_node_id), msg.channel_id))
7574
+ Err(MsgHandleErrInternal::send_err_msg_no_close(format!(
7575
+ "Got a message for a channel from the wrong node! No such channel for the passed counterparty_node_id {}",
7576
+ counterparty_node_id), channel_id)
7577
+ )
7578
7578
}
7579
7579
}
7580
7580
}
7581
7581
7582
+ fn internal_tx_add_input(&self, counterparty_node_id: &PublicKey, msg: &msgs::TxAddInput) -> Result<(), MsgHandleErrInternal> {
7583
+ self.internal_tx_msg(counterparty_node_id, msg.channel_id, |channel_phase: &mut ChannelPhase<SP>| {
7584
+ match channel_phase {
7585
+ ChannelPhase::UnfundedInboundV2(ref mut channel) => {
7586
+ Ok(channel.tx_add_input(msg).into_msg_send_event(counterparty_node_id))
7587
+ },
7588
+ ChannelPhase::UnfundedOutboundV2(ref mut channel) => {
7589
+ Ok(channel.tx_add_input(msg).into_msg_send_event(counterparty_node_id))
7590
+ },
7591
+ _ => Err("tx_add_input"),
7592
+ }
7593
+ })
7594
+ }
7595
+
7582
7596
fn internal_tx_add_output(&self, counterparty_node_id: &PublicKey, msg: &msgs::TxAddOutput) -> Result<(), MsgHandleErrInternal> {
7583
- let per_peer_state = self.per_peer_state.read().unwrap();
7584
- let peer_state_mutex = per_peer_state.get(counterparty_node_id)
7585
- .ok_or_else(|| {
7586
- debug_assert!(false);
7587
- MsgHandleErrInternal::send_err_msg_no_close(
7588
- format!("Can't find a peer matching the passed counterparty node_id {}", counterparty_node_id),
7589
- msg.channel_id)
7590
- })?;
7591
- let mut peer_state_lock = peer_state_mutex.lock().unwrap();
7592
- let peer_state = &mut *peer_state_lock;
7593
- match peer_state.channel_by_id.entry(msg.channel_id) {
7594
- hash_map::Entry::Occupied(mut chan_phase_entry) => {
7595
- let channel_phase = chan_phase_entry.get_mut();
7596
- let msg_send_event = match channel_phase {
7597
- ChannelPhase::UnfundedInboundV2(ref mut channel) => {
7598
- channel.tx_add_output(msg).into_msg_send_event(counterparty_node_id)
7599
- },
7600
- ChannelPhase::UnfundedOutboundV2(ref mut channel) => {
7601
- channel.tx_add_output(msg).into_msg_send_event(counterparty_node_id)
7602
- },
7603
- _ => try_chan_phase_entry!(self, Err(ChannelError::Warn(
7604
- "Got a tx_add_output message with no interactive transaction construction expected or in-progress"
7605
- .into())), chan_phase_entry)
7606
- };
7607
- peer_state.pending_msg_events.push(msg_send_event);
7608
- Ok(())
7609
- },
7610
- hash_map::Entry::Vacant(_) => {
7611
- Err(MsgHandleErrInternal::send_err_msg_no_close(format!("Got a message for a channel from the wrong node! No such channel for the passed counterparty_node_id {}", counterparty_node_id), msg.channel_id))
7597
+ self.internal_tx_msg(counterparty_node_id, msg.channel_id, |channel_phase: &mut ChannelPhase<SP>| {
7598
+ match channel_phase {
7599
+ ChannelPhase::UnfundedInboundV2(ref mut channel) => {
7600
+ Ok(channel.tx_add_output(msg).into_msg_send_event(counterparty_node_id))
7601
+ },
7602
+ ChannelPhase::UnfundedOutboundV2(ref mut channel) => {
7603
+ Ok(channel.tx_add_output(msg).into_msg_send_event(counterparty_node_id))
7604
+ },
7605
+ _ => Err("tx_add_output"),
7612
7606
}
7613
- }
7607
+ })
7614
7608
}
7615
7609
7616
7610
fn internal_tx_remove_input(&self, counterparty_node_id: &PublicKey, msg: &msgs::TxRemoveInput) -> Result<(), MsgHandleErrInternal> {
7617
- let per_peer_state = self.per_peer_state.read().unwrap();
7618
- let peer_state_mutex = per_peer_state.get(counterparty_node_id)
7619
- .ok_or_else(|| {
7620
- debug_assert!(false);
7621
- MsgHandleErrInternal::send_err_msg_no_close(
7622
- format!("Can't find a peer matching the passed counterparty node_id {}", counterparty_node_id),
7623
- msg.channel_id)
7624
- })?;
7625
- let mut peer_state_lock = peer_state_mutex.lock().unwrap();
7626
- let peer_state = &mut *peer_state_lock;
7627
- match peer_state.channel_by_id.entry(msg.channel_id) {
7628
- hash_map::Entry::Occupied(mut chan_phase_entry) => {
7629
- let channel_phase = chan_phase_entry.get_mut();
7630
- let msg_send_event = match channel_phase {
7631
- ChannelPhase::UnfundedInboundV2(ref mut channel) => {
7632
- channel.tx_remove_input(msg).into_msg_send_event(counterparty_node_id)
7633
- },
7634
- ChannelPhase::UnfundedOutboundV2(ref mut channel) => {
7635
- channel.tx_remove_input(msg).into_msg_send_event(counterparty_node_id)
7636
- },
7637
- _ => try_chan_phase_entry!(self, Err(ChannelError::Warn(
7638
- "Got a tx_remove_input message with no interactive transaction construction expected or in-progress"
7639
- .into())), chan_phase_entry)
7640
- };
7641
- peer_state.pending_msg_events.push(msg_send_event);
7642
- Ok(())
7643
- },
7644
- hash_map::Entry::Vacant(_) => {
7645
- Err(MsgHandleErrInternal::send_err_msg_no_close(format!("Got a message for a channel from the wrong node! No such channel for the passed counterparty_node_id {}", counterparty_node_id), msg.channel_id))
7611
+ self.internal_tx_msg(counterparty_node_id, msg.channel_id, |channel_phase: &mut ChannelPhase<SP>| {
7612
+ match channel_phase {
7613
+ ChannelPhase::UnfundedInboundV2(ref mut channel) => {
7614
+ Ok(channel.tx_remove_input(msg).into_msg_send_event(counterparty_node_id))
7615
+ },
7616
+ ChannelPhase::UnfundedOutboundV2(ref mut channel) => {
7617
+ Ok(channel.tx_remove_input(msg).into_msg_send_event(counterparty_node_id))
7618
+ },
7619
+ _ => Err("tx_remove_input"),
7646
7620
}
7647
- }
7621
+ })
7648
7622
}
7649
7623
7650
7624
fn internal_tx_remove_output(&self, counterparty_node_id: &PublicKey, msg: &msgs::TxRemoveOutput) -> Result<(), MsgHandleErrInternal> {
7651
- let per_peer_state = self.per_peer_state.read().unwrap();
7652
- let peer_state_mutex = per_peer_state.get(counterparty_node_id)
7653
- .ok_or_else(|| {
7654
- debug_assert!(false);
7655
- MsgHandleErrInternal::send_err_msg_no_close(
7656
- format!("Can't find a peer matching the passed counterparty node_id {}", counterparty_node_id),
7657
- msg.channel_id)
7658
- })?;
7659
- let mut peer_state_lock = peer_state_mutex.lock().unwrap();
7660
- let peer_state = &mut *peer_state_lock;
7661
- match peer_state.channel_by_id.entry(msg.channel_id) {
7662
- hash_map::Entry::Occupied(mut chan_phase_entry) => {
7663
- let channel_phase = chan_phase_entry.get_mut();
7664
- let msg_send_event = match channel_phase {
7665
- ChannelPhase::UnfundedInboundV2(ref mut channel) => {
7666
- channel.tx_remove_output(msg).into_msg_send_event(counterparty_node_id)
7667
- },
7668
- ChannelPhase::UnfundedOutboundV2(ref mut channel) => {
7669
- channel.tx_remove_output(msg).into_msg_send_event(counterparty_node_id)
7670
- },
7671
- _ => try_chan_phase_entry!(self, Err(ChannelError::Warn(
7672
- "Got a tx_remove_output message with no interactive transaction construction expected or in-progress"
7673
- .into())), chan_phase_entry)
7674
- };
7675
- peer_state.pending_msg_events.push(msg_send_event);
7676
- Ok(())
7677
- },
7678
- hash_map::Entry::Vacant(_) => {
7679
- Err(MsgHandleErrInternal::send_err_msg_no_close(format!("Got a message for a channel from the wrong node! No such channel for the passed counterparty_node_id {}", counterparty_node_id), msg.channel_id))
7625
+ self.internal_tx_msg(counterparty_node_id, msg.channel_id, |channel_phase: &mut ChannelPhase<SP>| {
7626
+ match channel_phase {
7627
+ ChannelPhase::UnfundedInboundV2(ref mut channel) => {
7628
+ Ok(channel.tx_remove_output(msg).into_msg_send_event(counterparty_node_id))
7629
+ },
7630
+ ChannelPhase::UnfundedOutboundV2(ref mut channel) => {
7631
+ Ok(channel.tx_remove_output(msg).into_msg_send_event(counterparty_node_id))
7632
+ },
7633
+ _ => Err("tx_remove_output"),
7680
7634
}
7681
- }
7635
+ })
7682
7636
}
7683
7637
7684
7638
fn internal_tx_complete(&self, counterparty_node_id: &PublicKey, msg: &msgs::TxComplete) -> Result<(), MsgHandleErrInternal> {
0 commit comments